сабж как реализовать?
уже потратил много времени но не получается некоторый кодинг попытки
#include <Windows.h>
DWORD address_hook = 0;
void SetHook();
void MEMwrite(void *adr, void *ptr, int size)
{
DWORD OldProtection;
VirtualProtect(adr,size,PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr,ptr,size);
VirtualProtect(adr,size,OldProtection, &OldProtection);
}
int hookedFunc(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType)
{
DWORD prot =0;
DWORD addres =(DWORD)MessageBoxA;
VirtualProtect((void*)addres,sizeof((PBYTE)SetHook ),PAGE_EXECUTE_READWRITE,&prot);
address_hook = (DWORD)hookedFunc;
MEMwrite((void*)addres,(void*)"\x8B\xFF\x55\x8B\xE C",5);
MessageBoxA(hWnd,lpText,"Hook me",uType);
memcpy((void*)addres,(PBYTE)SetHook,sizeof((PBYTE) SetHook));
VirtualProtect((void*)addres,sizeof((PBYTE)SetHook ),prot,&prot);
return 1;
}
void SetHook()
{
_asm jmp hookedFunc
}
HRESULT HOOK()
{
MessageBox(0,"Хук установлен",0,0);
address_hook =(DWORD)hookedFunc;
DWORD addres =(DWORD)MessageBoxA;
DWORD prot =0;
VirtualProtect((void*)addres,sizeof((PBYTE)SetHook ),PAGE_EXECUTE_READWRITE,&prot);
memcpy((void*)addres,(PBYTE)SetHook,sizeof((PBYTE) SetHook));
VirtualProtect((void*)addres,sizeof((PBYTE)SetHook ),prot,&prot);
::ExitThread(1337);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
CreateThread(0,0,(LPTHREAD_START_ROUTINE)HOOK,0,0, 0);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
в чём ошибка?
По возможности выложите пример пожалуйста