APIHijack - A Library for easy DLL function hooking.






4.79/5 (29 votes)
This library allows you to replace functions in other DLLs with functions from your own DLL.
Introduction
Based on DelayLoadProfileDLL.CPP, by Matt Pietrek for MSJ February 2000. This code is intended to be included in a DLL inserted through a global Windows Hook (CBT hook for example). It will replace functions from other DLLs (e.g. DDRAW.DLL) with functions from your DLL.
Functions are hooked by passing a parameter structure to the HookAPICalls()
function as follows:
SDLLHook D3DHook = { "DDRAW.DLL", false, NULL, // Default hook disabled, NULL function pointer. { { "DirectDrawCreate", MyDirectDrawCreate }, { NULL, NULL } } }; BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD fdwReason, LPVOID lpReserved) { if ( fdwReason == DLL_PROCESS_ATTACH ) // When initializing.... { hDLL = hModule; // We don't need thread notifications for what we're doing. Thus, // get rid of them, thereby eliminating some of the overhead of // this DLL DisableThreadLibraryCalls( hModule ); // Only hook the APIs if this is the right process. GetModuleFileName( GetModuleHandle( NULL ), Work, sizeof(Work) ); PathStripPath( Work ); if ( stricmp( Work, "myhooktarget.exe" ) == 0 ) HookAPICalls( &D3DHook ); } return TRUE; }
Now all that remains is to get your DLL loaded into the target process.