问题标签 [ghidra]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
905 浏览

reverse-engineering - 使用 Ghidra 脚本从 PE 获取导入/导出

我正在使用 ghidra 对 EXE 文件进行逆向工程。我想从符号树中提取导入和导出。我写了这个脚本,但它没有返回任何东西。

但是当我使用这个脚本从符号树中获取所有函数时,它可以工作

我错过了什么?

0 投票
1 回答
438 浏览

diff - 两个具有完全相同汇编代码的编译二进制文件在破解二进制文件时表现不同?或者我可能错过了什么?

我有两个 exe 文件,一个是原始文件,另一个是破解软件Vector magic的 exe 文件,破解文件是vmbe.zip 两个文件的大小完全相同。

我正在使用 ghidra 反编译那些二进制文件然后我只需使用选项File->Export Program (O)将这些文件导出为格式化 c/c++ 程序

然后我将这些文件打开到 Visual Studio 并应用Diff扩展来查找这些文件之间的差异,我只需按ALT+F5即可导航到差异

然后我观察到一些函数只是未能反编译显示以下错误,但我只是使用Windows->Functions在 Ghidra 中搜索这些函数,然后我再次一一反编译这些函数,然后将这些函数放入整个 .c 文件中的适当位置。

现在我有两个.c文件,一个是原始exe文件的反编译版本,另一个是破解的exe文件,在修复较少的变量名称后,我们很容易发现这两个文件在函数末尾只有一个区别FUN_0043a620

原始exe的反编译.c文件

破解exe的反编译.c文件


在 Ghidra 中,我们可以看到在内存位置只更改了一条汇编指令0043a687

原始文件

破解文件

现在我在原始 exe 文件中更改了该指令,只从选项File->Export Program (O)导出二进制文件

然后我通过用我的破解文件替换 ogrinal 文件来尝试我的破解二进制文件版本,它只是不起作用,但是当我尝试破解文件时,它就像一个魅力。

这个补丁看起来像是一个正确的解决方案,因为这是一个通过观察返回值来决定软件是否注册天气的函数,我们只是让它成为 always return 1FUN_0043a620我们可以在反编译的 .c 文件中搜索该函数的用途,
例如

这正是我在查看破解二进制文件之前发现的,我尝试了它,但它没有奏效,然后我发现这个破解文件试图了解工作破解二进制文件与原始二进制文件之间的差异。

我想知道为什么我的破解版无法工作,即使我从工作破解文件中复制了精确更改的汇编指令?

0 投票
1 回答
354 浏览

assembly - Stack[0x4]:1 的含义

所以我遇到了一些我不明白的奇怪的东西。我正在阅读有关装配的理论,我想知道这个 Stack[0x4]:1 有什么作用。

我不明白,因为文章说这是-0x43,顺便说一句-在-0x43中做了什么?谢谢。

0 投票
1 回答
1282 浏览

x86-64 - 尝试打开 ELF 文件时出现 ghidra 错误

我对 Ghidra 很陌生,我刚刚安装了它以尝试反编译 ELF 文件。尝试将文件分配给新的 Ghidra 项目时,我收到以下错误消息:

我能做些什么来解决这些问题?

0 投票
0 回答
268 浏览

assembly - Ghidra 在简单的 ADD 指令中做乱七八糟的事情?

我不知道 ghidra 是否在反编译器上做着乱七八糟的事情,或者我今天做了足够多的逆转。

集会:

其中 DAT_006020c1 是:

所以它应该是 local_10 和 0x3C 之间的常规字节添加,对吗?

此行的 Ghidra 反编译器输出:

所以这对我来说毫无意义,因为我们没有用 0x1 进行加法?

问候

0 投票
1 回答
2991 浏览

reverse-engineering - ghidra 充满了 thunk 功能

我正在尝试在 ghidra 中进行破解。我已经能够找到答案,但我想知道当我使用调试器并查看字符串时,我将如何“正确”完成此操作。在下图中,您可以清楚地看到有很多 thunk 函数,但老实说,它们看起来就像 printf 的。我不知道如何修复它,所以我可以获得实际可读的函数名称,或者如果没有办法。

我认为这可能与我在尝试分析文件时遇到的错误有关,而我收到有关 PDB 文件的错误。我尝试重新编译 msdia140.dll,因为我使用的是 Visual Studio 2019,但尝试编译时却出现了构建错误。

TL;DR 我如何做到这一点,以便下面的图像不包含 thunk 函数,并且实际上以某种方式可读,因为它们看起来像 printf 函数。

吉德拉桑克斯

当我尝试编译新的 PDA 时会发生什么

0 投票
1 回答
779 浏览

c++ - 解释 Ghidra 指针(ELI 不了解 C/C++)

给定param_1的是输入文件字节,有人可以解释做uVar4 = *(uint *)(param_1 + 3)什么吗?是铸造param_1uint那时uVar4 = param_1[3]吗?此外,关于指针的任何澄清也很好,因为我对 C/Cpp 的体验接近于零(甚至没有提到指针)

0 投票
5 回答
12119 浏览

java - gradle 无法定位平台:'Java SE 11' 使用工具链:'JDK 8 (1.8)'

  • 我正在根据安装指南构建 ghidra 。一切都很好,直到我到达这里
  • 一旦我打电话$ gradle buildGhidra,我就会收到以下错误:

这看起来很奇怪,因为我确实有 java 11:

我错过了什么?

0 投票
1 回答
58 浏览

ghidra - 为什么 thunk 不需要像函数一样多的参数?

我正在处理 Ghidra 中的以下 thunk:

在此处输入图像描述

现在,当我双击 thunked 函数时,Ghidra 将我带到真正的函数,我可以看到它需要 2 个参数(“param_1”和“param_2”)。

在此处输入图像描述

为什么只允许使用单个参数(“&LAB_30007a18”)调用它?

谢谢!

0 投票
1 回答
566 浏览

jython-2.7 - 如何在 Ghidra 中导出函数的二进制代码(Ghidra 脚本)

我想在 python (jython) 中编写一个 ghidra 脚本,将当前程序中所有函数的二进制代码导出到 .bin 文件。

我想出了这段代码,但我不确定我应该如何在BinaryExporter类中使用 export() 函数

函数签名:export(java.io.File file, DomainObject domainObj, AddressSetView addrSet, TaskMonitor monitor)

我应该如何填写论据?有没有更好的方法来做到这一点?