Hex Rays

2017年插件竞赛:名人堂


Hex-Rays插件竞赛结果2017

今年,我们考察了7位选手的插件,共计9个插件,范围迥异&重点不同。

我们从这些插件中选出了三个优胜者;这里’是最后的排名:

 

  • 一等奖(2000美元): BinCAT,作者:Sarah Zennou、Philippe Biondi、Raphaël Rigo、Xavier Mehrenberger —;Airbus
  • 二等奖(1000美元):lighthouse,作者:Markus Gaasedelen
  • 三等奖(500美元):SimplifyGraph,作者:Jay Smith,FLARE团队,FireEye

 

恭喜获奖者!

以下是提交的完整列表:


  • BinCAT由Sarah Zennou、Philippe Biondi、Raphaël Rigo、Xavier Mehrenberger — AirbusBinCAT是:

    …静态二进制代码分析工具包,旨在直接从IDA帮助逆向工程师。

    它具有以下特点:

    • 价值分析(寄存器和内存)
    • 污点分析
    • 类型重建和传播
    • 正反分析

    我们的评价:

    这是一个复杂而有用的插件。 它采用抽象解释来跟踪寄存器和存储器值。 它还可以对它们进行污点分析。 解释器用OCaml编写,并被编译成二进制形式。 该插件本身用作OCaml部件与IDA之间的接口,是用Python编写的。

    解释器解析输入文件,并具有理解ARM和x86指令语义的逻辑。 它将指令转换为中间语言以进行分析。 有很多代码(整个插件大约有25个KLOC),这本身就给人留下了深刻的印象。

    使用该插件很容易上手:它附带一个简短明了的教程。 我们通过提供的玩具示例和其他一些测试文件尝试了BinCAT。 它可以很好地处理大多数情况,但有时可能会拒绝运行。

    值分析可以很好地跟踪单个价值; 在某些情况下可以展开循环。 污点分析可以很好地跟踪污点值,它可以分别跟踪值的每一位。

    在某些情况下,尤其是在开始时,用户界面可能会造成混淆。

    总的来说,BinCAT是一个非常有前途和有趣的插件。我们希望它能在未来不断发展。

     

    下载 bincat-0.8.tar.gz (源代码) 下载 bincat-win-v0.8.zip (Windows 二进制文件)


  • Thomas Rinsma (Riscure)的DropDrop是:

    … 一个实验性的IDA Pro插件,能够检测混淆二进制文件中的几种类型的不透明谓词。它利用符号执行引擎angr及其组件的力量,根据符号上下文推理谓词的不透明性。

    我们的评价:

    在相当简单的例子中,Drop成功地检测和删除了不透明谓词,但随着例子越来越大,越来越复杂(例如涉及浮点运算,或由循环组成),Drop不幸未能提供适当的分析。

    在相当简单的例子中,Drop成功地检测和删除了不透明谓词,但随着例子越来越大,越来越复杂(例如涉及浮点运算,或由循环组成),Drop不幸未能提供适当的分析。

    通过将死代码替换为NOP指令来移除死代码的实验性功能改善了反编译器的输出,…但它可能会发生移除有效的基本块,导致错误/误导的反编译(公平地说,它’在文档中标注为“实验性”)。

     

    下载drop.zip


  • IDABuddy by Tamir BaharIDABuddy是:

    旨在满足Clippy Office Assistant的所有功能,还有更多功能!

    IDABuddy将永远为您服务。 工作时友好而乐于助人。 提供提示和友好的聊天。

    最重要的是–因为它是开源的,所以它永远不会从你那儿被拿走!

    我们的评价:

    这给插件大赛带来了一丝乐趣(谁不’喜欢Clippy? 这就是说,IDABuddy将受益于更广泛的消息和对用户行为作出反应的能力,以提高娱乐性/恼人性。有些消息用大号的友好字母也会更好看。

    在测试过程中,IDABuddy发现,IDA 7.0’的IDAPython对UI钩子中使用的action_update_ctx_t实例的form属性缺乏向后兼容性。如果你注意到输出窗口中出现了这样的错误信息,请联系我们<sales@cogitosoft.com>以获得一个固定的IDAPython版本。

    AttributeError: 'action_update_ctx_t' \
        object has no attribute 'form'
    

     


  • lighthouse by Markus Gaasedelenlighthouse是:

    …一个用于IDA Pro的代码覆盖率插件。该插件利用IDA作为一个平台,在给定二进制的符号或源码可能不可用时,映射、探索和可视化外部收集的代码覆盖数据。

    我们的评价:

    Lighthouse可以使用我们提供的工具收集程序的执行痕迹,或者使用你自己的工具,只要它能产生与DynamoRIO兼容的痕迹(在测试期间,我们使用了基于PIN的工具,在Linux上)。

    一旦收集到痕迹,lighthouse会让你对这些痕迹进行许多(可能是非常复杂的)操作,通过在“flat”和图形视图中着色(分别对线条或节点进行着色),从而得到一个非常方便的可视化结果表示。

    它让我们想起了内置的 IDA 跟踪衍射工具,但它有更多、更多的功能,尽管这些功能本质上是面向代码覆盖的(与参数收集等相对而言)。安装& 使用插件是直接的,代码清晰& 完善的文档(这也意味着它不会在不需要的地方有太多的、不增值的注释)。

    在测试过程中,我们遇到了一个问题,这个问题在IDA 7.0 Beta测试期间就已经被Markus报告给我们了,但在IDA 7.0发布之前,我们没有时间去修复。

    不过,这次比赛是一个很好的机会。如果你在运行插件时遇到崩溃的情况,请在<sales@cogitosoft.com>上与我们联系,我们’将很乐意为你发送修复后的IDA二进制文件。

     


  • Milan’s tools by Milan BohacekMilan’s tools是3个插件的集合:
    • api_palette.py: 一个代码搜索/完成工具,用于 IDA APIs。
    • member_type.py: 根据结构成员的名称,自动将类型设置为结构成员。
    • paste_name.py: 一个方便的插件,只需按下Ctrl+V就可以将反编译器视图名称重命名为剪贴板中的任何内容(即无需打开‘rename’对话框)。
    除了这些插件,Milan Bohacek给我们发来了一个。 Visual Studio™ Natvis可视化脚本,用于调试C++ Hex-Ray反编译插件。

    我们的评价:

    一些小而有用的插件,来自我们的定期参与者和过去的赢家。

    api_palette.py对于那些直接在IDA中写脚本的人来说会很有用(在CLI或脚本片段窗口中),另外2个插件为反编译器提供了很好的工作流程改进。

    和往常一样,Milan表明他非常了解IDA API,并且很好地&有趣地使用了它所提供的功能。

     

    api_palette.py运行

  • RetDec IDA Plugin by AvastRetDec IDA Plugin是:

    IDA的RetDec插件(为IDA提供RetDec-decompiled代码视图)。

    我们的评价:

    请记住,我们在这里评判的是RetDec IDA Plugin,而不是RetDec反编译器本身(或其伪代码输出)。

    在IDA中并列提供两种反编译结果的想法非常有趣。此外,我们同意作者的观点,即在某些情况下,将RetDec作为Hex-Ray反编译器的补充(或反之亦然)是非常有用的。

    但我们发现,该插件的易用性还有很大的提升空间。

    • 导航不是很完美
    • 在第一次反编译没有完成的情况下启动第二次反编译,会导致弹出警告(和一个空白的RetDec视图)。
    • 反编译过程中缺乏反馈(如果你从控制台启动IDA,并查看那里的输出,你可以得到更多的反馈。

    此外,我们在尝试构建插件(在Linux上)时遇到了一些问题。

    • 不清楚应该传递给CMake的IDA_SDK_DIR值,是实际SDK目录的路径,而且该目录本身必须命名为idasdk,否则编译会失败(因为无法找到头文件)。
    • 需要IDA 6.6的SDK(以后的SDK会造成问题,因为目前插件不允许使用已废弃的功能)。唉,6.6的SDK是不是’在我们的网站上了,所以这是一个有点问题’。
    • 一些依赖库用C++11 ABI编译,这在链接时引起了问题,因为实际的插件代码用另一种ABI编译。我们不得不使用网站上的预编译依赖库。使用这些库,插件编译得很好。

    还值得指出的是,该插件不’,也不能与IDA 7.0 x64编译/工作。如果你想使用该插件,你必须使用由i386二进制文件组成的IDA 7.0的兼容版本,或者任何以前的版本(例如,6.95,…)。

    这些限制(或暂时性的烦恼,比如在Linux上编译的困难)影响了整体体验,足以让RetDec IDA插件失去前三名的资格。再次强调,最初的想法是非常有趣的,但目前该插件给人的感觉是需要更多的工作来实现更好的整合。

     


  • SimplifyGraph by Jay Smith, FLARE Team, FireEyeSimplifyGraph是:

    …IDA Pro插件,协助处理复杂的图形。

    我们的评价:

    该插件扩展了IDA’的节点分组功能,增加了(除其他事项外)。

    • ‘唯一可达’子图组创建。
    • 转换图形节点’的补数(一个‘补数’在这种情况下,意味着整个图形减去组),和
    • 一个非常有用的‘开关案例组创建’,它折叠了一个开关的各种案例,所以它’更容易专注于一个函数的其余逻辑。

    文档写得很好,代码也非常干净& 可读。 唯一(不可忽视的)缺点是,在写这篇文章的时候,除了使用Visual Studio™,没有其他方法可以构建它。

    这个插件感觉非常强大,简单明了,对于一些IDA图形视图用户来说,可能非常有用。

    SimplifyGraph是用C++编写的,支持IDA 6.95和7.0(虽然自己用IDA 7.0 SDK编译对我们来说是一种相当不愉快的体验)。

     


最后说明

一如既往,非常感谢所有参赛者提交的有用和有趣的作品。 我们期待着下一次比赛的到来!

惯用的免责声明

请注意,所有文件均来自第三方。虽然我们尽最大努力去核实它们,但我们不能保证它们的工作与广告上的一样,所以使用它们的风险由您自己承担。

对于插件支持问题,请联系作者。

日期:2017年12月22日

Go to top of page