Prob mit Detour | #1 | |
Join Date: Sep 2010 Posts: 38 |
Hey ho, ich habe mich gerad an dem D3d8 Hook tut von Knavker versucht und bekomme Probleme. Wer das Tut nicht kennt: Man sucht die Stelle im Speicher, wo die BeginScene Funktion liegt und detourt dann in der Funktion. Mein erstes Problem: Wenn ich Olly1.x verwende finde ich eine andere Funktionsadresse, als wenn ich Olly2.x benutze: Olly1 Funktionebsginn : CPP Code: Olly2 Funktionsbeginn : CPP Code: Nun gut, ich habe dann also versucht das ganze zu detourn: (nicht am Funktionsanfang) CPP Code: Der Prozess stürzt ab beim Injecten. Wenn ich mir den Detour Jump anschaue: 6E4243BE JMP 6E3B1258 kann ich der Adresse in Olly nicht folgen, Olly sagt Quote No Memory at this address Könnte mir jemand sagen, was da falsch läuft, bzw was ich falsch mache ? mfg Krusty. __________________ Only registered and activated users can see links. |
|
krusty is offline |
CPP Code:
bin jetzt soweit gekommen, habe das richtige offset gefunden.
#include <Windows.h> #include "d3d8.h" #include "detours.h" #pragma comment (lib,"detours.lib") IDirect3DDevice8* deviceptr = NULL; typedef void (*oBeginScene)(); oBeginScene pBeginScene; void __declspec (naked) GetDevicePointer(){ MessageBox(0,"BeginScene wird aufgerufen","funcktioniert",0); if (deviceptr == NULL){ __asm{ push eax mov eax, [esp + 0x34 + 0x04] mov deviceptr,eax pop eax jmp pBeginScene } }else{ __asm jmp pBeginScene } } void initHook(){ char buff[200]; DWORD offset = 0x443A0; DWORD funcadr = (DWORD)GetModuleHandle("d3d8.dll") + offset + 0x1e; itoa(funcadr,buff,16); strcat(buff," hier wird gehookt."); MessageBox(0,buff,"[DEBUG]",0); pBeginScene = (oBeginScene)DetourFunction((PBYTE)(funcadr),(PBYTE)GetDevicePointer); } BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved){ if (fdwReason == DLL_PROCESS_ATTACH){ initHook(); } }
Allerdings springt msdetours immernoch ins nirvana, also nicht zu meiner GetDevicePointer funktion!
Benutze VC++ unter win64 bit. ich injiziere die DLLs mit dem Programm ProcessHacker2, ist ein erweiterter Taskmanager.
Noch eine Sache. Ich habe versucht initHook Funktion im Thread zu starten:
CPP Code:
aus der DLL Main raus schmiert der Prozess sofort ab.
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)initHook,0,0,NULL);