
Hex-Rays插件竞赛结果2018
今年,我们考察了9位选手的插件,范围迥异&重点不同。本届比赛的整体质量非常高,很多作品脱颖而出,每个作品都有不同的点。
选择是困难的,但我们最终选择了以下获奖者:
- 一等奖(3000美元): IDArling, 作者 Alexandre Adamski和Joffrey Guilbon
- 二等奖(2000美元): IDA-Minsc, 作者 Ali Rizvi-Santiago (Cisco/Talos) HexraysDeob, 作者 Rolf Rolles (Möbius Strip Reverse Engineering)
- 三等奖(1000美元): HeapViewer, 作者 Daniel García Gutiérrez
恭喜获奖者!
以下是提交的完整列表:
- ActionScript 3 作者 Boris Larin (Kaspersky Lab)ActionScript 3是:
…一个ActionScript 3处理器模块和Flash调试器插件。
我们的评价:
Kaspersky Labs 的Boris Larin提交的资料其实是三合一的:一个加载器、处理器模块和一个调试器帮助插件。
它有助于分析和调试Adobe Flash。 尽管Flash计划在2020年终止生命,但它仍然是漏洞利用的流行目标,并且仍可用于大多数浏览器。
我们’早在2009年就已经有了Adobe Flash反汇编器的提交(我们的第一次比赛!),但那个插件只支持ActionScript2,而且它还没有被移植到IDA 7.0,这限制了它的可用性。
Boris的新加载器/处理器模块支持现在更常见的ActionScript3,并且透明地加载压缩文件(CWS签名),而旧的加载器需要手动解压。此外,还有一个调试器帮助插件,它允许用户从字节码方法中调试Flash运行时生成的JITted*native代码,还可以将注释与原始字节码一起添加,便于理解。这个插件对于任何分析恶意软件中Flash漏洞的人来说都会非常有用。Boris的工作令人印象深刻!
- HeapViewer 作者 Daniel García GutiérrezHeapViewer是:
…一个检查堆(glibc malloc实现)的IDA Pro插件,专注于漏洞利用开发。
我们的评价:
HeapViewer是一个插件,用于检查Linux下运行的进程的堆,特别是glibc’的堆管理实现。
它是一个很好的漏洞利用开发的工具(它的主要目的),以及学习libc堆管理的实现方式的绝佳工具。
这个插件提供了一个有组织的、深入的、由glibc用来管理堆的结构的视图。HeapViewer看起来是一个在CTF挑战中的好工具。
它很好地集成了IDA’的调试API,实现了内存相关函数的跟踪。
HeapViewer专注于开发漏洞,但它可以扩展提供更多内存相关的分析功能。
- Deobfuscating Decompiler Plugin 作者 Rolf Rolles (Möbius Strip Reverse Engineering)Deobfuscating Decompiler Plugin 是:
…一个Hex-Ray微代码API插件,破解了一个用于创建一个野外恶意软件系列的混淆编译器。该插件是全自动的,不需要用户干预;安装后,呈现给用户的反编译列表将没有混淆。
我们的评价:
HexRaysDeob并不是一个大型插件,只有不到4000行的C++代码,但它却执行了一项非常复杂的任务,即处理严重混淆的代码。它使用反编译器’的微代码API来自动检测混淆的函数,去除不透明的谓词,并解除控制流。
在目前的状态下,该插件处理一个特定的恶意软件,但可以相对容易地通用,以检测类似的混淆技术,并删除它们。一般来说,它可以检测到一个开关和一个循环,用来人为地扁平化控制流程:
并删除它们,以便我们拥有良好的控制流程:
该插件对于所有对微代码API感兴趣的人都将非常有用,因为它会经过详尽的评论。
- Hyara 作者 Yi Hyun, Kwak Kyoung-Ju (Korea Financial Security Institute)Hyara 是:
…一个创建模式匹配规则的插件。
我们的评价:
Hyara是由Yi Hyun和Kwak Kyoung-ju创建的插件。
它有助于在IDA中直接为YARA模式匹配工具创建规则。 它包括对x86操作码中可重定位字节的简单检测,以提高匹配度。 它还提供了检查器功能,用于测试已加载的二进制文件上的规则。
- IDAFuzzy 作者 Ga-RyoIDAFuzzy 是:
…IDA Pro的一个模糊搜索工具。这个工具可以帮助你找到命令/功能/结构等。这个工具的灵感来源于Mac’的Spotlight和Intellij’的Search Everywhere对话框。
我们的评价:
该工具很简单,和广告上的一样。这种全局搜索的功能在各种软件中实现的越来越多,而这个插件让IDA提供了这个功能。坚实的基础在那里,这个插件已经很有用了,特别是它可以用键盘操作。不过还有改进的空间。
- IDA-Minsc 作者 Ali Rizvi-Santiago (Cisco/Talos)IDA-Minsc 是:
… IDA Pro的一个插件,它可以协助用户编写与反汇编器捆绑的IDAPython插件的脚本。这个插件将IDAPython API的不同方面归为一个更简单的格式,这使得逆向工程师可以用很少的投资来为他们的工作的不同方面编写脚本。
我们的评价:
IDA-Minsc是一个大型Python插件,Python狂热者会喜欢它! 首先,因为它是用Python编写的,其次,它使很多东西比起最初的Pythonic更加丰富。 IDA最初公开了像API这样的C ++,这对于日常黑客攻击来说过于冗长和繁琐。 IDA-Minsc引入了非常简短的函数和类来克服此缺点,并且看起来很整洁! 例如,代替写作
idaapi.is_code(idaapi.get_flags(here()))
你只要写
is_code()
并且它将方便地使用一些合理的默认值。
它还引入了‘标签’,可以用来存储和检索数据库中的任意信息作为注释。 用户可以使用各种标签来标记功能的子集并对其执行操作。 顺便说一下,由于此功能,所有注释都变得可搜索。 可以将其视为idb内部的一个小型数据库,该数据库是在函数和指令注释的基础上实现的。
该插件自带大量文档,并有教程。这是一个成熟的插件,在日常工作中会很有用。我们很喜欢这个插件,它的安装非常简单,绝对可以让用户’的生活更加轻松。
- IDArling 作者 Alexandre Adamski and Joffrey GuilbonIDArling 是:
…一个用于IDA Pro和Hex-Ray的协作逆向工程插件。
我们的评价:
一方面,这是解决多个用户在同一个数据库上工作的问题的另一种尝试。 另一方面,如果正确部署和使用此插件,则确实非常有用。 由于IDA的体系结构,很难使所有数据库副本保持同步:
- 总有一些方法可以在不生成事件的情况下修改数据库。 在这种情况下,不会将IDA的其他副本告知更改。
- 不同的第三方插件集(或其配置)可能导致数据库内容不同。
- IDA和同步插件中的编程错误都可能导致不一致。
- 最后,分析队列可能会干扰同步插件并导致不同步。
尽管如此,只要有一定的纪律性,多用户工作还是可以通过IDArling这样的插件实现的。比如说,引入以下用户策略:将IDA的一个副本表示为主副本(我可以说是“master”?),只有IDA的这个副本才会将数据库保存到服务器上。其他用户的工作不会丢失,因为他们的修改会瞬间复制到主IDA中。
我们喜欢插件的工作方式。 它在导航栏中和反汇编中显示其他用户的当前地址。 这可以帮助用户了解其他用户的位置,并组织他们的工作以避免冲突(例如,避免同时重命名同一功能)。
由于这是插件的0.0.1版本,因此存在许多缺点,但希望它们会随着时间的流逝而得到解决。 即使在当前状态下,该插件也很有用。
- NIOS2 作者 Anton Dorfman (Positive Technologies)NIOS2 是:
…一个用于Altera Nios II Classic/Gen2微处理器架构的IDA Pro处理器模块。
我们的评价:
Anton Dorfman的NIOS II处理器模块插件完全可以满足您的期望。
该插件使用Python编写,并为NIOS II Altera软核实现了完整的处理器模块,包括伪指令简化,堆栈变量,相对于全局指针的偏移量,自定义指令,交叉引用,开关检测以及许多其他功能。
该代码写得很好,如果您的软核包含额外的自定义说明,则可以轻松进行修改。
使用方法非常直接。只需将文件复制到你的“procs/”目录下,在文件加载对话框中选择“Altera Nios II Classic/Gen2 Processor”。IDA’的ELF加载器没有实现这台机器的特殊性(如重新定位),但如果选择了处理器模块,它还是可以加载文件。
这个插件对使用Altera’的FPGA的人有很大的好处。也许现在也可以写一个NIOS II调试器。
- Oregami 作者 Matan ZivOregami 是:
…一个分析当前函数的插件,以找到寄存器的使用框架。
我们的评价:
Oregami通过将搜索范围限制在与当前突出显示的寄存器相关的事件上,而不是整个函数,从而简化了跟踪函数中寄存器使用情况的工作。它提供了PPC和ARM处理器的处理程序(设计足够模块化,可以实现其他处理器),而更通用的例程可以处理其他CPU类型,但效果不佳。该模块采取的方法相当简单,在一些复杂的情况下可能会失败。
最后说明
一如既往,非常感谢所有参赛者提交的有用和有趣的作品。 我们期待着下一次比赛的到来!
通用免责声明
请注意,所有文件均来自第三方。虽然我们已经尽最大努力去验证它们,但我们不能保证它们的工作与广告中的一样,所以使用它们的风险由您自己承担。
对于插件支持问题,请联系作者。
日期:2018年9月21日