|

楼主 |
发表于 2024-8-2 08:45:17
|
显示全部楼层
有个简单点的方法,修改一行代码,屏蔽所有弹窗。也可以用。
仿真器拔掉,MDK点击仿真,会弹窗报错。点击确定,关闭MDK。
下载一个调试器,olldbg 1.1版本(2.0不好用)。
od文件打开安装文件夹下的UV4.EXE。F9全速运行,好了,现在看到MDK重新打开。
输入下断点命令:BP MessageBoxA ,然后点击MDK 仿真按钮,MessageBoxA被拦截下来。
回到OD,双击取消这个断点。
然后ALT+F9 或 运行 OD 调试的运行到用户代码。目的是恢复到用户程序领空。
会看到这样代码:
00841880 /$ 53 push ebx
00841881 |. 8BDC mov ebx,esp
00841883 |. 83EC 08 sub esp,0x8
00841886 |. 83E4 F8 and esp,0xFFFFFFF8
00841889 |. 83C4 04 add esp,0x4
0084188C |. 55 push ebp
0084188D |. 8B6B 04 mov ebp,dword ptr ds:[ebx+0x4]
00841890 |. 896C24 04 mov dword ptr ss:[esp+0x4],ebp
00841894 |. 8BEC mov ebp,esp
00841896 |. A1 386FDD02 mov eax,dword ptr ds:[0x2DD6F38]
0084189B |. 83EC 08 sub esp,0x8
0084189E |. 56 push esi
0084189F |. 8BF1 mov esi,ecx
008418A1 |. 57 push edi
008418A2 |. 33FF xor edi,edi
008418A4 |. 397E 1C cmp dword ptr ds:[esi+0x1C],edi
008418A7 |. 0F84 B3000000 je UV41.00841960
UV4在好几个地方会调用系统API messagebox,但是这个地方报错和Encountered。。。报错是调用的同一个函数。拔掉仿真器弹窗目的是好定位,因为Encountered。。。弹窗,需要运行才会遇到
你们调试的可能某些值不一样,
这里把je UV41.00841960 改成 jmp UV41.00841960 即可,只把前面的je改成jmp,你调试后面的地址未必也是 UV41.00841960,没关系。
然后鼠标右键--》复制到可执行文件--》所有修改--》全部复制---》保存文件
即可。
之后用这个EXE仿真即可。在点击仿真,发现没有弹窗报错了,无论是Encountered 还是其他弹窗均没有了。
这是最简单办法,也不影响使用。
如果要优化一下,只拦截 Encountered 。。。的弹窗,用OD打开上传的文件,比对一下,看插入了哪些代码,要注意的有些地方不一样,主要是跳转或CALL指令后面的常数,需要根据调试的值调整,OD会根据输入的常数,自动计算偏移地址。 |
|