我的一个非常古老的程序有一个错误的消息框,它一直显示,我需要摆脱它。我已经丢失了源码,所以我现在正在使用汇编:
包含程序集和消息框的部分看起来像
Cmp, ebx 4F6h
Jl short loc 10000dec
Push 30h
Push offset caption ; error ...
Push offset detailsitspast08
Push 0
Call ds: messageboxa
如何修改它以使其不显示消息框?
答案 0 :(得分:3)
IDA很好,但您也需要一个十六进制编辑器,例如Hex Workshop或XVI32。这是你如何做到的:
在IDA中,将文本光标聚焦在要替换的第一行push 30h
。查看反汇编窗口下方状态栏的左侧部分。您应该看到两个十六进制地址 - 物理地址和虚拟地址。注意物理的一个。现在关注 call ds:MessageBoxA
之后的第一条指令。再次注意物理地址。
在十六进制编辑器中打开可执行文件(首先进行备份!),然后导航到第一个物理地址。确保覆盖字节而不是插入字节,并继续写入0x90
值,直到到达第二个地址。不要覆盖它。
将此更改的文件保存为其他名称,在另一个IDA实例中打开它(如果您覆盖原始文件,IDA将无法并排打开新文件),导航到虚拟地址,然后检查所有字节都已正确替换。就是这样。
提示:如果你去IDA的选项> 常规并将操作码字节数设置为非零值,例如10,您将看到构成左侧每条指令的字节。您可以对这些进行计数,以确保替换了正确的字节数。 (或者你可以从结束地址中减去起始地址,显然)。
这是一个示例屏幕截图(镜头中的应用程序当然不同,但要点是相同的):
之前:
之后: