1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
#include <stdio.h>
#include <windows.h>
typedef int oldMessageBox(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption, UINT uType);
oldMessageBox xMessageBox;
BYTE hook[6];
void ApiHook(LPSTR Module,LPCSTR OldFunc,LPVOID NewFunc, unsigned char *backup)
{
DWORD dwProtect;
HINSTANCE hLib = LoadLibrary(Module);
DWORD OldFuncAddr = (DWORD)GetProcAddress(hLib, OldFunc);
DWORD NewFuncAddr = (DWORD)NewFunc;
BYTE jmp[6] = {0xE9,0x00,0x00,0x00,0x00,0xC3};
DWORD jmpAddr = (NewFuncAddr - OldFuncAddr) - 5;
memcpy(&jmp[1],&jmpAddr,4);
VirtualProtect((LPVOID)OldFuncAddr,6,PAGE_EXECUTE_READWRITE,&dwProtect);
WriteProcessMemory(GetCurrentProcess(),(LPVOID)OldFuncAddr,jmp,6,0);
VirtualProtect((LPVOID)OldFuncAddr,6,dwProtect,&dwProtect);
}
int newMessageBox(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption, UINT uType)
{
_asm
{
mov edi, edi
}
xMessageBox(0,"Hooked","Hooked",MB_OK);
return MessageBox(hWnd,lpText,lpCaption,uType);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstace,LPSTR lpCmdLine,int nCmdShow)
{
ApiHook("user32.dll","MessageBoxA",newMessageBox,hook);
}
|