代码之家  ›  专栏  ›  技术社区  ›  Tarang

通过程序集隐藏消息框

  •  2
  • Tarang  · 技术社区  · 12 年前

    我的一个非常旧的程序有一个错误的消息框,它一直在显示,我需要删除它。我已经丢失了源代码,所以我现在使用汇编:

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

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

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

    1 回复  |  直到 12 年前
        1
  •  4
  •   DCoder NikiC    12 年前

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

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

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

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

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

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

    之前:

    The original instructions

    之后:

    The changed instructions