
LRESULT WINAPI HookCallBack(
int nCode,
WPARAM wParam,
LPARAM lParam);
HHOOK SetWindowsHookEx(
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId);
LRESULT CallNextHookEx(
HHOOK hhk,
int nCode,
WPARAM wParam,
LPARAM lParam);
UnHookWindowsHookEx(
HHOOK hhk);
jmp 0xFFFFFFFF
typedef int (__stdcall *TMessageBoxA)(HWND hWnd,LPSTR lpText,LPSTR lpCaption,int uType);


extern "C" TMessageBoxA __fastcall GetPFuncAddr(LPSTR DllName,const char* FullName);


TMessageBoxA __fastcall GetPFuncAddr(LPSTR DllName,const char* FullName)

{
void *DllModule;
DllModule = LoadLibrary(DllName);
TMessageBoxA PAddr = (TMessageBoxA)GetProcAddress(DllModule,FullName);
return PAddr;
}
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead);
BYTE *pFuncData = new BYTE[4];
LPDWORD iRead;
ReadProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,pFuncData,5,iRead);
BYTE AsmCode[4]; 
AsmCode[0] = 0xE9;
__asm

{
lea eax, MyMessageBoxA
mov ebx,PMessageBoxA
sub eax,ebx
sub eax,5
mov dword ptr[AsmCode+1],eax
}
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,AsmCode,5,iWrite);
int WINAPI MyMessageBoxA(HWND hWnd,LPSTR lpText,LPSTR lpCaption,int uType)

{
//我们来弹出一个消息框,改变一下传入的标题参数值
//那么首要做的,就是先恢复MessageBoxA
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,pFuncData,5,iWrite);
int Result = MessageBoxA(hWnd,lpText,"ApiHook Test",uType);
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,AsmCode,5,iWrite);
return Result;
}
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,pFuncData,5,iWrite);

| Welcome to CnPack Forum (http://bbs.cnpack.org/) | Powered by Discuz! 5.0.0 |