GHIDRA与 IDA Pro


问候语


我认为时机已到。 膨化/沸腾/有意见。 随着Hydra的发布,反向工程师工具的情况已经发生了很大变化。 如果在使用之前没有太多选择( 这里不会提到Binary NinjaHopperJEBRadare2 ,因为在信息安全公司和社区中,我知道他们使用的人很少,或者进入某些门槛的人(您好,Radar)很高,或者体系结构的覆盖范围仅限于x86 / x64 / ARM / ARM64 / MIPS ),现在我们拥有非常强大的竞争对手Hex-Rays ,它们的GHIDRA属于NSA。


但是九头蛇好吗? IDA是否IDA (反之亦然)? 让我们做对。 在本“文章”中,我尝试减少这两种工具的所有优缺点。 我并没有说这个或那个工具更好的目的-得出您自己的结论。 此外,正在开发一种和第二种仪器。 并且本文仅包含撰写本文时的比较结果。 将在以下类别中进行比较:


  1. 支持的架构
    如果您是仅使用Intel平台(x86 / x64)的逆向工程师,那么所有其他人员的存在对您而言实际上并不重要。 但是,如果您必须与许多不同的人一起工作 文件托管 架构中,默认交付的越多越好。
  2. 支持的格式
    仅在数据格式方面与上一段相同。
  3. 反编译质量
    几乎最必要和重要的组件是反编译器。 单独使用反汇编程序并没有多大意义,因此这里概述了Ghidra / IDA可以/生产的产品。
  4. 可扩展性,SDK / API
    对于使用各种体系结构,格式并定期执行许多类似任务的逆向工程师来说,能够快速方便地编写其他模块/装载程序/脚本非常重要。 能够也很高兴
    调试它们。 让我们看看每种产品的状况。
  5. 该文件
    看来,为什么需要它? 我们早已习惯了热键,发现了编写插件的法力等等,我们还弄清楚了界面。 但是花了多少时间? 使用文档,尤其是高质量的文档,它将更快,更安静。
  6. 调试器(用于调查的文件)
    逆向工程环境的重要且必要的组件。 在静态中也可以,但在动态中则更容易。
  7. 文件分析速度
    如果涉及到非常大的文件(从10 MB或更大的文件开始),那么逆向工程环境不要强迫您去喝茶,在分析文件时上床睡觉是很重要的。
  8. 方便的工作(界面,热键,专注于键盘输入)
    尽管事实是主要的功能,但向用户呈现功能的方式,他的外观仍然起着重要的作用。 如果界面不允许将鼠标用于常用的表单和命令,那么这是一个加号。 如果您需要遍历一堆窗口才能向函数添加输入参数,那么这已经是负号了。 比较一下。
  9. 新版本发布
    漏洞修复的速度,添加的新功能以及相应的新版本的发布,都标志着一个好的开发团队和认真的态度。
  10. 获取分发工具包的困难
    购买,下载,构建发行版-就是这里。
  11. 技术支持
    您是否要向作者报告错误,提出新功能或只是问一些问题-所有这些都与支持有关。 我们将找出谁是更好的-付费或免费产品。
  12. 社区活动
    社区的存在以及与社区进行交流的机会,讨论开发问题,有关功能的问题,或者只是从博学的人(而不是开发人员)那里获得好的建议-这就是社区。
  13. 项目合作
    几个人在一个项目上所做的工作很重要,足以忽略它。

比较方式


1.支持的架构(IDA)


IDA Pro开箱即用,支持大量处理器及其修改。 该列表值得尊重: https : //hex-rays.com/products/ida/processors.shtml
Starter Professional EditionProfessional Edition的处理器列表有所不同,仅Pro版本(以及演示版本 ,感谢slinkinone )支持64位。 后者中的平台非常少见,但仍然如此。


如果工作不专注于物联网,那么Starter足够了,否则您将必须购买Pro版本。
反编译仅适用于x86 / x64 / arm / arm64 / PowerPC ,他们承诺在明年上半年推出MIPS反编译器。


1.支持的架构(GHIDRA)


该列表没有在线版本,因此将其放在此处:



在此,列表以核心处理器的形式(无修改)显示,但这并不意味着它们不受支持。 反编译器可用于每个处理器模块。


2.支持的格式(IDA)


此处的格式列表: https : //hex-rays.com/products/ida/file_formats.shtml


列表很大。 另外,还有一些社区中的插件将永远不会被添加到盒子中,例如 为此,您需要与Ilfak Gilfanov(主要开发人员)进行讨论。


2.支持的格式(GHIDRA)


格式清单1
  • 安卓
    1. apk
    2. 开机
    3. 右旋糖酐
    4. 内核
    5. 欧德克斯
    6. XML文件
  • bp列表
  • 棺材
  • 补全
  • cpio
  • ext4
  • gzip
  • ios
    1. 苹果8900
    2. decmpfs
    3. dmg
    4. dyldcache
    5. 通用的
    6. ibootim
    7. img2
    8. img3
    9. img4
    10. ipsw
    11. png
    12. 预链接
    13. 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 / gsds甚至在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)


GhidraJava编写(在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 / x64ARM / AArch64PowerPCMIPSMotorola 68kInfineon TriCoreRenesas 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中开始下垂。 但是,当然,随着长时间的工作,最后的习惯也会出现,并且变得不那么困难。


九头蛇有很多菜单,其中的元素有时很多,而且并非所有项目都有热键。 但是同时,热键设置配置器允许您将自己的热键挂在几乎每个命令上。


因为 GhidraJava编写的,开发人员使用了JDK的基本功能,即Swing 。 因此,我们拥有了所拥有的。 但这不能称为九头蛇的负号。


9.发行新版本(IDA)


您是否注意到,随着Hydra的发布,新版本的Ida开始越来越频繁地出现? 但我仔细看了一下。 你知道为什么吗 当然,重点是竞争。 终于她出现了!

以前,新版本的Ida很少发布; Ida非常不愿意获得新功能。 报告错误后,您不应期望开发人员发送给您的更正很快就会出现在您的同事中。 没有系统补丁,因为 开发人员为每个客户打补丁主文件(水印)。


似乎由于产品竞争,新版本的Ida的发布速度将提高。


9.发行新版本(GHIDRA)


Hydra新版本发布的规律性非常大:自发布源以来,已经发布了大约六个版本。


如果您等待很长时间才能发布新发行版,则可以使用github构建master分支。 第一次需要一个多小时,但这是值得的。


10.难以获得分发工具包(IDA)


每个人都知道这个故事:“ Ilfak Gilfanov-打击海盗! ”。 因此,要购买ProStarter版本的分发工具包变得非常困难和沉闷。 对于无法接触的凡人 疯狂的钱 邮箱不在gmailmail.ru等公共邮件服务器上,因此无法分发。 而且,即使您拥有自己的IP,您的网站,也将必须进行许多检查,发送扫描,确认等。 所有这些都使发行版不发布在Internet上。 这并不总是有帮助。


兴高采烈的版本出现,但很少出现。 因此,大多数反向工程师爱好者都坐在ESET和中国杀毒软件的旧发行版(一旦合并)中。


不久前,正式出现了供学生使用的正式版本,但被截断了,没有反编译器和许多其他限制(更多详细信息,请参见此处 )。


10.分发困难(GHIDRA)


似乎根本没有要写的东西,但是。 实际上,俄罗斯,以色列和中国禁止进入九头蛇的主要地点。 需要VPNTor (适当的下载速度)。 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 .

Source: https://habr.com/ru/post/zh-CN480824/


All Articles