请教98下无法截获MessageBoxA的问题
我想截获所有进程的MessageBoxA函数,我先用一个WH_GetMessage进入其它进程的空间,然后再将该进程空间的MessageBoxA的前几个字符改成JMP指令,直接JMP到我的函数MyMessageBoxA,用这种方法,在2000下运行正常,但是在98下则无法截获MessageBoxA。
于是我继续分析在98下为什么会失败,发现一些情况:
在我的程序中,我找到MessageBoxA的函数地址是BFF541BA,为验证此地址是否真的是MessageBoxA的地址,进入Softice后通过BPX MESSAGEBOX,可以发现MessageBoxA的地址确实是BFF541BA。后来发现每次调用WriteProcessMemrory函数改写MessageBoxA的头几个字节时,WriteProcessMemrory都失败,所以我开始认为是该内存区域不可写的原因,于是想到用VirtualProtect将BFF541BA的内存属性变成可写,可奇怪的是VirtualProtect每次都执行失败。
后来我同样用VirtualProtect改写自己的函数,地址在0045504C,这将就成功了。所以我想是不是User32.dll中的内存是不可写的,于是想到用WinHex打开User32.dll看看是不是可以改写,可奇怪的是在WinHex中居然没有列出user32.dll,在WinHex中我看到所有进程的最高地址都是83000000左右,根本没有BFF541BA这么大的地址,所以现在非常迷惑,为什么98下就无法修改User32.dll中的MessageboxA的内存?是不是要用其它方法修改??
问题点数:50、回复次数:6Top
1 楼zwb666(zwb)回复于 2004-12-05 11:38:36 得分 10
帮顶Top
2 楼ChenJIM1981(ChenJIM1981)回复于 2004-12-18 13:58:46 得分 0
有人知道吗?Top
3 楼ChenJIM1981(ChenJIM1981)回复于 2004-12-25 15:36:55 得分 0
有人知道吗?
Top
4 楼terry6394(小猪,向前跑!)回复于 2004-12-27 14:22:43 得分 10
你说的是API拦截吗?·Top
5 楼ChenJIM1981(ChenJIM1981)回复于 2004-12-27 16:59:52 得分 0
是的啊
Top
6 楼terry6394(小猪,向前跑!)回复于 2004-12-27 18:43:24 得分 30
不懂哦。。呵呵。。正在研究中。。希望向你学习
Top




