开源逆向工程利器:BinNavi与fREedom的强强联合

本文详细介绍了开源逆向工程工具BinNavi及其新搭档fREedom的功能特点,包括多用户协作、图形化反汇编分析、REIL转换等核心技术,并对比了IDA与fREedom在函数识别和CFG重建方面的性能差异。

开源BinNavi与fREedom:逆向工程的新篇章

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

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

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

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

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

上周,Chris Eagle发布了fREedom,这是一个基于Python的工具,用于以PE32、PE32+和ELF文件的形式反汇编x86和x86_64程序。这非常棒——因为这意味着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的许多领域都存在一些代码腐化——平台变化、系统变化,并且有一些领域有些损坏或需要更新(例如在x64上的调试等)。是时候拂去灰尘了:-)

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

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