
问候语
我认为时机已到。 膨化/沸腾/有意见。 随着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 .