作者: {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的目录即可运行。
本文通过分析一道简单的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,又作为开源软件被发布,可以对它保持关注,未来可能会有更多的更新和改进。