使用ghidra进行逆向工程静态分析

  • Post author:
  • Post category:其他


Ghidra是一个软件逆向工程(SRE)框架,包括一套功能齐全的高端软件分析工具,使用户能够在各种平台上分析编译后的代码,包括Windows、Mac OS和Linux。功能包括反汇编,汇编,反编译,绘图和脚本,以及数百个其他功能。Ghidra支持各种处理器指令集和可执行格式,可以在用户交互模式和自动模式下运行。用户还可以使用公开的API开发自己的Ghidra插件和脚本。



下载安装

官方网站是https://ghidra-sre.org/,似乎直接访问不到。

项目部分内容开源在https://github.com/NationalSecurityAgency/ghidra

windows下点击ghidraRun.bat运行。工具使用java编写,需要安装JDK11+。



使用举例

以一道CTF题目为主题,介绍一下Ghidra的功能。

Ghidra的第一步是新建工程,点击“new project”选择好目录和工程名称,这里是“test”。新建完后将需要分析的可执行程序拖入到工程中,然后双击可执行程序进入分析面板,会出现一个绿龙图标的browser窗口。

工程窗口

首次打开会提示是否需要分析,勾选分析的内容开始分析。

分析窗口

分析完成会探出“import results summary”窗口,描述分析结果。默认汇编窗口和反汇编伪代码是两个窗口,并且同步联动。

主窗口

入口点一般是左侧“Program Tree”下面Exports中的entry或者main。双击变量或者函数可以进行跳转,点击变量的右键菜单可以在“References”看到该变量所有被应用的位置。

右键菜单

搜索到的引用

变量引用

此外还有一个常用CFG图,在“Window”-“Function Graph”中可以看到,跟随当前程序函数而变化。

菜单

示例程序是一个简单的xor算法。核心的算法是输入一个字符和其中对前32位的数据,前1-31分别和前2-32byte进行异或,计算出结合和输入一致即可。根据异或计算可逆的特性,再重新操作一次就可以得出flag。双击变量local_118跳转到具体的数据内容部分,拷贝出数据,编写脚本进行解码运算。

数据内容

解码脚本

a = ('66', '0A', '6B', '0C', '77', '26', '4F', '2E', '40', '11', '78', '0D', '5A', '3B', '55', '11', '70', '19', '46', '1F', '76', '22', '4D', '23', '44', '0E', '67', '06', '68', '0F', '47', '32', '4F', '00')
b = [chr(int(a[i],16) ^ int(a[i+1],16)) for i in range(0,32)]  
print(chr(int(a[0],16)) + ''.join(b))

flag{QianQiuWanDai_YiTongJiangHu}



版权声明:本文为qq_15174755原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。