小菜鸟一枚 发表于 2023-6-4 20:21

学破解第208天,《Ghidra简介及使用方法》学习

前言:

  坛友们,年轻就是资本,和我一起逆天改命吧,我的学习过程全部记录及学习资源:(https://www.52pojie.cn/thread-1791705-1-1.html)

**立帖为证!--------记录学习的点点滴滴**

## 0x1 Ghidra安装
  1.Ghidra 是由美国国家安全局(NSA)研究部门开发的软件逆向工程(SRE)套件,用于支持网络安全任务。包括一套功能齐全的高端软件分析工具,使用户能够在各种平台(Windows、Mac OS和Linux)分析编译后的代码。功能包括反汇编,汇编,反编译,绘图和脚本,以及数百个其他功能。和 IDA 一样,Ghidra支持各种处理器指令集和可执行格式,用户还可以使用公开的API开发自己的Ghidra插件和脚本。不同的是,IDA是收费的,而Ghidra是免费开源的。

  2.可以通过Ghidra的项目主页或者GitHub进行下载:

1)(https://Ghidra-sre.org)

2)(https://github.com/NationalSecurityAgency/Ghidra)

3)(https://github.com/NationalSecurityAgency/ghidra.git))

  3.Ghidra直接通过压缩包解压即可使用,这样的好处就是可以不用修改各种系统配置。

## 0x2 Ghidra使用
  1.切换到GhidraInstallDir目录,运行GhidraRun.bat,进来之后长这样。

!(https://s1.ax1x.com/2023/06/03/pCpoWlR.png)

  2.Ghidra是按项目进行管理的,使用者需要首先创建一个项目,取名test。

!(https://s1.ax1x.com/2023/06/03/pCpooTO.png)

  3.把我之前写的helloworld放进来看看,通过File->Import File->导入想要分析的文件。

!(https://s1.ax1x.com/2023/06/03/pCpojXt.png)

  4.Ghidra 在加载完成后,会显示该文件的基础信息。

!(https://s1.ax1x.com/2023/06/03/pCpT9AS.png)

  5.在目标文件名上右击->Open with ->CodeBrowser,直接 Analyze 即可,按g键可以去往我们想要的地址,例如00401000,可以看到中间是反汇编窗口,右边是伪代码,左边是区段,函数表。

!(https://s1.ax1x.com/2023/06/03/pCpT8j1.png)

  6.右边伪代码还可以按图示右上角导出c代码。

!(https://s1.ax1x.com/2023/06/03/pCpT43j.png)

## 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 = "0123456789abcdef";
int i;
for (i = 0; dec > 0; i++)
{
    if (i < h_length)
    {
      // 这样存是反着的
      hex = str;
    }
    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;
      ch = ch;
      ch = temp;
    }
}
}

int main()
{
int user = 1314520;
char password = "";
char input = "";

printf("请输入密码:\n");
scanf("%s", input);

DectoHex(user, password, 15);

if (!strcmp(input, password))
{
    printf("密码正确\n");
}
else
{
    printf("密码错误\n");
}

system("pause");
return 1;
}
```

&emsp;&emsp;2.接下来运行程序观查一下,看到有请按任意键继续,可以猜到调用了系统函数:

!(https://s1.ax1x.com/2023/06/04/pC9r5M4.png)

&emsp;&emsp;3.去Ghidra中,Search->For Strings->中查找pause。

!(https://s1.ax1x.com/2023/06/04/pC9rOJK.png)

&emsp;&emsp;4.找到后按g输入地址过去,看到右边交叉引用,双击就能找到使用的地方,定位到关键函数(这个程序简单,直接看main函数也许,这里是为了学习用法)

!(https://s1.ax1x.com/2023/06/04/pC9sSLd.png)

&emsp;&emsp;5.使用Windows->Function Graph 可以看到该函数地图形化显示

!(https://s1.ax1x.com/2023/06/04/pC9sFFP.png)

&emsp;&emsp;6.去反编译窗口看看伪代码,在对比下ida反编译后的代码,可以看到IDA的反编译功能更多强大一些,Ghidra有很多变量识别成了未定义。

```
_puts(&.rdata);
_scanf("%s",&local_32);
DectoHex(local_14,(char *)&local_23,0xf);
iVar1 = _strcmp((char *)&local_32,(char *)&local_23);
if (iVar1 == 0) {
    _puts(&DAT_00406054);
}
else {
    _puts(&DAT_0040605d);
}
_system("pause");
return 1;

=======IDA======
puts(&Buffer);
    scanf("%s", Str1);
    DectoHex(v7, (char *)hex, 15);
    if ( !strcmp((const char *)Str1, (const char *)hex) )
      puts(&byte_406054);
    else
      puts(&byte_40605D);
    system("pause");
    return 1;
```

&emsp;&emsp;7.Ghidra还可以对数据,区段,函数进行管理,例如这里可以直接查看DOS头文件,不需要借助其他工具。

!(https://s1.ax1x.com/2023/06/04/pC9sWTI.png)

## 0x4 总结
&emsp;&emsp;1.哪个工具简单好用就用哪个,目前对小菜鸟而言,还是IDA香,主要是用得久,知道的功能多,也熟悉。

&emsp;&emsp;2.Ghidra作为开源工具,功能丰富,也有一定的优点,加载速度好像没用IDA快,可能是读取的内容太多了。

&emsp;&emsp;3.至于为什么自己写了那样一段代码,还不是前天10进制转16进制用c没写出来,当时用java操作的,这次就当巩固C知识了。

CuteCabbage 发表于 2023-6-4 20:55

很好,学习了

moruye 发表于 2023-6-4 22:08

maxwellhouse 发表于 2023-6-4 22:22

图片不显示

唯爱丶雪 发表于 2023-6-4 22:29

学习学习

HallOFSky 发表于 2023-6-4 22:45

可以,直接开看

wzbAwxl 发表于 2023-6-4 22:46

学习学习

Forem 发表于 2023-6-4 23:33

牛,有志者事竟成

daraxi 发表于 2023-6-5 00:52

跟着大佬学习

xdm1030 发表于 2023-6-5 01:19

学习学习
页: [1] 2 3 4 5
查看完整版本: 学破解第208天,《Ghidra简介及使用方法》学习