反反汇编技术和 IDA Pro

逆向工程 艾达 反调试
2021-06-14 23:38:07

我是 RE 和 IDA Pro 7.2 的新手,我正在学习实用恶意软件分析这本书。我目前正在处理反反汇编章节中的实验室 15-01 问题,但在我的环境中难以重现部分解决方案。

我通过将一些伪造的操作码重新定义为数据来解决实验室问题,现在我有合理的反汇编列表可以查看。到现在为止还挺好。但最后,解决方案会告诉您使用“P”热键将此修复部分转换为函数。这对我不起作用:我在输出窗口中收到此消息:

.text:00401010: The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.

地址指向我所做的第一个数据定义。

尝试翻转到图形模式也不起作用。我收到一个弹出窗口,告诉我只有属于函数的指令才能以图形模式显示。

如果我转到“问题”选项卡,我会看到如下几行:

.text:00401062  NONAME      db 0E8h

但我没有在 IDA Pro 帮助文件中收集任何帮助我解决特定情况的名称问题。

最终,我使用了 Edit -> Patch Program -> change byte 来 NOP 出数据字节并将它们转换为代码。然后我有了一个可以绘制图形的函数。

我的问题是,有没有办法在不修补字节的情况下做到这一点?

编辑:在帖子中添加了错误消息文本。

1个回答

我认为您可能会遇到所谓的rogue-byte

我目前正在编写一些脚本来修补它们(请参阅IDAPython - Find the start of an undefined code blob)。

你能告诉我它是否是相同类型的代码逻辑吗?

如果是,您确实可能想用NOP替换流氓字节如果不修补二进制文件,您就无法做到这一点,因为正如您所说,这是一种反汇编技术。来这里是为了惹IDA Pro!

如果你想修补它:

  • 选择包含流氓字节的行,然后取消定义它(快捷方式:“ U ”,或转到“编辑 -> 取消定义”)
  • 选择指令(“ db 0E8h ”)然后去“编辑 -> 补丁程序 -> 组装”。你现在可以用 NOP 替换你的流氓字节,输入“ nop ”,然后“OK”。
  • 您现在需要将 NOP 定义为代码(因此它可以被解释为指令),方法是按 C 快捷键,或转到“编辑 -> 代码”。
  • 最后,您可以通过到达它的开头(例如loc_XXXXX)并按 P 快捷键或“编辑 -> 函数 -> 创建函数来将函数定义为适当的函数

如果您愿意,我可以与您分享我编写的 IDAPython 脚本,即使它还没有完成。