
目录一、环境信息二、介绍三、环境准备四、版本下载五、内存调整六、测试程序1、Riddle.c源码2、编译3、运行七、实践1、创建目录2、启动3、新建项目4、导入文件5、反编译6、分析八、实用技巧1、全局搜索2、函数列表一、环境信息名称值CPUx86操作系统Centos8Ghidra版本12.1.3JAVA版本21.0.2二、介绍Ghidra 是由美国国家安全局NSA研究部门开发的一款免费、开源的软件逆向工程SRE框架最初于 2019 年在 GitHub 上公开源代码。它提供了一套功能强大的工具用于分析编译后的代码帮助安全研究人员、恶意软件分析师和软件开发者理解二进制程序的行为。三、环境准备需安装JAVA 21可参考之前的博客Linux-学习-12-JDK安装https://blog.csdn.net/qq_45111959/article/details/164810239?spm1011.2415.3001.5331四、版本下载我用的是原版。原版下载链接Ghidra-github-release版本链接https://github.com/NationalSecurityAgency/ghidra/releases中文版下载链接Ghidra中文版-github-release版本https://github.com/TC999/ghidra-chinese/releases五、内存调整[rootlocalhost ghidra_12.1.3_PUBLIC]# pwd /opt/Ghidra/ghidra_12.1.3_PUBLIC [rootlocalhost ghidra_12.1.3_PUBLIC]# vim support/launch.propertieslaunch.properties配置文件中添加VMARGS-Xms5G VMARGS-Xmx6G可避免报错java heap space。六、测试程序如果大家有程序的话就可以省略这一步。1、Riddle.c源码#include stdio.h #include stdlib.h #include string.h #define RIDDLE_STR SUN #define RIDDLE_LEN (sizeof(RIDDLE_STR) - 1) #define BUF_SIZE (RIDDLE_LEN 15) int main() { char Buf[BUF_SIZE] {0}; printf(Input riddle : ); if (scanf(%s, Buf) 1) { if(strncmp(Buf,RIDDLE_STR,RIDDLE_LEN) 0) { printf(Riddle guessed correctly.\n); } else { printf(Riddle guessed wrong.\n); } } else { printf(Input format error.\n); } return 0; }2、编译gcc -Wall -Wextra -O2 -o Riddle Riddle.c3、运行[rootlocalhost opt]# ./Riddle Input riddle : SUN Riddle guessed correctly. [rootlocalhost opt]# ./Riddle Input riddle : sun Riddle guessed wrong.七、实践1、创建目录[rootlocalhost opt]# mkdir /opt/riddle2、启动[rootlocalhost ghidra_12.1.3_PUBLIC]# ./ghidraRun如果报错了用DEBUG版本启动看一下它会告诉你失败原因。[rootlocalhost ghidra_12.1.3_PUBLIC]# ./support/ghidraDebug Invalid initial heap size: -Xms2G -Xmx2G Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.3、新建项目点击File-New Project点击Next填写项目目录、项目名点击Finish4、导入文件点击Import File选择程序文件点击Select File To Import点击OK点击OK5、反编译双击程序点击Yes点击Analyze分析选项默认即可。程序比较小反编译很快。6、分析19行是谜语猜错16行谜语猜测正确根据14行的strncmp字符串比较函数local_28是读取内容SUN就是谜底。八、实用技巧1、全局搜索先点击左上角的保存点击Search-Memory左侧箭头填写错误信息搜右侧箭头的类型改为String回车即可点击Make Selection会自动跳跃到错误信息出但右侧不是相应C伪源码点击References-Show References To Address双击选中的红框就跳转到相应的C伪代码可以看到相应的错误信息。2、函数列表Symbol Tree中的Functions可以看到程序中包含的大部分函数可以直接点击跳转我这个程序太小了就一个main函数。