Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 通过程序集隐藏消息框_Assembly_Mfc_Ida - Fatal编程技术网

Assembly 通过程序集隐藏消息框

Assembly 通过程序集隐藏消息框,assembly,mfc,ida,Assembly,Mfc,Ida,我的一个非常老的程序有一个错误的消息框,它一直在显示,我需要消除它。我丢失了源代码,因此现在正在使用汇编: 包含程序集和消息框的部分如下所示 Cmp, ebx 4F6h Jl short loc 10000dec Push 30h Push offset caption ; error ... Push offset detailsitspast08 Push 0 Call ds: messageboxa 如何修改它,使其不显示消息框?IDA可以,但您还需要一个十六进制编辑器,例如或。以下是您

我的一个非常老的程序有一个错误的消息框,它一直在显示,我需要消除它。我丢失了源代码,因此现在正在使用汇编:

包含程序集和消息框的部分如下所示

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

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

IDA可以,但您还需要一个十六进制编辑器,例如或。以下是您如何做到这一点:

在IDA中,将文本光标聚焦在要替换的第一行,
push 30h
。查看拆解窗口下方状态栏的左侧部分。您应该看到两个十六进制地址—物理地址和虚拟地址。注意物理的一个。现在关注调用ds:MessageBoxA之后的第一条指令。再次注意物理地址

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

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

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

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

之前:

之后:


用NOP序列(0x90)替换
JL
之后的所有五条指令。这些推送的长度是否等于这些NOP?否,NOP占用一个字节。属于这五条指令的所有字节都需要重写。如何做到这一点取决于所使用的工具(OllyDbg、IDA等)。我正在使用IDA,但如果需要,我可以使用另一个工具。程序刚刚崩溃,可能按ok会增加内存?