从 ELF 中删除汇编指令

Removing assembly instructions from ELF

作为 crackme 挑战的一部分,我正在研究一个混淆的二进制文件。它有一系列 pushpopnop 指令(重复数千次)。从功能上讲,这些块对程序没有任何影响。但是,它们使 CFG 的生成和逆向过程变得非常困难。

有关于如何将指令更改为 nop 的解决方案,以便我可以 删除 它们。但就我而言,我想完全删除这些说明,以便更好地了解 CFG。如果指令被剥离,我知道内存偏移量也必须修改。据我所知,没有可用的工具可以直接实现这一目标。

我正在使用 IDA Pro 评估版。我也对使用其他逆向工程框架的解决方案持开放态度。如果它是可编写脚本的,这是更可取的。

我经历了 similar question 但是,建议的解决方案不适用于我的情况。

I would like to completely strip off those instructions ... I understand that the memory offsets must be modified too ...

一般来说,这几乎是不可能的:

  1. 如果二进制文件导出任何动态符号,您将不得不更新 .dynsym(这些可能是您正在考虑的偏移量)。

  2. 您必须找到每个静态分配的函数指针,并用新地址更新它,但没有找到此类指针的有效方法。

  3. 计算的 GOTO 和 switch 语句创建函数指针表,即使 none 出现在程序源中也是如此。

  4. 正如 Peter Cordes 所指出的,可以编写在两个汇编标签之间使用增量的程序,并使用此类增量(直接编码为指令的小立即值)来控制程序流。

您的目标程序可能没有上述所有复杂情况,但花很多精力在只适用于该程序的技术上似乎是浪费。