问题标签 [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.
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 ___ 在获取之前:
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 个字节。
我不知道的是:
这条线实际上对输入做了什么。当我在纸上处理它时,它没有意义。
任何见解将不胜感激。
滑雪
c - 这个 ghidra 生成的伪 c 代码会生成什么?
我正在玩一些关于 ghidra 逆向工程的挑战。
我分析了一个 bin 文件,其中应该包含一些关于密码的信息。当你运行文件时,你可以给它一些输入,它会检查它是否是正确的密码。这是负责执行此操作的伪 c 代码(评论是我):
好的,所以我尝试查找该功能FUN_0040078d
:
所以这里有很多信息。但总的来说,我认为通过执行操作构造了一个字符数组:
我不知道这是什么意思(对字符取模有什么作用?并且确实+ '!'
)只是意味着连接一个“!”。
总的来说,我在阅读这篇文章时遇到了一些问题,我想知道是否有可能预测这个函数会为特定输入输出什么。在这种情况下,函数14
作为输入给出。
或许使用了rand()
无法解构的手段?
谁能猜猜/告诉我这个函数可能会为输入 14 输出什么?
gdb - 如何使用 gdb 从可执行文件中调用带有参数的函数
我需要帮助在使用 GDB 的可执行文件中运行程序。
我有一个可执行文件名vuln
。我不知道源代码,因为我正在做 CTF。当我分析可执行文件时,我发现了三个令人兴奋的函数:main
、vuln
和flag
. Vuln func 容易受到 BOF 攻击,但我不想那样做。我想做的是在gdb中运行可执行文件,我使用print (void) flag(param1, param2)
命令直接运行flag
func,因为这应该给我一个标志;但是,它不起作用,因为它说我的参数不正确,我确定不是。我也发现了跳转功能,但我不能传递任何参数。
那么有什么方法可以从带有参数的可执行文件中正确运行函数,否则我将不得不经历 BOF 的痛苦。
FLAG 和 VULN Func 的 GHIDRA 反汇编代码如下。
bootloader - TriCore TC1797 二进制图像的 Ghidra 加载程序
有人为这个处理器写过 Ghidra 加载器吗?(Ghidra 是一种逆向工程工具)。我想使用设备上安装的原始二进制文件启动 RE。
python - 如何在 Ghidra 中获取 currentProgram 对象?
我想编写一个 python 脚本,它可以从 ghidra 项目中提取和打印对象,例如枚举和结构,为此我需要从 currentProgram 对象调用 DataTypeManager,但我不确定如何在脚本中调用 currentProgram不在 ghidra python 终端中。有什么建议或例子吗?
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 Sources
IntelliJ IDEA 中对话框的功能的 Gradle 指令是什么?
在 Gradle 文件中声明依赖项的方式,该文件包含在实际build.gradle
中,方式如下:
尝试
我的第一次尝试是将其更改为api fileTree(dir: ghidraDir + '/Framework', includes: ["**/*.jar", "**/*-src.zip"])
,但这会将 zip 添加为 IntelliJ 中的单独存档文件,而不是作为依赖项 jar 的源。
Eclipse 的 Gradle 代码
似乎为 Eclipse 实现相同结果的 Gradle 代码如下所示,特别是entry.setSourcePath
c - 这个 C 语法有什么作用: iVar = (*DAT)(param_2,PTR_s);
我对逆向工程和使用 Ghidra 很陌生。最近我反编译了一些arduino代码。当我查看反编译代码时,我注意到以下行。
我已经削减了变量的某些部分。但我真的很想知道这段代码在做什么。它应该是反编译的c代码。2 年前,我曾与 C 一起工作过,但我无法弄清楚这里发生了什么。PTR_s 应该是一个指向字符串的指针,而 param_2 是一个字节*。还没有弄清楚 *DAT 到底是什么。