问题标签 [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++ - 使用指针从dll调用函数不起作用
我制作了一个测试程序并制作了一个只打印一些文本的函数,我试图通过使用 IDA/Ghidra 反转它并获取指向它的指针来从 DLL 调用它。
我以为 IDA 提供了错误的地址,所以我与 Ghidra 核对了一下,我得到了相同的地址......
这是我从 DLL 调用函数的代码
程序打印“开始...”和“得到功能!” 但不调用原始函数。
我已经尝试查看几个帖子,但我无法弄清楚我做错了什么,因为其他人做了类似的事情并且对他们有用。
更新:正如有人建议的那样,我尝试将基地址添加到函数指针,但是我得到了相同的结果。
这是我尝试过的:
它正确地获取了基地址(或者至少我认为是,因为它不为空),但它没有执行 ofunct 并打印“完成!”。
c - Ghidra 使用像“._0_4_”这样的奇怪字段名称来表示 C 反编译中的非默认访问大小
我一直在使用 Ghidra 反编译一些最初为 ARMv7 编译的 .o 库文件,为此我有一些函数和结构的头文件。
假设一个结构有几个单字节“char”成员:
如果汇编代码(可能是在构建时通过编译器优化)正在走捷径并一次访问整个 32 位字的字符,那么反编译的 C 代码将表示为:
第一个数字 (0) 是要开始的字节的偏移量,第二个数字 (4) 是正在访问的字节数。
但是,据我所知,这是非标准的,不会重新编译 - 至少在 GCC 中不会,而且我在任何地方都找不到对该表示法的任何引用。
有什么办法可以将 Ghidra 设置为生成实际上有效的反编译代码 - 即
c++ - Visual C++ 6.0 WholeArchive
我正在对使用 Microsoft Visual C++ 6.0 编译的旧计算机程序进行逆向工程。我想让 Ghidra 识别静态链接的 CRT 库中的所有函数。
我尝试编译一个使用 fopen 的简单程序并将其提供给 Ghidra 的函数 ID,它成功地识别了原始可执行文件中的 fopen。现在我希望它能够识别更多功能,但我不想在我的程序中编写所有这些功能。
有没有办法强制 MSVC++ 6.0 包含所有静态链接的符号?(类似于 Visual Studio 2015+ 中的 /WHOLEARCHIVE)
c++ - 我怎样才能像 ida pro 一样设置 Ghidra?
我正在使用 Ghidra。我有个问题。当我打开二进制 IDA pro 时,代码非常好分析。这是 IDA pro 反编译代码
这是 Ghidra 相同的部分。
问题是当我用 IDA Pro 打开二进制文件时,他们可以显示字符串。喜欢
但在吉德拉
我只想知道如何更改 ghidra 中的配置。像这样
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 作为要读取的元素数是否正常?
提前感谢大家!
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 的父文件夹的路径,但仍然没有任何改变。
所以: 我怎样才能使这项工作,请任何人,我很绝望
reverse-engineering - 在 ghidra 中查看内存地址的内容
对于大学的一门课程,我正在尝试使用 ghidra 静态分析二进制文件。在反编译的代码中,我有一行像local_78 = 0x50999c39eefe455c;
我需要知道该局部变量的内容 / 0x50999c39eefe455c 指向的位置,但是当我尝试访问它时,我收到一条错误消息“在程序内存中找不到地址”。
知道怎么做吗?
c - 我需要帮助弄清楚这段 C 代码的作用
我从 Ghidra 那里得到了这段 C 代码片段,但我不太明白它在做什么。我怀疑某种根,也许?
传入的两个 args 是平方和(有时是 2 有时是 3 个项)和一个额外的值,例如 0x18、0x10 或 0(有时这个 arg 不存在!)
bios - 绕过联想 BIOS 白名单
我有一个只允许安装某些硬件的联想 Thinkpad。如果连接的硬件不在白名单上,BIOS 会告诉您删除它并重新启动。否则机器将无法启动。现在我想安装一个未经授权的wifi+蓝牙模块,所以我需要摆脱那个白名单。
我一直在关注本指南,直到作者建议使用 IDA pro 软件,我不想仅仅为了这个黑客而购买它。
相反,我在 Ghidra 中对提取的主体进行了一些尝试,并设法找到了“检测到未经授权的网卡 ...”字符串的十六进制代码,并发现该字符串是某个名为“ DAT_000104d0",并且该实体被引用的唯一地方是以下函数:
依次从这里调用该函数:
关于我应该如何进行的任何想法,希望不会弄乱整个事情?
我已经在这里上传了完整的 bios img 和提取的身体,如果有人想看看的话。
编辑:我通过谷歌搜索使用了一种解决方法,最终找到了我实验性使用的提取主体的修改版本,并且它有效。我用谷歌搜索的是(我认为)BIOS 那部分的名称。在中型指南的示例中,它将是 11D37... 但是,对于您的设备,这个数字会有所不同,我不能保证您的设备会有这样的文件,或者它会起作用。只需确保在多个位置多次备份您的原始 BIOS,这样您就可以再次刷新它。
java - Java:ArrayList.clear 从传递给 Map 的 ArrayList 中删除元素
这是我多年来第一次编写 Java 代码,我正在编写一个 Ghidra 脚本,该脚本将系统调用符号映射到它们的调用函数。
我的问题是我想清除“funcs”列表,以便我可以再次使用空列表进行下一次迭代。由于某种未知原因,这也会导致我的 HashMap 中的函数列表为空。如果我在这里打印我的 HashMap:
我只是得到输出:
但是,当我删除 funcs.clear() 时,我得到:
不过应该是这样的:
我有两个系统符号,因为它是 thunked。