DLL_PROCESS_ATTACH und geladene Module
-
Heyo,
Ich versuche im Moment in einer EXE-Datei einen Import zu verändern, dass klappt ganz gut und wunderbar, wenn diese Funktion aus der EXE-Datei heraus aufgerufen wird.
Sobald ich dies aber bei einer anderen EXE-Datei machen möchte, bei der ich in den Prozess eingeschleust werde - über ein WH_CBT - funktioniert dies jedoch nicht, da die DLLs zu diesem Zeitpunkt noch nicht initialisiert wurden.
Da bereits in der win_main der veränderte Import benutzt werden soll kann ich auf keine anderen Hooks zurückgreifen.
Weis jemand wie ich An die Initialisierte Importtable komme, bevor diese benutzt wird ?
Vielen Dank schonmal
-
Das versteht doch niemand. Kann man das nicht vernünftig beschreiben?
-
Also, ich setze einen CBT Hook:
(innerhalb der DLL die in den Zielprocess reinmuss)
LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam) { return CallNextHookEx(CBThook,nCode,wParam,lParam) ; } ; void WINAPI InstallNCT(void) { GWMhook = SetWindowsHookEx(WH_CBT,&CBTProc,GetModuleHandle("MYDLL.dll"),NULL ); } ;
Dieser Code wird mit der ProzessID des Launchers ausgeführt. Sobald ein neuer Prozess erstellt/aktiviert ist wird der folgende Code durchgeführt:
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: if (isZielProzess()) { HMODULE thismod = GetModuleHandle("MYDLL.dll") ; LPVOID addr = GetProcAddress(thismod,"MyOverrideFunction") ; ChangeImport_("D3DDrv.dll","DDRAW.dll","FunctionName",addr) ; } ; return TRUE ; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } ;
Wobei ChangeImport_(ModulName,ImportModulName,ImportFunctionName,Addresse) ;
in der MudulName.dll den Import aus der ImportModulName.Dll mit dem Namen ImportFunctionName mit der Addresse überschreibt.Nun funzt das nicht, da die D3DDrv nich initialisiert ist... aber ich brauchs funzent