Pokaż wyniki od 1 do 3 z 3

Temat: hooking function

  1. #1

    Domyślnie hooking function

    Witam, nie jestem pewien czy za pomoca assemblera (wstawka assemblerowa w c++) uzyskam taki efekt, ale wlasnie tutaj pewna osoba mnie tu przekierowala. Pewien uzytkownik pomogl mi w stworzeniu cos w tego rodzaju funkcję, tyle, że inline - czyli podmieniała kod w ten sposób, że podczas wywołania funkcji prototypowej była po prostu wywoływana funkcja FAKE'owa, zaś sam kod w prototypie nie był wywoływał.

    Na przykładzie:
    Kod:
    void PrototypeFunction()
    {
           printf("I'm a prototype function\n");
    }
    
    void FakeFunction()
    {
          printf("I'm a fake function\n");
    }
    
    
    void HOOK_FUNCTION(void *prototype, void *fake) //Funkcja ktora ma na celu podmieniac prototypa na fake'ową funkcję
    {
    	char tramp[] = {0xB8, 0x00, 0x00, 0x00, 0x00, // mov eax addr
                                         0xFF, 0xE0}; // jmp eax
    
    	DWORD addr_puts = (DWORD)prototype;
    	DWORD addr_hook = (DWORD)fake;
    	memcpy(tramp + 1,&addr_hook,4);
    
    	DWORD old;
            VirtualProtect((void*)addr_puts,7,PAGE_EXECUTE_READWRITE,&old);
     
            memcpy((void*)addr_puts, tramp,7);
            VirtualProtect((void*)addr_puts,7,old,&old);
    }
    
    int main()
    {
          HOOK_FUNCTION(PrototypeFunction,FakeFunction); //Nastepuje podmiana funkcji prototypowej na fake'ową
    
          Prototype(); //Wywolanie prototypa
          return 0;
    }
    Kod:
    Wynik w konsoli:
    
    "I'm a fake function




    Ten temat pisze, bo chcę uzyskać co nie co inny efekt. A mianowicie. W momencie wywolania funkcji prototypowej i ukończenia jej instrukcji, chcialbym dodac na jej koniec wywolanie funkcji fake'owej. Czyli po prostu rozszerzenie funkcji prototypowej o kod funkcji fake'owej:

    Przyklad:
    Kod:
    void PrototypeFunction()
    {
           printf("I'm a prototype function\n");
    }
    
    void FakeFunction()
    {
          printf("I'm a fake function\n");
    }
    
    int main()
    {
          HOOK_FUNCTION(...); //Wywolanie procedury ktora mialaby na celu rozszerzyc funkcje prototypową o kod funkcji fake'owej (to jest tylko przykład)
    
          Prototype(); //Wywolanie prototypa
          return 0;
    }

    Kod:
    Wynik w konsoli:
    
    I'm a prototype function
    I'm a fake function
    Jak widać, nie musiałem wywoływać funkcji fake'owej, żeby jej instrukcje zostaly wywolane. JAK taki efekt moglbym uzyskac?

  2. #2
    Dawni Moderatorzy Avatar grzonu
    Dołączył
    26-12-2006
    Skąd
    Gdansk, Poland, Poland
    Posty
    1 392

    Domyślnie

    Funkcja prototypowa musialaby zmodyfikowac stos w taki sposob aby zamiast adresu powrotu do miejsca wywolania funkcja prototypowa wrocila do funkcji fake`owej.
    Filmy online---Grzonu Blog

    1) Moje gg to nie pomoc techniczna w obsludze keyloggerow!!! Na gg i pw pomagam tylko w kwestiach organizacyjnych forum. Masz problem to pisz na forum.
    2) Nie zajmuje sie malware a uprzedzajac pytanie "czemu?" - bo taki mam kaprys!

  3. #3

    Domyślnie

    Teoretycznie to wiadome, ale jak w praktyce. Jak to zrobic, bo szczerze mowiac moje umiejetnosci w assemblerze są znikome. Jak tego dokonac z poziomu c++ ewentulanie wstawka assemblera? Moze ta funkcja co podalem wystarczy zmodyfikowania, dalbys rade to zrobic? Sory, że prosze o tak duzo, ale moja wiedza w tym temacie jest NULL'owa.

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •