问题标签 [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.
reverse-engineering - Ghidra 地址与作弊引擎不一致(仍需要帮助)
我现在正在练习一些逆向工程,我遇到了一个问题。如果我从 Cheat Engine 复制一个地址,然后想跳到 Ghidra 的同一个地方,我最终会进入一个 veerem 的地方。例如,0x00429D1F
在sub [ebx+4],edi
Cheat Engine 和jge LAB_00 429d2b
Ghidra 中。我已经听说可以在 Memory Map 窗口中重置基地址并尝试过,但不幸的是它不起作用。此外,Ghidra 中的模式扫描对我不起作用。当我从 Ghidra 的作弊引擎中搜索某种模式的字节时,Ghidra 没有找到该模式,即使它存在。提前感谢您的帮助。
msp430 - Ghidra 和 MSP430 反编译器不显示任何功能
我正在试验 Ghidra 并反编译用于 MSP430 FR4133 Launchpad 的代码。我不确定它是否受支持,但 Ghidra 似乎支持 MSP430 设备。
对于一个简单的测试,我在此链接中使用 MSP EXP430FR4133 Launchpad 的示例代码。
此链接包含此目录 MSP-EXP430FR4133_Software_Examples_windows\Firmware\Source\OutOfBox_MSP430FR4133 中的简单源程序。这是一个带有秒表和温度传感器的简单程序。
我决定加载二进制文件夹中的二进制文件。
然后我选择了 TI MSP430 16-bit,让 Ghidra 做分析。问题是反编译器不提供任何功能。我想知道我是否选择了错误的架构或选项?
更新 1 我发布了两个额外的图像,它们显示了两个功能,但没有任何意义。
assembly - 如何通过延迟 MOV 操作 [Assembler x86] 覆盖堆栈?
我正在学习如何使用 Ghidra Tool,但我有一个如何解释一个功能的问题。这是简化版:
以这种情况为例:[RBP – 0x40]
堆栈的 location 具有以下值:(0xFFFF7710
实际上,该值是堆栈中另一个元素的地址……但是对于问题,这无关紧要)。
现在我们将该值的地址存储在寄存器中:
最后,我们执行这两条指令:
堆栈中的最终内容[RBP – 0x40]
是0xFFFF7720
,0x00000020
还是0xFFFFFF20
?
[RBP – 0x40]
是通过最后一个操作覆盖堆栈的所有内容MOV
还是仅覆盖最后一个字节?
谢谢。
assembly - 基于 PE 节标题中的 VirutalAddress 属性的偏移量计算不正确
我用平面汇编器创建了一个简单的 .exe 文件,它实际上什么都不做,只有一条指令
创建后,我在 Ghidra 中打开了可执行文件,它自动将语言检测为PE -> x86:LE:64:default:windows,这对我来说似乎没问题。
现在第一个地址是00400000,根据 MSDN 的 PE 格式(默认 ImageBase),这似乎也很好。
当我现在转到 VirtualAddress 属性时,它应该给我入口函数相对于 ImageBase 的位置,Ghidra 显示以下 4 个字节:00 10 00 00
现在,也许我做的数学不正确,但偏移量计算不应该是: 0x400000 + 0x100000 即0x500000吗?
那么这个偏移量不在我的图像中。当我转到 Ghidra 中的 EntryPoint (主要功能)时,它位于 Offset 0x401000。
那么我的数学错了吗?如果我从 VirtualAddress 属性中删除 1 个字节,它正是那个位置,但它只是 3 个字节,但 PE 格式说该属性是 4 个字节。
ghidra - 为什么 ghidra 跳过一些地址
我有一个这样的。加载 ghidra 并将基地址设置为 0。我发现某些地址已像这样跳过:
所以是: https ://www.dropbox.com/s/wmea0pcirzopoll/libxxx.so?dl=0
dependencies - Windows 沙盒依赖项
我正在尝试在 Windows Sandbox 中运行 Ghidra(恶意软件分析软件)。我通过使用 .wsb 文件在沙盒和主机之间创建一个共享目录,将 Ghidra 带到了沙盒环境。当我尝试在沙盒中运行 Ghidra 时,会弹出一个 cmd 提示符,上面写着
未找到 Java 运行时。请参阅 Ghidra 安装指南的故障排除部分。按任意键继续 。. .
Ghidra 依赖于 JDK 11。我尝试将 JDK 11 安装程序带到共享文件夹并在沙盒环境中运行它,但是 Windows 安装程序说
无法打开此安装包。联系应用程序供应商以验证...(已编辑)
似乎其他人在沙盒环境中运行其他应用程序就好了。如何设置要在 Windows Sandbox 中运行的应用程序的依赖项?
ghidra - 如何更改 Ghidra 中的程序路径
我有一个带有导入二进制文件的 Ghidra 项目,该文件是在计算机 A 上创建的,然后我想将此项目移动到计算机 B。但是,二进制文件的路径与 A 不同。如何更改Ghidra中的路径设置?
已编辑: 错误消息(黑块是计算机 A 中的原始路径。)
c - 来自 Ghidra 的反编译程序集中的像素转换
我正在反转一个组装函数,我相信它将像素数组(RGB)或光位点(RGGB)转换为最终数组,原始(我认为)编码由每像素 10 位或 12 位组成。我的目标是了解在 c/c++ 操作或自然语言方面在图像格式转换的上下文中发生了什么,并最终以有意义的方式命名变量。
我不明白的操作很少,例如:
在每个样本 10 位的情况下(1 个样本,即 R|G|B):
前两行考虑最强位(>> 0x3f
和>> 0x1f
);但为什么要除以 3 呢?为什么要加最强位?我根本没有得到第 4 行;* -3 * '\n'
特别是2U & 0x1f
:为什么 31 作为掩码?
在每个样本 12 位的情况下:
& 7
将除 3 个最低位之外的所有位归零,但为什么在考虑之前最强位之后呢?
我不明白- uVar5
然后的目的*12
;这里可能dataSizeBytes
不是以字节为单位的数据大小。
>>3
是“删除最弱的 2 个位”,但这就是我在这里所理解的。
在这里,我了解了位操作,但我无法提升到更高的水平。
12 位大小写结束。
对于反编译的代码,我提供了这些定义以帮助理解:
undefined* 来自 ghidra,如果我的翻译正确,我还没有检查动态分析。
来自 ghidra 的反编译代码是:(模数重命名和类型定义)
这是原始程序集,但 ghidra 没有抱怨或警告结果。
我可以补充一点,它是适用于 Windows 10 的 AMD64/Intelx64 64 位程序集。
debugging - 如何从 ghidra 的相应指令中破解 x64dbg?
我通过ret-sync 同步了 x64dbg 和 ghidra 。我在 ghidra 中发现了一个有趣的点:
在列表视图中;文件my.dll从180000000开始。所以,然后在x64dbg中我为my.dll添加了一个dll中断,当我进入时,我用ctrl+shift+g转到文件偏移量并输入328b4,但我结束了在(第一行):
在 x64dbg 中,文件开始于:00007FF8B2F81000
(CPU 选项卡,模块 my.dll,主线程 X,PID Y)。
显然指令是不一样的。(我相信我正确地做了rebase)
我怎样才能使对应的 ghidra -> x64dbg 并在“相同的地方”中断 x64dbg,即相同的指令?