问题标签 [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 投票
2 回答
354 浏览

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

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

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

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

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

___EDIT 2 ___ 在获取之前:

0 投票
0 回答
229 浏览

c - 需要帮助理解来自 ghidra 的反编译代码行

我在 Ghidra 中反转了一个简单的二进制文件,并遇到了以下反编译的 C 代码:

这是相关的反汇编:

我不知道这行代码在做什么:

我知道的:

original_key 是一个 char[6] 即它被定义为 char original_key [6];original_key 的值可以是此行开头的任何值,但执行后 original_key 必须包含字符串 'uvxcuh'

我想我知道的:

原始密钥。0_4表示从 original_key 数组的偏移量 0 开始的 4 个字节(即将 original_key 的前 4 个字节视为 UINT) CONCAT11 表示将第二个 arg 的一个字节附加到第一个 arg 的 1 个字节。

我不知道的是:

这条线实际上对输入做了什么。当我在纸上处理它时,它没有意义。

任何见解将不胜感激。

滑雪

0 投票
2 回答
290 浏览

c - 这个 ghidra 生成的伪 c 代码会生成什么?

我正在玩一些关于 ghidra 逆向工程的挑战。

我分析了一个 bin 文件,其中应该包含一些关于密码的信息。当你运行文件时,你可以给它一些输入,它会检查它是否是正确的密码。这是负责执行此操作的伪 c 代码(评论是我):

好的,所以我尝试查找该功能FUN_0040078d

所以这里有很多信息。但总的来说,我认为通过执行操作构造了一个字符数组:

我不知道这是什么意思(对字符取模有什么作用?并且确实+ '!' )只是意味着连接一个“!”。

总的来说,我在阅读这篇文章时遇到了一些问题,我想知道是否有可能预测这个函数会为特定输入输出什么。在这种情况下,函数14作为输入给出。

或许使用了rand()无法解构的手段?

谁能猜猜/告诉我这个函数可能会为输入 14 输出什么?

0 投票
1 回答
91 浏览

gdb - 如何使用 gdb 从可执行文件中调用带有参数的函数

我需要帮助在使用 GDB 的可执行文件中运行程序。

我有一个可执行文件名vuln。我不知道源代码,因为我正在做 CTF。当我分析可执行文件时,我发现了三个令人兴奋的函数:mainvulnflag. Vuln func 容易受到 BOF 攻击,但我不想那样做。我想做的是在gdb中运行可执行文件,我使用print (void) flag(param1, param2)命令直接运行flagfunc,因为这应该给我一个标志;但是,它不起作用,因为它说我的参数不正确,我确定不是。我也发现了跳转功能,但我不能传递任何参数。

那么有什么方法可以从带有参数的可执行文件中正确运行函数,否则我将不得不经历 BOF 的痛苦。

FLAG 和 VULN Func 的 GHIDRA 反汇编代码如下。

0 投票
0 回答
105 浏览

bootloader - TriCore TC1797 二进制图像的 Ghidra 加载程序

有人为这个处理器写过 Ghidra 加载器吗?(Ghidra 是一种逆向工程工具)。我想使用设备上安装的原始二进制文件启动 RE。

0 投票
0 回答
435 浏览

assembly - Ghidra 中的局部变量寻址

我一直在尝试通过检查 Ghidra 的反编译版本来解决破解挑战。所以我想出了strcmp完成的代码,如下图所示。现在我需要修补程序以使其在strcmp失败时打印密码。

  • 密码存储在local_40

但我不知道如何修补指令以打印出 local_40 处的值

而不是MOV dword ptr [ESP],0x4b1050应该编辑该指令中的哪些变量?如果我的理解是正确的,那么上面的指令正在将值加载到 ESP 寄存器中,0x4b1050 那么我将如何获得的地址local_40

在此处输入图像描述

0 投票
1 回答
126 浏览

python - 如何在 Ghidra 中获取 currentProgram 对象?

我想编写一个 python 脚本,它可以从 ghidra 项目中提取和打印对象,例如枚举和结构,为此我需要从 currentProgram 对象调用 DataTypeManager,但我不确定如何在脚本中调用 currentProgram不在 ghidra python 终端中。有什么建议或例子吗?

0 投票
0 回答
28 浏览

gradle - 在 Gradle 中实现 IntelliJ“选择源”对话框的结果

语境

我正在为具有相当复杂的 Gradle 文件系统的 Java 项目 (Ghidra) 构建扩展。IntelliJ 正确地拾取依赖 jar,但每次.class打开文件时(例如在调试期间)IntelliJ 都会在顶部显示一个横幅,说明: Decompiled .class file, bytecode version: 55.0 (Java 11) Choose Sources...

Choose Sources打开对话框选择源,可以选择文件*-src.zip旁边的来添加源。*.jar这也可以通过项目设置来完成。在后一种情况下,有一个明确的警告:A Library is imported from Gradle. Any changes made in its configuration might be lost after reimporting.. 使用时这种行为仍然Choose Sources存在,只是没有警告。

核心问题

如何以 IntelliJ(或任何其他 IDE)自动识别的方式将源添加到 Gradle 配置?即,实现Choose SourcesIntelliJ IDEA 中对话框的功能的 Gradle 指令是什么?

在 Gradle 文件中声明依赖项的方式,该文件包含在实际build.gradle中,方式如下:

尝试

我的第一次尝试是将其更改为api fileTree(dir: ghidraDir + '/Framework', includes: ["**/*.jar", "**/*-src.zip"]),但这会将 zip 添加为 IntelliJ 中的单独存档文件,而不是作为依赖项 jar 的源。

Eclipse 的 Gradle 代码

似乎为 Eclipse 实现相同结果的 Gradle 代码如下所示,特别是entry.setSourcePath

0 投票
1 回答
207 浏览

c - 这个 C 语法有什么作用: iVar = (*DAT)(param_2,PTR_s);

我对逆向工程和使用 Ghidra 很陌生。最近我反编译了一些arduino代码。当我查看反编译代码时,我注意到以下行。

我已经削减了变量的某些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。2 年前,我曾与 C 一起工作过,但我无法弄清楚这里发生了什么。PTR_s 应该是一个指向字符串的指针,而 param_2 是一个字节*。还没有弄清楚 *DAT 到底是什么。

0 投票
1 回答
744 浏览

linux - 当我使用 Ghidra 反汇编 .so 文件时,什么是未定义函数?

我现在正在尝试分解一个.so文件,但发现了一个奇怪的部分:

在此处输入图像描述

并跟随FUN_004d9f38引导我到这个:

在此处输入图像描述

任何人都可以帮助我理解什么是所谓的undefined __cdecl FUN_004d9f38(void),特别是什么是undefinde函数。

如上面的代码所示。第一张图片的代码使用了跳转指令跳转到FUN_004d9f38,但是FUN_004d9f38是无效的指令代码67。该程序如何才能正常工作?