【发布时间】:2016-10-28 05:54:35
【问题描述】:
作为破解挑战的一部分,我正在研究一个模糊的二进制文件。它有一系列push、pop 和nop 指令(重复数千次)。从功能上讲,这些块对程序没有任何影响。但是,它们使 CFG 的生成和反转过程非常困难。
有关于如何将指令更改为 nop 的解决方案,以便我可以删除它们。但就我而言,我想完全去掉这些说明,以便更好地了解 CFG。如果指令被剥离,我知道内存偏移也必须修改。据我所知,没有工具可以直接实现这一点。
我正在使用 IDA Pro 评估版。我也对使用其他逆向工程框架的解决方案持开放态度。如果它是可编写脚本的,则它是可取的。
我通过了similar question,但是建议的解决方案不适用于我的情况。
【问题讨论】:
-
有 r2 (radare.org) 用于 unix 世界的框架,带有脚本、CLI、WEB、简单的 TUI 和尚未完成的 GUI。你也可以试试reverseengineering.stackexchange.com
-
并非总是可以做到这一点。代码可能以难以自动检测的方式依赖于事物的相对偏移量。 (例如,比仅修复跨越已删除insns的跳转地址上的位移更复杂)。但我想值得尝试看看它是否能在不破坏程序的情况下工作。
-
或者我想,在生成 CFG 时,我应该只考虑部分代码(如
push、pop、nop序列的裂缝)寻找丢弃方法。我应该编辑问题来解决这个问题还是应该打开一个新问题? -
您可以考虑在有效 NOP 的开头到 NOP 的结尾插入一个
jmp。至少您的 IDA 显示看起来更合乎逻辑。 -
@DavidHoelzer 谢谢。这是一个非常巧妙的想法。
标签: linux assembly x86 reverse-engineering elf