标签: ghidra

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

  • 我正在根据安装指南构建 ghidra 。一切顺利,直到我到达这里
  • 一旦我打电话,$ gradle buildGhidra我就会收到以下错误:
> Could not target platform: 'Java SE 11' using tool chain: 'JDK 8 (1.8)'
Run Code Online (Sandbox Code Playgroud)

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

$ java --version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

java gradle ghidra

8
推荐指数
3
解决办法
7578
查看次数

CONCAT15 和 CONCAT412 在 ghidra 中意味着什么?

我在 ghidra 中反编译了一个文件,在反编译文件中看到了很多 CONCAT+RandomNumber!

它们是什么意思?

ghidra

6
推荐指数
1
解决办法
9702
查看次数

如何使用 Cutter 或 Radare2 比较两个 EXE 文件、查找差异并反编译它们?

经过几天的努力,我想向社区询问:)

我有两个exe文件。两者大小相同且相当大(约 80MB)。

  • 第一个exe是原始文件,是前段时间编译好的。我也有相应的PDB文件。
  • 第二个文件与第一个文件几乎相同,但已在多个位置进行了二进制修补。

我设法使用 Cutter (Radare2 GUI) 反编译这些文件,但考虑到文件大小,几乎不可能遍历每一种方法。

使用十六进制编辑器(Hex Fiend),我设法获得应用补丁的每个偏移位置。现在我试图用 Cutter 找到这些偏移量来反编译这些位置。

问题是:如何?当我在 Cutter 中打开 Hexdump 时,似乎一切都未就位,我可能需要偏移。在 Cutter 的加载屏幕上设置偏移量似乎没有做任何事情。难道是我用错了?

例子:

妖魔

Offset                Hex Data                                         Text
474942-474956         47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41  GetModuleHandleA
Run Code Online (Sandbox Code Playgroud)

刀具

Offset                Hex Data                                         Text
0x0060713E-0x0060714D 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41  GetModuleHandleA
Run Code Online (Sandbox Code Playgroud)

474942是0x73F3E,但是距离0x0060713E很远

也许我需要其他工具?任何帮助表示赞赏!

hexdump disassembly decompiler radare2 ghidra

5
推荐指数
0
解决办法
3258
查看次数

Ghidra 使用奇怪的字段名称(如“._0_4_”)来表示 C 反编译中的非默认访问大小

我一直在使用 Ghidra 反编译一些最初为 ARMv7 编译的 .o 库文件,其中我有一些函数和结构的头文件。

假设一个结构体有几个单字节“char”成员:

struct myStruct {
   char memberA;
   char memberB;
   char memberC;
   char memberD;
} structInstance;
Run Code Online (Sandbox Code Playgroud)

如果汇编代码(可能是在构建时通过编译器优化)偷工减料并一次性访问整个 32 位字的字符,那么反编译的 C 代码将表示为:

structInstance._0_4_
Run Code Online (Sandbox Code Playgroud)

第一个数字 (0) 是起始字节的偏移量,第二个数字 (4) 是正在访问的字节数。

然而,据我所知,这是非标准的并且不会重新编译 - 至少在 GCC 中不会,而且我在任何地方都找不到任何对此表示法的引用。

有什么方法可以将 Ghidra 设置为生成实际上有效的反编译代码 - 即

*(uint32_t)&structInstance.memberA
Run Code Online (Sandbox Code Playgroud)

c decompiling reverse-engineering ghidra

5
推荐指数
0
解决办法
1288
查看次数

如何删除 Ghidra 反汇编列表显示中的省略号 (...)?

Ghidra经常用省略号 (...) 截断反汇编列表显示中的文本,如下图所示的几个示例:

带省略号的示例 寄存器内容处的省略号 地址处的省略号

我的问题是:我怎样才能让 Ghidra 停止这样做?

我已经查看了广泛的配置选项,但我无法弄清楚。

configuration customization reverse-engineering ghidra

3
推荐指数
1
解决办法
1004
查看次数

ghidra 充满了 thunk 函数

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

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

TL;DR 我该如何制作才能使下面的图像不充满 thunk 函数,并且实际上可以以某种方式读取,就像那些看起来像 printf 函数一样。

吉德拉·桑克斯

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

reverse-engineering ghidra

3
推荐指数
1
解决办法
7500
查看次数

frida hook 原生非导出函数

我正在反转这个 Android 应用程序以用于学习目的,并且该应用程序在本机层上实现了所有有趣的功能,因此我在 Arm Android Studio 映像上运行该应用程序并反转了共享库。因此该应用程序正在使用 ghidra 进行调用我设法将共享对象反编译成c,我发现了很多相互调用的函数,而且我还发现了尊重jni命名约定的函数

我可以成功挂钩任何上述导出,但是当我尝试挂钩以下函数时,我得到一个未找到的导出,如何挂钩这些本机函数?

android reverse-engineering frida ghidra

3
推荐指数
1
解决办法
7195
查看次数

Ghidra 是否误解了函数调用?

在分析 Ghidra 中的程序集列表时,我偶然发现了这条指令:

CALL dword ptr [EBX*0x4 + 0x402ac0]=>DAT_00402abc

我假设程序正在调用一个地址位于 inside 的函数DAT_00402abc,我最初认为它是一个双字变量。事实上,当尝试在 is 所在的位置创建函数时DAT_00402abc,Ghidra 不会让我这样做。

反编译器向我显示这行代码来翻译该指令:

(*(code *)(&int2)[iVar2])();

所以我想知道这是什么意思以及程序应该用这个调用做什么?有没有可能吉德拉彻底搞砸了?如果是这样,我应该如何解释该指令?

c x86 decompiling reverse-engineering ghidra

2
推荐指数
1
解决办法
1609
查看次数

为什么这个二进制文件容易受到缓冲区溢出的影响?

这是缓冲区溢出的二进制文件的摘录。我用 Ghidra 反编译了它。

  char local_7 [32];
  long local_78;

  printf("Give it a try");
  gets(local_7);
      if (local_78 != 0x4141414141414141) {
        if (local_78 == 0x1122334455667788) {
          puts ("That's won")
        }
        puts("Let's continue");
      }
Run Code Online (Sandbox Code Playgroud)

我想了解为什么可能会发生缓冲区溢出。
我检查了“0x4141414141414141”十六进制值,发现它与“A”字符串有关。但是与“0x4141414141414141”和“0x1122334455667788”相关的条件究竟是做什么的?更准确地说,用户可以回答什么来获得消息(“那是赢了”)?
任何解释将不胜感激,谢谢!

___EDIT ___
我必须补充一点,我在使用“disas main”命令时看到了这两个十六进制值:

0x00000000000011a7 <+8>: movabs $0x4141414141414141,%rax  
0x00000000000011e6 <+71>: movabs $0x4141414141414141,%rax  
0x00000000000011f6 <+87>: movabs $0x1122334455667788,%rax
Run Code Online (Sandbox Code Playgroud)

我尝试使用python3 -c "print ('A' * 32 +'\x88\x77\x66\x55\x44\x33\x22\x11')" | ./ myBinary.
但我总是有"Let's continue"消息。我离解决方案不远了,但我想我错过了一件事..你能帮我什么吗?

___EDIT 2 ___ 在获取之前:

  char local_7 [40];
  long local_78;
  
  local_78 = 0x4141414141414141;
  printf("Give it a …
Run Code Online (Sandbox Code Playgroud)

c c++ binary buffer-overflow ghidra

0
推荐指数
1
解决办法
235
查看次数