D3D Hooking Problem

02/28/2011 22:29 realyreal22#1
Alloa,

ich habe mir das Tutorial von [Only registered and activated users can see links. Click Here To Register...] durchgelesen und dementsprechend auch versucht was eigenes zu konstruieren. Ich habe eine eigene DLL Hook Datei programmiert und sie mit einem fremden Injector verbunden. Klappt bisher prima.

Es ist mir gut gelungen, ein Rechteck zu zeichnen und ein bisschen Text darauf abzubilden. Sobald ich mein Spiel starte geht alles wie von Zauberhand.

Allerdings ist mir vor kurzem aufgefallen, dass mein "Hook" dummerweise vom Spiel nach einer bestimmten Zeit erkannt wird und sofort ausgeht.

Zum Code:
Ich habe zunächst einmal auf klassischer Art die Funktion EndScene gehookt, in dem ich folgende Funktion gethreadet habe, die den Detour-Prozess einschaltet:

Code:
void InitHook()
{
    HMODULE hModule = NULL;
    
    while(!hModule)
    {
        hModule = GetModuleHandleA("d3d9.dll"); 
        Sleep( 100 ); 
    }

    oEndScene = ( tEndScene )DetourFunc((PBYTE) 0x7542CE09,(PBYTE) hkEndScene, 5);

}
Meine Detour-Funktion sieht folgendermaßen aus:
Code:
void *DetourFunc(BYTE *src, const BYTE *dst, const int len) // credits to gamedeception
{
    BYTE *jmp = (BYTE*)malloc(len+5);
    DWORD dwback;

    VirtualProtect(src, len, PAGE_READWRITE, &dwback);

    memcpy(jmp, src, len); jmp += len;

    jmp[0] = 0xE9;
    *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

    src[0] = 0xE9;
    *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;

    VirtualProtect(src, len, dwback, &dwback);
    
    return (jmp-len);
}
Nun meine Frage: Woran könnte es liegen, dass das Spiel erst NACH ein paar Minuten erkennt, es bestehe eine Hooking-Aktion? Vielleicht weil ich keinen eigenen Injector benutze?
03/01/2011 15:22 Akorn#2
Das Anti-Cheat pogramm durchsucht den prozess nur alle paar minuten nach veränderungen deshalb wird der hook nicht direkt erkannt.
Das Anti-Cheat system kannst du umgehen indem du den hook nicht am anfahng der funktion setzt sondern erst später, dazu wollte MrSm!th auch ein tutorial machen.