开源逆向工程利器:BinNavi与fREedom的完美结合

本文介绍了BinNavi的开源历程及其与fREedom工具的集成,探讨了逆向工程中的反汇编、控制流图构建和多用户协作功能,并分析了当前工具的局限性与未来改进方向。

开源BinNavi与fREedom

我前zynamics同事(现就职于Google)做的一件很酷的事情是将BinNavi开源——这是一个我过去经常在博客中提到的工具(例如这里关于调试旧版ScreenOS设备,或这里更多内容——内核调试、REIL等)。

BinNavi是一个用于执行多用户逆向工程、调试和代码分析的GUI/IDE。BinNavi允许交互式探索和注释反汇编代码,显示为可浏览、可点击和可搜索的图——基于从PostgreSQL数据库读取的反汇编数据,理论上可以由任何其他引擎写入。

编写用户界面是项艰苦的工作,尽管周围有许多非常令人印象深刻的开源逆向工程工具(首先想到的是Radare,但还有很多其他工具),但用户界面通常不太美观——或方便。我希望BinNavi能够成为众多开源逆向工程工具的“默认用户界面”,并实现其作为“开源逆向工程IDE”的全部潜力。

BinNavi被更广泛采用的最大障碍之一是IDA是BinNavi唯一的“数据源”——例如,虽然BinNavi是自由开源软件(FOSS),但希望开始逆向工程的人仍然需要IDA来填充Postgres数据库的反汇编数据。

为了改善这种情况,Dave Aitel举办了一场竞赛:任何构建Capstone到BinNavi SQL桥接或为BinNavi添加反编译功能的人都可以免费获得INFILTRATE 2016的门票。

上周,Chris Eagle发布了fREedom,这是一个基于Python的工具,用于反汇编x86和x86_64程序,支持PE32、PE32+和ELF文件格式。这非常棒——因为这意味着BinNavi更接近无需任何非自由工具即可使用。

在这篇博客文章中,我将分享一些关于fREedom实际使用的初步印象、观察和截图。

我的第一个测试文件是putty.exe(91b21fffe934d856c43e35a388c78fccce7471ea)——一个相对较小的Win32 PE文件,在IDA中反汇编时约有1800个函数。

让我们看看第一个函数:

反汇编、控制流图(CFG)构建等工作得很好。多用户注释按预期工作,转换为REIL也是如此。调用图浏览也有效:

拥有fREedom作为起点的好处是,进一步的改进可以是增量式和分层式的——人们现在有了一个良好的基础可以工作:-) 那么缺少什么/接下来需要做什么?

fREedom: 函数入口点识别仍然相对较差——在putty中IDA识别的约1800个函数中,只找到了430个左右。这似乎是那些经典的“使用Python和一些机器学习来做XYZ”博客文章的绝佳目标。 fREedom: 需要在大型和更复杂的可执行文件上测试CFG重建和反汇编。 BinNavi: 应该重建栈帧信息——但不是由fREedom,而是在BinNavi内部(通过REIL)。这将需要深入研究(并记录)强大但晦涩的类型系统设计。 BinNavi: 自2011年以来,BinNavi的许多领域都存在一些bitrot(代码腐烂)——平台变化、系统变化,并且有一些领域有些损坏或需要更新(例如在x64上的调试等)。是时候拂去灰尘了:-)

就个人而言,我对fREedom + BinNavi既超级高兴又非常兴奋,我希望两者能够完全集成,以便BinNavi始终将fREedom作为默认的反汇编后端。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计