distorm 是什么类型的反汇编程序?

逆向工程 反汇编者
2021-07-04 21:44:18

Alam 中,您可以找到反汇编程序之间的经典区别。作者概括地解释了两种众所周知的反汇编程序:

  1. 所述线性扫描技术从代码的第一字节开始,并且在时刻直到结束拆卸一个指令。[...]

  2. 递归遍历技术依赖于程序的控制流,并按照该程序的控制流解码字节。[...]

随后,作者介绍了distorm,并发表了如下声明:

这两种技术都有一些不足。为了克服这些缺陷, 一个好的反汇编程序会结合这两种技术一种用于非商业用途的开源反汇编程序是 distorm。

阅读distorm的文档后,我无法确认这最后一句话。在我看来,distorm 似乎像经典的 Linear-Sweep 版本一样工作,并且还会与虚假指令和混淆(参见1)作斗争它称自己为“流反汇编器”,我无法完全阐明这个表达式。

有了这些事实,我有两个问题:

  1. distorm真的是作者所说的线性扫描和递归遍历的结合吗?

  2. 您对“流反汇编器”的正式理解是什么?


0第 47 页,Alam、Shahid 等人。“变形恶意软件分析和实时检测的框架。” 计算机与安全 48 (2015):212-233。

1 https://github.com/gdabah/distorm/wiki/StreamDisassembler

1个回答

DiStorm并没有实现递归遍历,但是你可以使用distorm(或其他人,如顶点),以实现自己的递归遍历algortihm。

有一系列工具可以为您做这样的事情:IDA、BinaryNinja、JakStab(声称“迭代反汇编”)等。

由于检索 ControlFlowGraph 是一个难题,人们倾向于在从机器代码到汇编程序的转换和使用这些框架检索实际控制流之间进行区分。

引用来自diStorms Github:

现在是时候说 diStorm 作为流反汇编器不会为您执行流控制分析工作,但它会帮助您更轻松地完成此工作。

反汇编程序试图通过指示哪些指令可能会改变控制流并提供直接目标来提供帮助,但由于间接跳转和反反汇编技术,实现控制流恢复并非易事。

关于问题的第二部分:它反汇编给定的字节流(缓冲区对象)。这似乎与那里的任何反汇编程序没有任何不同。