Ghidra:NSA公开的开源逆向工程工具

作者:{Cla1r3L}@ArkTeam

Ghidra是由美国国家安全局(NSA)研究理事会开发、升级和维护的一款软件逆向工程框架。它包含了一套功能齐全的软件分析工具,可以帮助研究人员在Windows、macOS和Linux等常见系统平台上进行源代码分析。在今年三月份的RSA大会上,NSA首次公开并演示了这款软件的使用,同时将Ghidra作为开源工具开放给公众。

一、功能介绍

Ghidra有方便的图形化操作界面,拥有反汇编,汇编,反编译,脚本以及其他数百个分析功能。Ghidra可以在用户交互模式和自动模式下运行,支持AARCH64、ARM、JVM、x86、Z80等很多处理器模块。用户还可以使用Java或Python开发Ghidra插件和脚本。

Ghidra的代码浏览器界面与IDA的主界面相似,包含了Ghidra的所有可视元素:反汇编视图、符号树、程序树、反编译器视图等。其中一个特点是它的反编译器,反编译视图与反汇编列表是同步的,反汇编列表的右侧就是相对应的伪代码,如图1所示。Ghidra的反编译器也拥有函数重命名、添加注释等功能。


图1 Ghidra的代码浏览器

可定制的反汇编列表也是Ghidra的一个特点,单击Edit the listing fields按钮(如图2所示)即可查看所有自定义选项,可通过点击并拖动字段重新排列Listing窗口中的元素,这种高级可视化定制属性是IDA Pro所不具备的。


图2 Ghidra的反汇编列表

二、工具安装

软件官网地址

http://ghidra-sre.org/

github地址

https://github.com/NationalSecurityAgency/ghidra/releases

Ghidra采用Java开发,需要的JDK版本是11:
https://jdk.java.net/11/

运行ghidraRun.bat,提示需要jdk,输入jdk 11的目录即可运行。

三、使用Ghidra进行逆向分析

本文通过分析一道简单的crackme来介绍Ghidra的使用。首先运行crackme0x0.exe,发现程序要求输入正确的密码。


图3 运行crackme0x00

启动Ghidra开始分析,首先选择File->New Project新建一个项目,导入要分析的crackme0x00.exe,如图4所示。

图4 新建项目

导入成功后将显示导入结果摘要对话框,选择默认选项对程序进行分析,如图5所示。

图5 查看导入结果并分析

程序要求输入正确的口令,考虑查找字符串,选择Defined Strings窗口可以查看程序中使用到的字符串信息,如图6、图7所示,直接双击找到的”Password”字符串,发现它在主函数中被调用。

图6 打开Defined Strings窗口

图7 查看字符串

找到调用”Password”的位置后查看后面被调用的函数,首先是scanf()接收用户的输入,接着用strcmp()比较输入值和规定的password值250382,得到需要的值为250382,输入后得到了正确的返回,如图8、图9所示。

图8 分析程序

图9 破解成功

四、小结

Ghidra是一个功能强大的逆向工具,常被拿来与IDA比较。Ghidra高度可定制的反汇编列表和实时的反编译窗口是一个亮点,不过Ghidra用Java编写而IDA用C++编写,IDA在Windows平台上的表现相对更好。但是Ghidra出自NSA,又作为开源软件被发布,可以对它保持关注,未来可能会有更多的更新和改进。

发表评论

电子邮件地址不会被公开。 必填项已用*标注