Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Hook na funkcje


Rekomendowane odpowiedzi

Opublikowano
Witajcie, mam takie małe pytanie, jak w C++ zrobić hook na daną funkcję z procesu do którego wstrzykuje daną dllkę ?
Szukałem na forum, ale wszystko co było na ten temat albo mi nie działało albo nie było dokładnie tym czego chciałem.
Chodzi mi dokładnie o funkcje oCGame::Render (0x006C86A0) z Gothic 2 Noc Kruka.Wywołuje się ona gdy gra jest renderowana (kilka razy na sekundę bodajże), jest to po prostu swoisty update.
Jak na razie staram się nie używać tej funkcji, a zamiast tego robię to tak:
#include <windows.h>
 
DWORD WINAPI MAIN();
 
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
    switch(reason)
    {
        case DLL_PROCESS_ATTACH:
            CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)MAIN,NULL,NULL,NULL);
            MessageBoxA(0,"Dll zostało poprawnie załadowane","Komunikat",0);
            break;
    }
    return TRUE;
}
 
DWORD WINAPI MAIN()
{      
    while(1)
    {          
        if(GetAsyncKeyState(0x33))
        {
                        //Kod uzdrowienia            
                        MessageBoxA(NULL,"Zostałeś uzdrowiony ","Wiadomość",MB_OK);
        }          
    }
    return 0;
}
Niestety takie wyjście z tej sytuacji daje mi wiele licznych błędów, np dy użyje funkcji uzdrawiania gdy menu jest aktywne to dostaję błąd ponieważ może to zostać użyte tylko podczas renderowania a klawisze są aktywne cały czas.
O to funkcja oCGame::Render w IDA Pro:
.text:006C86A0 ; public: virtual void __thiscall oCGame::Render(void)
Bardzo proszę o waszą pomoc.

brzydkie2_ewareap.png

Opublikowano

typedef void (__cdecl* tRender) ( void );
tRender pRender = NULL;

__declspec(naked) void hkRender(void)
{
   __asm PUSHAD

     TwojeFunckcja();
   __asm POPAD
   __asm JMP [pRender] 
}

pRender = (tRender)DetourFunction( (PBYTE)0xadres, (PBYTE)hkRender);

Microsoft Detours 1.5.

 

if(GetAsyncKeyState(0x33)&1)

i będzie wywoływać funkcję co sekunde

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...