inline hook MessageBox(2)

青春壹個敷衍的年華 提交于 2019-11-26 19:36:06

笔记

char *lpText1;
ULONG my_esp;
__declspec(naked) void MyMessageBoxA(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType)
{
//printf("hook");
_asm
{
//pop hWnd
//pop lpText
//pop lpCaption
//pop uType
mov my_esp,esp; //先保存下需要用到的参数
pushad//然后保存整个堆栈
pushfd
push eax
mov eax, my_esp
add eax, 8
mov eax,[eax] //不能直接 mov给变量,编译通不过 , 需要用eax 中转一下,听说是编译器的问题。
mov lpText1,eax;
pop eax;
}
printf("MyMessageBoxA lpText: %s \r\n",lpText1); //lpText1已经是地址了 不需要&度地址赋。
_asm
{
popfd
popad //把堆栈还原掉。
RETN 16; //把参数废除掉 4*n 屏蔽掉MessageBoxA
}
_asm
{
PUSH EBP   //执行以下被HOOK掉的 头5个字节。
MOV EBP,ESP
JMP newbark;   //然后调回去
}
}

转载于:https://www.cnblogs.com/yueyue184/archive/2012/05/02/2479144.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!