问题标签 [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 回答
220 浏览

c++ - 使用指针从dll调用函数不起作用

我制作了一个测试程序并制作了一个只打印一些文本的函数,我试图通过使用 IDA/Ghidra 反转它并获取指向它的指针来从 DLL 调用它。

它在 Ghidra 中的样子

我以为 IDA 提供了错误的地址,所以我与 Ghidra 核对了一下,我得到了相同的地址......

这是我从 DLL 调用函数的代码

程序打印“开始...”和“得到功能!” 但不调用原始函数。

我已经尝试查看几个帖子,但我无法弄清楚我做错了什么,因为其他人做了类似的事情并且对他们有用。

更新:正如有人建议的那样,我尝试将基地址添加到函数指针,但是我得到了相同的结果。

这是我尝试过的:

它正确地获取了基地址(或者至少我认为是,因为它不为空),但它没有执行 ofunct 并打印“完成!”。

0 投票
0 回答
446 浏览

c - Ghidra 使用像“._0_4_”这样的奇怪字段名称来表示 C 反编译中的非默认访问大小

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

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

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

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

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

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

0 投票
0 回答
186 浏览

c++ - Visual C++ 6.0 WholeArchive

我正在对使用 Microsoft Visual C++ 6.0 编译的旧计算机程序进行逆向工程。我想让 Ghidra 识别静态链接的 CRT 库中的所有函数。

我尝试编译一个使用 fopen 的简单程序并将其提供给 Ghidra 的函数 ID,它成功地识别了原始可执行文件中的 fopen。现在我希望它能够识别更多功能,但我不想在我的程序中编写所有这些功能。

有没有办法强制 MSVC++ 6.0 包含所有静态链接的符号?(类似于 Visual Studio 2015+ 中的 /WHOLEARCHIVE)

0 投票
0 回答
291 浏览

c++ - 我怎样才能像 ida pro 一样设置 Ghidra?

我正在使用 Ghidra。我有个问题。当我打开二进制 IDA pro 时,代码非常好分析。这是 IDA pro 反编译代码

这是 Ghidra 相同的部分。

问题是当我用 IDA Pro 打开二进制文件时,他们可以显示字符串。喜欢

但在吉德拉

我只想知道如何更改 ghidra 中的配置。像这样

0 投票
0 回答
79 浏览

c - fread get 存储在堆栈中的什么位置?

我有一个小小的疑问,我正在做一个只为我提供 ELF 文件的 ctf。我已经能够使用 Ghidra 对其进行反编译,但问题是:在某个时候我读到:( fread(flag,0x400,1,__stream); 之前有:__stream = fopen("./flag","rb");

1)我认为 fread 中的“标志”是 fread 存储从 flag.txt 读取的“__stream”的位置,但它之前从未声明过(我指的是 fread 中的“标志”),是吗实际上是我期望的缓冲区?如果是,则读取的值存储在内存中的哪里(那么这个缓冲区存储在哪里?在堆栈中?)

2) fread 具有 0x400 维度值和 1 作为要读取的元素数是否正常?

提前感谢大家!

0 投票
2 回答
4098 浏览

pdb - Ghidra:找不到 PDB 并且找不到类型信息结构

我大约一周前下载了 Ghidra(我是逆向工程的新手),我做了 Ghidra 官方网站上的教程视频所显示的内容,我在 Visual Studio 中制作了一个简单的 C++ 程序,该程序有一个无穷大的 while( while(1)) 打印“你好世界!” 到屏幕(std::cout << "Hello World!";)。正如教程中的人所做的那样,我使用 Ghidra 来反汇编该程序,但我遇到了错误。

错误:

我看到了“README_PDB.html”,我按照它所说的去做了,但仍然有错误,所有的错误,都在那里。

一段时间后,我发现我.exe存储的文件夹还有一个 [name of my exe].pdb 文件,当你选择分析器时,有一个分析器“PDB”,如果你点击它,你会插入一个路径,试图插入该 .pdb 的父文件夹的路径,但仍然没有任何改变。

所以: 我怎样才能使这项工作,请任何人,我很绝望

0 投票
0 回答
2302 浏览

reverse-engineering - 在 ghidra 中查看内存地址的内容

对于大学的一门课程,我正在尝试使用 ghidra 静态分析二进制文件。在反编译的代码中,我有一行像local_78 = 0x50999c39eefe455c;

我需要知道该局部变量的内容 / 0x50999c39eefe455c 指向的位置,但是当我尝试访问它时,我收到一条错误消息“在程序内存中找不到地址”。

知道怎么做吗?

0 投票
1 回答
626 浏览

c - 我需要帮助弄清楚这段 C 代码的作用

我从 Ghidra 那里得到了这段 C 代码片段,但我不太明白它在做什么。我怀疑某种根,也许?

传入的两个 args 是平方和(有时是 2 有时是 3 个项)和一个额外的值,例如 0x18、0x10 或 0(有时这个 arg 不存在!)

0 投票
0 回答
3276 浏览

bios - 绕过联想 BIOS 白名单

我有一个只允许安装某些硬件的联想 Thinkpad。如果连接的硬件不在白名单上,BIOS 会告诉您删除它并重新启动。否则机器将无法启动。现在我想安装一个未经授权的wifi+蓝牙模块,所以我需要摆脱那个白名单。

我一直在关注本指南,直到作者建议使用 IDA pro 软件,我不想仅仅为了这个黑客而购买它。

相反,我在 Ghidra 中对提取的主体进行了一些尝试,并设法找到了“检测到未经授权的网卡 ...”字符串的十六进制代码,并发现该字符串是某个名为“ DAT_000104d0",并且该实体被引用的唯一地方是以下函数:

依次从这里调用该函数:

关于我应该如何进行的任何想法,希望不会弄乱整个事情?

我已经在这里上传了完整的 bios img 和提取的身体,如果有人想看看的话。


编辑:我通过谷歌搜索使用了一种解决方法,最终找到了我实验性使用的提取主体的修改版本,并且它有效。我用谷歌搜索的是(我认为)BIOS 那部分的名称。在中型指南的示例中,它将是 11D37... 但是,对于您的设备,这个数字会有所不同,我不能保证您的设备会有这样的文件,或者它会起作用。只需确保在多个位置多次备份您的原始 BIOS,这样您就可以再次刷新它。

0 投票
1 回答
68 浏览

java - Java:ArrayList.clear 从传递给 Map 的 ArrayList 中删除元素

这是我多年来第一次编写 Java 代码,我正在编写一个 Ghidra 脚本,该脚本将系统调用符号映射到它们的调用函数。

我的问题是我想清除“funcs”列表,以便我可以再次使用空列表进行下一次迭代。由于某种未知原因,这也会导致我的 HashMap 中的函数列表为空。如果我在这里打印我的 HashMap:

我只是得到输出:

但是,当我删除 funcs.clear() 时,我得到:

不过应该是这样的:

我有两个系统符号,因为它是 thunked。