https://github.com/NationalSecurityAgency/ghidra
ghidra是一个so的逆向工具,功能和jadx-gui类似,但是和jadx-gui专注于java层的不同,ghidra专注于native层的代码反编译(从二进制到c语言)。
一、 安装
- 准备好java17的环境(mac: brew install openjdk@17,软件基于java,是跨平台的)
- Github下载,从github上的release下载最新版本的ghidra,解压,执行
./ghidraRun
即可打开。
使用zsh可以在~/.zshrc中配置这个alias,可以快速打开:)
alias ghidra=“/Users/${your_name}/Applications/ghidra_11.0.3_PUBLIC/ghidraRun”
二、基本使用
-
打开后点击file new project,按指引选中项目和存放暂存文件的目录。
-
选中import file,导入要逆向的so,比如如下导入了libyeshen.so
-
双击so即打开工程
-
mac用户注意下打开允许使用
-
功能区说明:
a. 左边是导出的方法,我是从入口方法开始看起,下面还有Functions,也是一堆堆方法
b. 中间部分是静态地址和汇编指令。静态地址很关键,运行时hook、查看入参出参都需要对这个地址做操作。点击 “G” 按键可以输入地址,回车即可跳到目标地址。
c. 反编译出来的C代码,含有程序的逻辑信息,看起来是比较辛苦,当时可以看个大概大概…
d. 搜索so中的字符串信息可以这样搜索:i. 点击search 点击memoryii. 找到地址上的数据iii. 右键Reference -> show reference to DAT_xxxxxiv. 双击看到的地址,即可跳到使用这个地址的地方
-
备注和修改名字,都是右键出菜单,选中改名/改备注。考虑到复杂一点的so可能一天分析不完,所以增加备注,修改函数名字可以加速分析、暂存分析过程。