0x1 Ghidra安装
1.Ghidra 是由美国国家安全局(NSA)研究部门开发的软件逆向工程(SRE)套件,用于支持网络安全任务。包括一套功能齐全的高端软件分析工具,使用户能够在各种平台(Windows、Mac OS和Linux)分析编译后的代码。功能包括反汇编,汇编,反编译,绘图和脚本,以及数百个其他功能。和 IDA 一样,Ghidra支持各种处理器指令集和可执行格式,用户还可以使用公开的API开发自己的Ghidra插件和脚本。不同的是,IDA是收费的,而Ghidra是免费开源的。
2.可以通过Ghidra的项目主页或者GitHub进行下载:
2)https://github.com/NationalSecurityAgency/Ghidra
3)https://github.com/NationalSecurityAgency/ghidra.git))
3.Ghidra直接通过压缩包解压即可使用,这样的好处就是可以不用修改各种系统配置
1.切换到GhidraInstallDir目录,运行GhidraRun.bat
2.Ghidra是按项目进行管理的,使用者需要首先创建一个项目,取名test
3.把我之前写的helloworld放进来看看,通过File->Import File->导入想要分析的文件
4.Ghidra 在加载完成后,会显示该文件的基础信息
5.在目标文件名上右击->Open with ->CodeBrowser,直接 Analyze 即可,按g键可以去往我们想要的地址,例如00401000,可以看到中间是反汇编窗口,右边是伪代码,左边是区段,函数表
6.右边伪代码还可以按图示右上角导出c代码
0x3 Ghidra的功能
1.接下来自己写一段简单代码来学习Ghidra的使用,程序很简单,就是输入密码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int reserveChar(char *ch, int length);
int DectoHex(int dec, char *hex, int h_length);
// 10进制转换16进制
int DectoHex(int dec, char *hex, int h_length)
{
char str[16] = "0123456789abcdef";
int i;
for (i = 0; dec > 0; i++)
{
if (i < h_length)
{
// 这样存是反着的
hex[i] = str[dec % 16];
}
dec /= 16;
}
reserveChar(hex, i);
return 0;
}
// 翻转字符串
int reserveChar(char *ch, int length)
{
char temp;
if (length % 2 == 0)
{
for (int i = 0; i != (length / 2); i++)
{
temp = ch[i];
ch[i] = ch[length - i - 1];
ch[length - i - 1] = temp;
}
}
}
int main()
{
int user = 1314520;
char password[15] = "";
char input[15] = "";
printf("请输入密码:\n");
scanf("%s", input);
DectoHex(user, password, 15);
if (!strcmp(input, password))
{
printf("密码正确\n");
}
else
{
printf("密码错误\n");
}
system("pause");
return 1;
}
2.接下来运行程序观查一下,看到有请按任意键继续,可以猜到调用了系统函数
3.去Ghidra中,Search->For Strings->中查找pause
4.找到后按g输入地址过去,看到右边交叉引用,双击就能找到使用的地方,定位到关键函数
6.去反编译窗口看看伪代码,在对比下ida反编译后的代码,可以看到IDA的反编译功能更多强大一些
7.Ghidra还可以对数据,区段,函数进行管理,例如这里可以直接查看DOS头文件,不需要借助其他工具