首页
社区
课程
招聘
未解决 [求助]十万个为什么之 HOOK MessageBox 谁来救救孩子
发表于: 2019-4-13 12:12 1926

未解决 [求助]十万个为什么之 HOOK MessageBox 谁来救救孩子

2019-4-13 12:12
1926
没办法HOOK到messagebox  下面是DLL 代码模仿看雪里面一位HOOK 任务管理器一个大佬写的~  https://bbs.pediy.com/thread-228669.htm
自己的思路
获取user32.dll句柄-> 获取Messagebox地址->修改前5个字节跳转到自己定义的假Messagebox 

虽然网上也有很多文章 但都各说其词  里面还包涵了一个“#include “ Hookmessagebowindow.h 自己写的文件也不说那里来弄得自己更糊涂了!!!

贴上代码
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"

DWORD oldProtect;
BYTE  JmpBtye[5];
BYTE  OldByte[5];
void * H1_Messagebox;
void *  F1_Messagebox();
bool H1_MessageBoxA();
void UnHook();
//定义函数原型
int WINAPI My_MessageBoxA(
	HWND hwnd,
	LPCTSTR lpTExt,
	LPCTSTR lpCaption,
	UINT uType);
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
		H1_MessageBoxA();
		break;
    case DLL_PROCESS_DETACH:

        break;
    }
    return TRUE;
}

//自定义函数初始化
int WINAPI My_MessageBoxA(
	HWND hwnd,
	LPCTSTR lpTExt,
	LPCTSTR lpCaption,
	UINT uType)
{
	char newText[1024] = { 0 };
	lstrcpy(newText, lpTExt);
	lstrcat(newText, TEXT("\n\tMessageBox Hacked by pediy.com!"));
	uType |= MB_ICONERROR;
	return 0;
};
//取模块地址
void *  F1_Messagebox()
{
	void * addr = 0;
	HMODULE hModule = LoadLibraryA("User32.dll");
	addr = (void *)GetProcAddress(hModule, "MessageBoxA");
	return addr;
}

//开始hook
bool H1_MessageBoxA()
{

	void *addr = F1_Messagebox();
	H1_Messagebox = addr;
	if (addr == 0)
	{
		MessageBoxA(NULL, "error", NULL, 0);
		return false;
	}

	VirtualProtect((void*)addr, 5, PAGE_EXECUTE_READWRITE, &oldProtect);
	JmpBtye[0] = 0xE9;
	*(DWORD*)JmpBtye[1]= (DWORD)((long long)My_MessageBoxA - (long long)addr - 5);
	memcpy(OldByte, (void*)addr, 5);
	memcpy((void*)addr, JmpBtye, 5);
	

}
//恢复
void UnHook()
{
	memcpy((void*)H1_Messagebox, OldByte, 5);
	DWORD p;
	VirtualProtect((void*)H1_Messagebox, 5, oldProtect, &p);

}




[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
2
*(DWORD*)JmpBtye[1]
不用我多说了吧
2019-4-13 13:00
0
雪    币: 446
活跃值: (600)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Sprite雪碧 *(DWORD*)JmpBtye[1]不用我多说了吧
额 取地址符号没给上吗~~
2019-4-13 14:29
0
雪    币: 446
活跃值: (600)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Sprite雪碧 *(DWORD*)JmpBtye[1]不用我多说了吧
虽然是成功了但直接废了我的messagebox没有弹出来了~~
2019-4-13 14:36
0
雪    币: 45
活跃值: (2575)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
return 0 ?
2019-4-13 14:55
0
雪    币: 45
活跃值: (2575)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>

DWORD oldProtect;
BYTE  JmpBtye[5];
BYTE  OldByte[5];
void * H1_Messagebox;
void *  F1_Messagebox();
bool H1_MessageBoxA();
void UnHook();
//定义函数原型
int WINAPI My_MessageBoxA(
	HWND hwnd,
	LPCSTR lpTExt,
	LPCSTR lpCaption,
	UINT uType);


//自定义函数初始化
void *  F1_Messagebox()
{
	void * addr = 0;
	HMODULE hModule = LoadLibraryA("User32.dll");
	addr = (void *)GetProcAddress(hModule, "MessageBoxA");
	return addr;
}
int WINAPI My_MessageBoxA(
	HWND hwnd,
	LPCSTR lpTExt,
	LPCSTR lpCaption,
	UINT uType)
{
	char newText[1024] = { 0 };
	lstrcpyA(newText, lpTExt);
	lstrcpyA(newText, TEXT("\n\tMessageBox Hacked by pediy.com!"));
	uType |= MB_ICONERROR;
	UnHook();//这里 恢复 Hook 或自定义一个 跳回
	return MessageBoxA(hwnd, newText,lpCaption,uType);
};
//取模块地址


//开始hook
bool H1_MessageBoxA()
{

	void *addr = F1_Messagebox();
	H1_Messagebox = addr;
	if (addr == 0)
	{
		MessageBoxA(NULL, "error", NULL, 0);
		return false;
	}

	VirtualProtect((void*)addr, 5, PAGE_EXECUTE_READWRITE, &oldProtect);
	JmpBtye[0] = 0xE9;
	DWORD dwJmp = (DWORD)My_MessageBoxA - (DWORD)addr - 5;
	memcpy(&JmpBtye[1], &dwJmp, 4);
	memcpy(OldByte, (void*)addr, 5);
	memcpy((void*)addr, JmpBtye, 5);
	return true;

}
//恢复
void UnHook()
{
	memcpy((void*)H1_Messagebox, OldByte, 5);
	DWORD p;
	VirtualProtect((void*)H1_Messagebox, 5, oldProtect, &p);

}


int main()
{

	H1_MessageBoxA();
	MessageBoxA(NULL, "123", "456", NULL);
	return 0;
}

2019-4-13 15:02
0
雪    币: 446
活跃值: (600)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
CrackFive //&nbsp;ConsoleApplication1.cpp&nbsp;:&nbsp;定义控制台应用程序的入口点。 // #include&nbsp;&quo ...
可以了!!!感谢
2019-4-13 15:14
0
雪    币: 446
活跃值: (600)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
之前有试过这样子的返回的不知道什么原因编译不过 就以为不能这样子搞!!!!
2019-4-13 15:15
0
游客
登录 | 注册 方可回帖
返回
//