
Hex-Rays插件竞赛结果2019
今年我们又一次考察了9位参赛选手的插件,我们考察的插件范围、重点再次非常广泛。几乎所有的插件都是用Python编写的,这似乎是一个稳定的趋势。
以下是我们对获奖者的选择:
- 一等奖: Karta, 作者 Eyal Itkin
- 二等奖: deREferencing, 作者 Daniel Garcia Gutierrez
- 三等奖: idapkg, by jinmo123
恭喜获奖者!
以下是提交的完整列表:
- BRUTAL IDA 作者 Tamir Bahar
BRUTAL IDA通过阻止撤消 b>和重做 b>键盘快捷键来恢复原始工作流程。
我们的评价:
Tamir Bahar’的插件很好地提醒了人们,不管是什么原因,人们都不喜欢自己的工作流程被破坏。
插件一般倾向于增加功能,而这个插件则是来删除一些功能的:怀旧确实是一种很强大的感觉! (或者说是斯德哥尔摩综合症?)
- CFG Inquisitor 作者 Brenda So CFG Inquisitor:
[…]检查控制流图(CFG)的有效进入和退出区块
我们的评价:
CFG查询器实质上限制了可以被视为功能的有效入口点或出口点的内容。
这是一个相当小的插件,有一些似乎是特殊的启发式方法。目前还不清楚将这些扩展到IDA可以分析的所有二进制文件是否合理。
该插件仍在积极开发中,目前似乎还不支持x86_64。
- deREferencing 作者 Daniel Garcia Gutierrez deREferencing是一个:
IDA Pro插件,实现了更多用户友好的寄存器和堆栈视图。
我们的评价:
deReferencing 是一个 IDA Pro 插件,实现了新的寄存器和栈视图。添加dereferenced指针、颜色和其他有用的信息,类似于一些GDB插件(如:PEDA、GEF、pwndbg等)。
支持x86、x86-64、ARM、ARM64、MIPS32和MIPS64。
该插件添加了自定义视图,这些视图试图将寄存器和堆栈中的值解释为指针,并自动取消引用它们。根据它们所属的内存类型,值会以不同的颜色显示。
它很强大、实用、易于安装和使用。代码具有很好的模块化和可读性。
- findrpc 作者 Lucas Georges findrpc 是一个:
Idapython脚本,用于雕刻内部RPC结构的二进制
我们的评价:
findrpc.py是一个单文件脚本,它试图在PE二进制文件中找到Windows RPC服务器和客户端的描述。
目标受众有点小,但显然RPC是Windows中未被开发的部分,所以它’是一个很有前途的领域,可以找到以前未知的漏洞。
声明的功能列表令人印象深刻:
- 一目了然地查看二进制中嵌入了哪些RPC客户端和服务器
- 找到RPC服务器的调度表
- 快速重命名找到的每个RPC proc处理程序
- (在Windows上)从RPC声明生成反编译的IDL
不幸的是,在我们的测试中,它只能在某些二进制文件上可靠地工作,并且很难诊断为什么它在其他二进制文件上确实失败了,因此肯定有改进的空间。
为了显示结果,作者选择了本机Qt小部件,而不是IDA的标准选择器,因此,例如,从结果列表中复制文本不起作用,因为未实现
IDL反编译功能使用单独的Windows二进制文件而不提供源代码,这并不总是很方便。
就是说,当它确实起作用时,结果对于在Windows二进制文件中查找隐藏的界面非常好且有用。
- ifred 作者 jinmo123 ifred是:
IDA控制板& 更多
我们的评价:
Ifred是一个控制板,就像我们看到的几个一样。它对IDA命令和当前数据库中的名字进行模糊搜索。与其他解决方案相比,我们喜欢它吸引人的、可定制的外观。它还允许你创建自己的控制板。
- idapkg 作者 jinmo123idapkg 是:
IDA Pro的软件包
我们的评价:
Idapkg解决了安装IDA插件和管理其依赖关系的问题。基于在线资源库,它可以让你搜索软件包并安装或卸载它们。这仍然是一个概念验证,但却是朝着简单和标准的IDA插件安装方式迈出的有趣一步。
- Karta 作者 Eyal Itkin Karta 是:
是一个 IDA Python 插件,用于识别和匹配给定二进制中的开源库。该插件使用了一种独特的技术,使其能够支持庞大的二进制文件(>200,000个函数),而对整体性能几乎没有影响。
我们的评价:
Karta实际上是以下几方面的综合:
- ThumbsUp 插件,可帮助恢复 ARM 二进制文件中的函数,而 IDA 却没有做到这一点
- identifier,可识别编译的开源库和版本(例如,通过标识符字符串)
- matcher,它将匹配来自先前识别的库的函数。
Thumbs Up指本身就是一个相当重要的成就,因为它使用机器学习来恢复似乎是函数,而IDA没有发现,而且它似乎在ARM二进制文件上做得非常好。
在接下来的工作中,Karta将在很多方面使用与FLIRT(和其他工具)不同的方法:
- 它将仅在标识符确定该库存在于文件中时才尝试匹配来自库的函数,
- 它将根据函数在文件中的位置,使用许多启发式方法来确定函数存在的“likeliness”。
运行该插件可能会花费大量的时间(它是用Python编写的),但结果会非常令人满意。
声明一下,Karta有很多的依赖关系,所以要确保这些依赖关系已经安装,并且可以通过
sys.path
到达:- awesomelib
- Cute
- decorator
- elementals
- hexdump.py
- networkx (use version 2.2: newer versions require Python3.)
- Sark
- sklearn
- SMS-IDA 作者 Edward Larson SMS-IDA是:
该插件允许IDA API命令从你的手机上运行,任何地方!(前提是你有手机服务)。
我们的评价:
我们很难想象有人用短信控制他的IDA,但如果有任何绝望的灵魂需要这样的功能,这个插件是适合你的。
稍作设置,包括安装一些python包,在一个处理短信的在线网站上注册,并在你的防火墙上打一个洞,你就可以开始了。
只要被告知任何一个恰好知道短信发到哪里的人都可以参与,比如这样:
- Virtuailtor 作者 Gal Zaban Virtuailtor是:
一个IDAPython工具,用于在运行时重建C++ 虚函数表。
我们的评价:
该脚本不需要任何安装,所以要使用它,只需按Alt-F7键并选择Main.py文件。它将在你的数据库中添加大量的断点,然后一旦你使用你选择的调试器后台运行目标应用程序,它将创建C++虚拟表。当然,由于断点的存在,应用程序的执行速度会比平时慢。除了创建虚拟表之外,该脚本还为调用的函数添加了交叉引用。
它支持x86,x64和Aarch64。
我们喜欢这个主意,它有很大的潜力。 希望作者会继续改进脚本。
最后说明
一如既往,非常感谢所有参赛者提交的有用和有趣的作品。我们期待着下一次比赛的到来!
通用的免责声明
请注意,所有文件均来自第三方。虽然我们尽最大努力去核实它们,但我们不能保证它们的工作与广告上的一样,所以使用它们的风险由您自己承担。
对于插件支持问题,请联系作者。
日期:2019年9月23日