逆向工程中的一个关键工具是好的反汇编程序,因此要确保反汇编程序正常运行,是否有任何好的测试套件可用于测试反汇编程序的正确性?这些体系结构是特定的,还是可以配置为跨多个对象体系结构工作?一个好的测试应该包括检查更晦涩的体系结构指令和格式不正确的可移植执行文件。

这是我所见过的专门针对i86的文件。是否有跨架构模块化的产品?

评论

当您说“反汇编程序的正确性”时,是指指令解码器的正确性,还是对控制流程图恢复和其他高级语义信息有正确的理解?

好吧,哪个是更有趣的问题?我猜是稍后的正确流程图恢复...

#1 楼

Roberto Paleari,Lorenzo Martignoni,Giampaolo Fresi Roglia和Danilo Bruschi发表了一篇名为“ N版本拆卸:x86拆卸器的差异测试”(PDF)的论文,以正式方式比较了几个x86拆卸器。

引用论文摘要:


反汇编程序的输出用于许多不同的目的
(例如,调试和逆向工程)。因此,反汇编程序表示一长串阶段的第一个链接,而任何
机器代码的高级分析都依赖于此。在本文中,我们
证明了许多反汇编程序无法解码某些
指令,因此该链的第一个链接非常弱。我们
提出一种称为N版本反汇编的方法,以基于差异分析来验证反汇编程序的正确性


不知道这是否与主题无关您的问题,但您可能会感兴趣。

评论


有趣的纸!这并不是一个完全令人惊讶的结论。 Godefroid和Taly拥有MSR TR(research.microsoft.com/apps/pubs/default.aspx?id=156020),在该处,他们可以自动执行指令合成,并在手动指定的语义中发现错误。

–安德鲁(Andrew)
13年3月20日在16:39

#2 楼

在我读过的许多论文中,反编译工具作者使用SPEC基准来衡量其反编译器的有效性。从指令解码到控制流恢复,这可以从整体上了解系统的运行状况。这些基准不是免费或开源的。

GCC和clang编译器还附带测试基准。这些可能值得研究。

此外,Regehr的csmith项目可以生成任意C程序用于编译器测试/模糊测试。这对于测试反编译器和二进制分析系统可能有用?

评论


FWIW我们确实使用cmith来测试Hex-Rays反编译器,它确实有帮助。

–伊戈尔·斯科钦斯基♦
13年3月20日在17:04

#3 楼

链接到的气体测试用例套件不仅适用于i386。父目录包含用于x86-64,arm,alpha和许多其他体系结构的测试用例。

#4 楼

我制作了一个包含所有x86操作码(当时)和许多编码形式的文件,这有助于我积极地发现许多反汇编程序(IDA,Hiew,BeaEngine,OllyDbg,XED,hte等)中的许多错误,尤其是鲜为人知的形式和没有证件的文件。

(可能有点题外话-不是现成的测试套件)

评论


您是否为所有文件都提交了错误?他们固定了吗?

– Janus Troelsen
13年5月1日在20:01

我做到了,他们做到了。

–天使
13年5月1日在20:16

#5 楼

Radar2项目对其反汇编引擎的每个引擎都使用了广泛的测试套件,以及更具体的测试,例如格式,自身的分析功能,...