从 ELF 中删除汇编指令
Removing assembly instructions from ELF
作为 crackme 挑战的一部分,我正在研究一个混淆的二进制文件。它有一系列 push
、pop
和 nop
指令(重复数千次)。从功能上讲,这些块对程序没有任何影响。但是,它们使 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 ...
一般来说,这几乎是不可能的:
如果二进制文件导出任何动态符号,您将不得不更新 .dynsym
(这些可能是您正在考虑的偏移量)。
您必须找到每个静态分配的函数指针,并用新地址更新它,但没有找到此类指针的有效方法。
计算的 GOTO
和 switch 语句创建函数指针表,即使 none 出现在程序源中也是如此。
正如 Peter Cordes 所指出的,可以编写在两个汇编标签之间使用增量的程序,并使用此类增量(直接编码为指令的小立即值)来控制程序流。
您的目标程序可能没有上述所有复杂情况,但花很多精力在只适用于该程序的技术上似乎是浪费。
作为 crackme 挑战的一部分,我正在研究一个混淆的二进制文件。它有一系列 push
、pop
和 nop
指令(重复数千次)。从功能上讲,这些块对程序没有任何影响。但是,它们使 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 ...
一般来说,这几乎是不可能的:
如果二进制文件导出任何动态符号,您将不得不更新
.dynsym
(这些可能是您正在考虑的偏移量)。您必须找到每个静态分配的函数指针,并用新地址更新它,但没有找到此类指针的有效方法。
计算的
GOTO
和 switch 语句创建函数指针表,即使 none 出现在程序源中也是如此。正如 Peter Cordes 所指出的,可以编写在两个汇编标签之间使用增量的程序,并使用此类增量(直接编码为指令的小立即值)来控制程序流。
您的目标程序可能没有上述所有复杂情况,但花很多精力在只适用于该程序的技术上似乎是浪费。