1

我的一个非常旧的程序有一个错误消息框,它一直显示,我需要摆脱它。我丢失了源代码,所以我现在正在使用程序集:

带有程序集和消息框的部分看起来像

Cmp, ebx 4F6h
Jl short loc 10000dec
Push 30h
Push offset caption ; error ...
Push offset detailsitspast08
Push 0
Call ds: messageboxa

如何修改它使其不显示消息框?

4

1 回答 1

3

IDA 很好,但您还需要一个十六进制编辑器,例如Hex WorkshopXVI32。以下是您的操作方法:

在 IDA 中,将文本光标放在要替换的第一行,push 30h. 查看反汇编窗口下方状态栏的左侧部分。您应该看到两个十六进制地址 - 物理地址和虚拟地址。注意物理的。现在专注于之后 call ds:MessageBoxA的第一条指令。再次记下物理地址。

在十六进制编辑器中打开可执行文件(先备份!),然后导航到第一个物理地址。确保您覆盖字节而不是插入它们,并继续写入0x90值直到到达第二个地址。不要覆盖它。

以不同的名称保存这个更改的文件,在另一个 IDA 实例中打开它(如果覆盖原始文件,IDA 将无法并排打开新文件),导航到虚拟地址,并检查所有字节已正确替换。就是这样。

提示:如果你进入 IDA 的Options > General并将操作码字节数设置为非零值,例如 10,你将在左侧看到组成每条指令的字节。您可以计算这些以确保您替换了正确的字节数。(或者你可以从结束地址中减去开始地址,显然)。

这是一个示例截图(截图中的应用程序当然不同,但要点是相同的):

前:

原始指令

后:

修改后的指令

于 2012-09-09T09:30:39.093 回答