
问候语
我认为时机已到。 膨化/沸腾/有意见。 随着Hydra的发布,反向工程师工具的情况已经发生了很大变化。 如果在使用之前没有太多选择( 这里不会提到Binary Ninja , Hopper , JEB或Radare2 ,因为在信息安全公司和社区中,我知道他们使用的人很少,或者进入某些门槛的人(您好,Radar)很高,或者体系结构的覆盖范围仅限于x86 / x64 / ARM / ARM64 / MIPS ),现在我们拥有非常强大的竞争对手Hex-Rays
,它们的GHIDRA
属于NSA。
但是九头蛇好吗? IDA
是否IDA
(反之亦然)? 让我们做对。 在本“文章”中,我尝试减少这两种工具的所有优缺点。 我并没有说这个或那个工具更好的目的-得出您自己的结论。 此外,正在开发一种和第二种仪器。 并且本文仅包含撰写本文时的比较结果。 将在以下类别中进行比较:
- 支持的架构
如果您是仅使用Intel平台(x86 / x64)的逆向工程师,那么所有其他人员的存在对您而言实际上并不重要。 但是,如果您必须与许多不同的人一起工作 文件托管 架构中,默认交付的越多越好。
- 支持的格式
仅在数据格式方面与上一段相同。
- 反编译质量
几乎最必要和重要的组件是反编译器。 单独使用反汇编程序并没有多大意义,因此这里概述了Ghidra
/ IDA
可以/生产的产品。
- 可扩展性,SDK / API
对于使用各种体系结构,格式并定期执行许多类似任务的逆向工程师来说,能够快速方便地编写其他模块/装载程序/脚本非常重要。 能够也很高兴
调试它们。 让我们看看每种产品的状况。
- 该文件
看来,为什么需要它? 我们早已习惯了热键,发现了编写插件的法力等等,我们还弄清楚了界面。 但是花了多少时间? 使用文档,尤其是高质量的文档,它将更快,更安静。
- 调试器(用于调查的文件)
逆向工程环境的重要且必要的组件。 在静态中也可以,但在动态中则更容易。
- 文件分析速度
如果涉及到非常大的文件(从10 MB或更大的文件开始),那么逆向工程环境不要强迫您去喝茶,在分析文件时上床睡觉是很重要的。
- 方便的工作(界面,热键,专注于键盘输入)
尽管事实是主要的功能,但向用户呈现功能的方式,他的外观仍然起着重要的作用。 如果界面不允许将鼠标用于常用的表单和命令,那么这是一个加号。 如果您需要遍历一堆窗口才能向函数添加输入参数,那么这已经是负号了。 比较一下。
- 新版本发布
漏洞修复的速度,添加的新功能以及相应的新版本的发布,都标志着一个好的开发团队和认真的态度。
- 获取分发工具包的困难
购买,下载,构建发行版-就是这里。
- 技术支持
您是否要向作者报告错误,提出新功能或只是问一些问题-所有这些都与支持有关。 我们将找出谁是更好的-付费或免费产品。
- 社区活动
社区的存在以及与社区进行交流的机会,讨论开发问题,有关功能的问题,或者只是从博学的人(而不是开发人员)那里获得好的建议-这就是社区。
- 项目合作
几个人在一个项目上所做的工作很重要,足以忽略它。
比较方式
1.支持的架构(IDA)
IDA Pro
开箱即用,支持大量处理器及其修改。 该列表值得尊重: https : //hex-rays.com/products/ida/processors.shtml
Starter
Professional Edition
和Professional Edition
的处理器列表有所不同,仅Pro版本(以及演示版本 ,感谢slinkinone )支持64位。 后者中的平台非常少见,但仍然如此。
如果工作不专注于物联网,那么Starter
足够了,否则您将必须购买Pro
版本。
反编译仅适用于x86
/ x64
/ arm
/ arm64
/ PowerPC
,他们承诺在明年上半年推出MIPS
反编译器。
1.支持的架构(GHIDRA)
该列表没有在线版本,因此将其放在此处:

在此,列表以核心处理器的形式(无修改)显示,但这并不意味着它们不受支持。 反编译器可用于每个处理器模块。
此处的格式列表: https : //hex-rays.com/products/ida/file_formats.shtml
列表很大。 另外,还有一些社区中的插件将永远不会被添加到盒子中,例如 为此,您需要与Ilfak Gilfanov(主要开发人员)进行讨论。
格式清单1- 安卓
- apk
- 开机
- 右旋糖酐
- 内核
- 欧德克斯
- XML文件
- bp列表
- 棺材
- 补全
- cpio
- ext4
- gzip
- ios
- 苹果8900
- 树
- decmpfs
- dmg
- dyldcache
- 通用的
- ibootim
- img2
- img3
- img4
- ipsw
- png
- 预链接
- Xattr
- iso9660
- 爪哇
- z
- omf
- sevenzip
- 稀疏图像
- 焦油
- ubi
- ar
- yaffs2
- 拉链
- zlib
格式清单2- 棺材
- 矮人
- 矮人4
- 小精灵
- x
- 猛男
- MacOS
- z
- NE
- objc2
- 目标C
- omf
- pdb
- pe
- 佩夫
- ubi
- xcoff
上面的列表只是https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats中的目录列表
此处的另一个文件列表: https : //github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format
3.质量反编译(IDA)
Ida的反编译器与x86
/ x64
/ arm
/ arm64
代码(我对PowerPC
没说什么,因为我还没看过)完美地结合在一起,该代码是由一些标准编译器生成的,大多数都生成了整洁的C列表。
开发人员最初专注于MS-DOS代码,因此,甚至考虑了相当古老的编译器的工件(从此处,在许多窗口的界面中,都存在
,
, es
/ ds
/ ss
/ fs
/ gs
( ds
甚至在MIPS上!)),直到相当新。 没错,打开的IDA
编译器优化效果不佳,精疲力尽。
用Ida未知的编译器(或汇编器)编写的代码,结果变得非常糟糕:使用非标准的calling convention
会将反编译的清单变成几乎不可读的行集。
__usercall
需要通过__usercall
的@
和<>
在函数原型的输入行中手动设置必要的寄存器,这是一个很大的__usercall
,尤其是在有很多寄存器的情况下,另一方面,Hydra没有此功能,并且只有通过GUI才可以,这不是如果使用的寄存器数量很少,通常会很方便。
3.反编译质量(GHIDRA)
我不知道有人会说Hydra反编译器很棒。 在这里,为了喜悦,它通常更可能存在,并且每个受支持的处理器都有!
九头蛇反编译器的代码中有很多垃圾,这对于Ida用户来说是不常见的,这常常使人们无法理解其中发生的事情的本质。
但是Hydra反编译器具有一个很棒的功能-它具有指令仿真器,可以使它丢弃不使用且永远不会被调用的垃圾,同时简化了一些要点。
另外,Hydra反编译器也不关心参数来自哪个寄存器-如果访问它们,则将使用它们。
在这里,我想指出为什么Hydra或Ida在反编译方面有其特殊的问题。 重点是每种产品的方向。 如上所述, IDA
创建方向是在MS-DOS,通常是在x86上,然后逐渐涵盖x64和ARM。 因此,这些平台的排气质量极佳,而其他平台绝对没有覆盖范围。
相反,对于Hydra而言,它的创建目的是对物联网设备进行逆向工程。 因此,支持的处理器数量众多,每个处理器都有清晰的描述,并且具有创建新处理器的简单能力。 但是,由于开发人员试图涵盖许多体系结构,因此改进反编译器的工作量并没有成为优先事项。
4.功能扩展性(IDA)
Ida允许您直接在界面中编写加载器,插件,调试器和处理器模块以及脚本。 有些可以用python编写,这更加方便(通过IDAPython插件(不是由IDA
开发人员编写,由Elias Bachaalany
))。
在6.x
版本中开发插件的过程非常复杂,因为 没有理智的文档。 现在时代已经改变,编写自己的作品变得更加容易。 每年都会举办一次竞赛,开发人员会选择他们认为最好的插件(这种观点颇具争议)。 例如,在最后一场比赛中获胜,永远不要猜哪个 承包商 功能扩展器...原来是IDA
中KILLS Undo
支持的插件! 根本没有话语。 开发人员一直在要求此功能,但是直到GHIDRA
出现GHIDRA
,没有人想动一下手指。 现在-请删除该插件的炫酷功能-恭喜,您赢了!
调试插件很容易,尤其是如果它是用C ++编写的。 调试python或IDC
脚本更加困难,并且没有官方方法。
当API在7.0
版中完全重写时,肛门开始出现非常严重的疼痛,使其与旧版本不兼容。 一方面,使函数的名称更清晰,删除了多余的参数,使开发变得更加容易。 但是,如果您像我一样为6.x
版开发了插件,并且需要将自己的想法转移到新的SDK上,那么您会头疼。
然后在7.1
版中,再次发生了更改,因此必须以新的方式修复所有内容。
4.功能可扩展性(GHIDRA)
Ghidra
用Java
编写(在C++
带有反编译器),并支持Python
脚本编写(通过Jython
)。 标准软件包中包含用于Eclipse
GhidraDev
插件,使您可以创建项目模板(以后可以将其导入IntelliJ IDEA
)。 IDE中的自动补全和文档工作正常,需要半小时才能弄清楚如何编写第一个插件。
此外,在基本交付中,为几乎所有可能的应用程序编写了许多脚本。 如有必要,也可以更正它们。
使用Eclipse
方便地在开发过程中调试项目。
5.文件(IDA)
IDA
文档是它的弱点,因此它早就存在。 与大多数开发人员一样,偏向于功能而不是其文档。 因此,仅有少量的HLP
文件即将交付。
本书“ IDA Pro Book ”不是由开发人员编写的,仅针对第六版发行。 从那时起,没有发行新书,也没有开发人员开发插件的手册。
从7.0
版本开始7.0
文档开始发展为网络版本,并且SDK中对API函数的描述不佳。


5.文件(GHIDRA)
与Ida不同,Hydra的文档与开发同时编写。 从这里开始,我们对几乎每个调用的API函数,枚举元素和类都有评论。 随附的帮助文件还描述了Hydra的界面和设置,并附带了帮助文件,包括屏幕截图和示例,实际上是每个按钮或菜单项的示例。


6.调试器(IDA)
是的,他是。 而且有效。 Windows,Linux,MacOS,以及通过gdb
连接的功能。 关于后者:对于大多数非标准平台,我不得不编写自己的调试器模块,现在有机会通过gdb调试平台,例如: x86
/ x64
, ARM
/ AArch64
, PowerPC
, MIPS
, Motorola 68k
, Infineon TriCore
, Renesas RH850
。 此处的完整列表: https : //hex-rays.com/products/ida/debugger/index.shtml#details
6.调试器(GHIDRA)
las,公共领域中还没有调试器。 WikiLeaks
上的WikiLeaks
提到了一些调试模块。 不过,众所周知,NSA正在为此进行工作,并且将会有一个调试器!
同时,通过扩展接口功能的插件,可以编写自己的调试器。 但显然,没有人这样做。
7.工作速度(IDA)
对于大文件,Ida减少的Hydra抽吸量要少得多,但并非总是如此。 Ida分析器以单线程模式运行,在大文件上,一个内核已完全加载,而其余内核则处于空闲状态。 在不久的将来,作者将不会对此进行更改(使用开发人员的话)。
7.工作速度(GHIDRA)
当两个反向器之间的对话开始讨论这些Ida和Hydra的速度时,每个人都得出结论,Hydra需要大量时间来处理大型文件。 尽管在编写时考虑了多线程。 而Java
则应归咎于:跨平台为加,速度为负。 但是,如果您为JVM
配置内存,堆栈和堆的数量以及线程数,则工作会稍微加快。
8.可用性(IDA)
毫无疑问,许多人都非常了解Ida的热键。 它们简单明了,通常很直观。 Ida的许多菜单项和功能都可以通过键盘调用,这非常方便。
关于外观,在6.x
的版本中,使用了自写图形界面。 此外,开发人员完全切换到了Qt
。 界面绝对变得更好。 选项卡,按钮和界面元素的位置已经很长时间没有改变。
优点和缺点都从这里开始。 优点-界面熟悉,您无需查找它的位置并消除习惯。 缺点-有些元素仍然是基本的(结构编辑器看起来像是Ida的旧版本的遗留物)或90%的时间没有被使用。

8.工作便利(GHIDRA)
一切恰恰相反。 市场上的新产品,即与Ida相比热键的区别正在发挥作用。 与Ida长期合作的工作速度已达到惊人的速度,在Hydra中开始下垂。 但是,当然,随着长时间的工作,最后的习惯也会出现,并且变得不那么困难。
九头蛇有很多菜单,其中的元素有时很多,而且并非所有项目都有热键。 但是同时,热键设置配置器允许您将自己的热键挂在几乎每个命令上。
因为 Ghidra
用Java
编写的,开发人员使用了JDK
的基本功能,即Swing
。 因此,我们拥有了所拥有的。 但这不能称为九头蛇的负号。
9.发行新版本(IDA)
您是否注意到,随着Hydra的发布,新版本的Ida开始越来越频繁地出现? 但我仔细看了一下。 你知道为什么吗 当然,重点是竞争。 终于她出现了!
以前,新版本的Ida很少发布; Ida非常不愿意获得新功能。 报告错误后,您不应期望开发人员发送给您的更正很快就会出现在您的同事中。 没有系统补丁,因为 开发人员为每个客户打补丁主文件(水印)。
似乎由于产品竞争,新版本的Ida的发布速度将提高。
9.发行新版本(GHIDRA)
Hydra新版本发布的规律性非常大:自发布源以来,已经发布了大约六个版本。
如果您等待很长时间才能发布新发行版,则可以使用github构建master分支。 第一次需要一个多小时,但这是值得的。
10.难以获得分发工具包(IDA)
每个人都知道这个故事:“ Ilfak Gilfanov-打击海盗! ”。 因此,要购买Pro
和Starter
版本的分发工具包变得非常困难和沉闷。 对于无法接触的凡人 疯狂的钱 邮箱不在gmail
, mail.ru
等公共邮件服务器上,因此无法分发。 而且,即使您拥有自己的IP,您的网站,也将必须进行许多检查,发送扫描,确认等。 所有这些都使发行版不发布在Internet上。 这并不总是有帮助。
兴高采烈的版本出现,但很少出现。 因此,大多数反向工程师爱好者都坐在ESET
和中国杀毒软件的旧发行版(一旦合并)中。
不久前,正式出现了供学生使用的正式版本,但被截断了,没有反编译器和许多其他限制(更多详细信息,请参见此处 )。
10.分发困难(GHIDRA)
似乎根本没有要写的东西,但是。 实际上,俄罗斯,以色列和中国禁止进入九头蛇的主要地点。 需要VPN
或Tor
(适当的下载速度)。 github
上没有发布,只有源代码。
11.支持(IDA)
我需要与Hex-Rays
支持人员交流多少,总是会有不同的经历:一些在支持部门工作的人非常有礼貌,并且随时准备提供帮助。 部分:主要开发人员,沟通变得不礼貌。 特别是当意见不一致时。 但这也许就是这种本质。 与Internet上的用户进行通信也是一样。
最近发现,只有我在朋友的支持下进行沟通。 6.6是一个非常古老的错误,与滚动过程中的选择丢失有关,该错误是众所周知的6.6版本,它从未被开发人员贬低。 他问出什么事了。 答案的风格是:“我不想与这样对待用户的人交流 。” reputation,信誉就是这样。
但是,我向开发人员报告的错误和建议已得到纠正并考虑在内(不是全部)。
11.支持(GHIDRA)
Hydra在github
上有一个存储库。 那里有issues
,这是您需要报告错误的地方。 对某些对象的响应速度可能非常长,也可能非常快。 但是,他们说,错误不会像那样关闭,我们不想实现这一点。 一切都考虑在内。 .
PR . .
12. (IDA)
, . , -, . , , , .
12. (GHIDRA)
: ghidra.re , -, @GHIDRA , github. , .
13. (IDA)
. , , , -, .
13. (GHIDRA)
. -, .
结论
. , - . , Linux — // , , .
/ IDA
. , . .
, , Ghidra
. IDA
— .
— . . , Ghidra
, IDA
— . , , IoT — . .
, , . 谢谢啦
PS .
PPS 2 - .
PPPS . . netch80 .