
10.09.2008, 15:59
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
пробую перехватить MessageBoxA. Код библиотеки:
Код:
#include <stdafx.h>
struct jmp_far {
BYTE op_push;
DWORD arg;
BYTE op_ret;
};
BYTE buf[6];
DWORD adrmesbox;
DWORD written;
jmp_far jump;
BOOL WINAPI intMesbox(HWND hwnd, char *text, char *hdr, UINT utype)
{
WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&buf, 6, &written);
char *str = "перехвачено111";
((BOOL (__stdcall*)(HWND, char*, char*, UINT))adrmesbox)(hwnd,
str, hdr, utype);
WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox,(void*)&jump, 6,&written);
return 1;
}
void intercept(void) {
adrmesbox = (DWORD)GetProcAddress(GetModuleHandleA("user32.dll"),"MessageBoxA");
if(adrmesbox == 0)
{
MessageBoxA(NULL, "MessageBoxA не найден", "ошибка", 0);
return;
}
jump.op_push = 0x68;
jump.arg = (DWORD)&intMesbox;
jump.op_push = 0xC3;
ReadProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)buf, 6, &written);
WriteProcessMemory(GetCurrentProcess(), (void*)adrmesbox, (void*)&jump, 6, &written);
}
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call,
LPVOID lpReserved )
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH )
{
intercept();
}
return 1;
}
void main(void) {
}
После того как я вставляю эту dll в процесс, запускаю MessageBoxA. Ничего не происходит, а должен появиться бокс с сообдением "перехвачено".
Visual Studio 2008
сама статья - http://www.rsdn.ru/article/baseserv/IntercetionAPI.xml
|
|
|