2016-08-06 5 views
0

Ich versuche, MS-Umleitungen zu verwenden, und ich weiß nicht, ob ich etwas falsch mache; Ich kann keine Antwort auf mein Problem finden.Warum stürzt der Prozess ab, wenn versucht wird, einen Winapi umzuleiten?

Ich habe versucht, mehrere Funktionen in einem Prozess mit meiner injizierten DLL zu umgehen, aber jeder Versuch führt zum Absturz des Prozesses.

Eine der Funktionen, ich versuche ist winapi DirectDrawCreate zu einzuhaken:

DetourTransactionBegin(); 
DetourUpdateThread(GetCurrentThread()); 
DetourAttach((PVOID *)DirectDrawCreate, hkDirectDrawCreate); 
DetourTransactionCommit(); 

hkDirectDrawCreate definiert ist als:

HRESULT __stdcall hkDirectDrawCreate(GUID *p1, LPDIRECTDRAW *p2, IUnknown *p3) 
{ 
    if(!pDDC) 
     return 0x00; 

    printf("A call to hkDirectDrawCreate was made\n"); 

    return DirectDrawCreate(p1, p2, p3); 
} 

Auf den Aufruf der Prozess abstürzt DetourAttach; der Stack-Trace ist:

Der Code bricht in 'detour_skip_jmp' at '0x68B028BD':

// First, skip over the import vector if there is one. 
    if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [imm32] 
68B028B2 mov   ecx,1 
68B028B7 imul  edx,ecx,0 
68B028BA mov   eax,dword ptr [pbCode] 
68B028BD movzx  ecx,byte ptr [eax+edx] 
68B028C1 cmp   ecx,0FFh 
68B028C7 jne   detour_skip_jmp+82h (68B02912h) 
68B028C9 mov   edx,1 
68B028CE shl   edx,0 
68B028D1 mov   eax,dword ptr [pbCode] 
68B028D4 movzx  ecx,byte ptr [eax+edx] 
68B028D8 cmp   ecx,25h 
68B028DB jne   detour_skip_jmp+82h (68B02912h) 

Edit: ppGlobals ist NULL, und pbCode gibt die Fehlermeldung 'Fehler beim Lesen der Zeichen der Zeichenfolge'

Zurück zu DetourCodeFromPointer ppGlobals ist auch NULL dort, aber ich denke, es soll sein; hier ist der Anruf:

pDetour = DetourCodeFromPointer(pDetour, NULL); 

Antwort

2

Kein Zweifel, die Import-Tabelle wurde als Anti-Hooking-Technik verschoben oder geschrubbt. Fügen Sie einfach einen Sprung am Anfang von DirectDrawCreate zu Ihrem hkDirectDrawCreate, dann beim Aufruf des ursprünglichen Sprungs zurück zu DirectDrawCreate, aber seien Sie sicher, dass es nach Ihrem Sprung zu Ihrem Haken ist, sonst stecken Sie in einer endlosen rekursiven Schleife fest.

Verwandte Themen