08/08/2011, 01:50
|
#1
|
elite*gold: 0
Join Date: May 2008
Posts: 132
Received Thanks: 120
|
erledigt! c++ CreateThread & MS Detours
ERLEDIGT
Quote:
Hey ho, ich bin langsam am verzweifeln. Ich versuche seit einer Ewigkeit eine dll in einem Prozess zu injizieren und eine simple Funktion zu hooken.
Kommen wir zum ersten problem, das Starten von einem Thread, eigentlich kein Problem:
Code:
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)initHook,0,0,NULL);
die Funktion ist folgendermaßen definiert:
Ich rufe CreateThread in der Dllmain auf und überorüfe vorher natürlich, ob fdwReason = dll_process_attach ist. Der Prozess stürtz sofort nach der Injection ab, ohne, dass die initHook Funktion im Thread gestartet wurde.
Kommen wir zum 2. Problem, dem Detour. Ich verwende MsDetours, um die BeginScene Funktion der d3d8.dll zu detourn. Die Adresse kann ich mir sehr gut duch das Handle vom d3d8 Modul + Offset 0x443A0 schnappen:
Code:
DWORD offset = 0x443A0;
DWORD funcadr = (DWORD)GetModuleHandle(L"d3d8.dll") + offset;
nun versuche ich den Detour zu setzen:
Code:
pBeginScene = (oBeginScene)DetourFunction((PBYTE)(funcadr),(PBYTE)GetDevicePointer);
Der Prozess stürzt ab!
Ich habe mir den abstürzenden Prozess in Olly genauer angeschaut. MsDetours setzt einen Jump genau am Funktionsbegin, das ist soweit gut. Nur führt der Jump ins Nichts, das verursacht den Absturz. Eigentlich müsste er zu meiner GetDevicePointer Funktion führen.
Ich habe mich an das 11. Tutorial von KN4CKER gehalten.
Ich verwende VisualC++ 2010 und Winject und den ProcessHacker2 zum injizieren der DLL.
Hat jemand eine Ahnung, warum das ganze fehl schlägt ?
|
Ohje, wie peinlich. ich hatte vergessen der Dllmain einen Rückgabewert zu verpassen. Nun funktioniert alles so weit.
|
|
|