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

2 篇文章 0 订阅

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值