线性扫描技术从代码的第一个字节开始,一次反汇编一条指令,直到结束。 [...]
递归遍历技术依赖于程序的控制流,并遵循
程序的控制流对字节进行解码。 [...]
随后,作者介绍了distorm,他发表了以下声明:
两种技术都有一些共同之处。缺陷。为了克服这些缺陷,
一个好的反汇编程序将两种技术结合起来。这类非商业用途的开源反汇编程序是distorm。
阅读distorm的文档后,我无法确认最后的声明。在我看来,distorm似乎像经典的线性扫描版本一样工作,并且还会因伪指令和混淆而挣扎(请参见1)。它称自己为“流反汇编程序”,在这里我无法完全阐明该表达。
基于这些事实,我有两个问题:
是暴风雨确实是作者提到的线性扫描和递归遍历的结合吗?
您对“流反汇编器”的正式理解是什么?
0 Page 47在Shahid等人的Alam中。 “用于变形恶意软件分析和实时检测的框架。”计算机与安全48(2015):212-233。
1 https://github.com/gdabah/distorm/wiki/StreamDisassembler
#1 楼
DiStorm不会实现递归遍历,但是您可以使用distorm(或其他方法,例如capstone)来实现自己的递归遍历算法。 ,BinaryNinja,JakStab(称为“迭代反汇编”)等。由于检索ControlFlowGraph是一个难题,因此人们倾向于将机器代码到汇编程序的转换与这些框架的使用之间分开实际的控制流。来自diStorms Github的引用:现在是时候说diStorm作为流反汇编程序不执行该流了控制分析为您工作,但是它将帮助您更轻松地完成此操作。
反汇编程序尝试通过指示哪些指令可能会更改控制流程并提供直接目标,但实现控制流程来帮助您由于采用了indriect跳跃和反拆卸技术,因此恢复非常重要。
关于问题的第二部分:它反汇编给定的字节流(缓冲区对象)。这似乎与那里的任何反汇编程序没有什么不同。
评论
好的,那完全证实了我的理解。 Dankefürdie schnelle Antwort!
–kn000x
17年2月16日在7:28