在C语言中,联合体是一种类似于结构体的类型,但其所有成员(可能是不同类型)共享同一块内存,彼此重叠。它们被用于需要以不同方式解释相同数据的场合,或者在存储不同类型的数据时节省内存(这在脚本引擎等中很常...
IDA 技巧(71) 反编译为调用
尽管 Hex-Rays 反编译器最初是为处理编译器生成的代码而编写的,但它在处理手写汇编时也能表现得不错。然而,这类代码可能会使用非标准指令或以非标准方式使用它们,这种情况下,反编译器可能无法生成等效...
修复反编译器中的错误地址引用
最近常常遇到一个反编译的问题,当反编译没有高级元数据的代码(尤其是固件)时,你可能会看到看起来很奇怪的地址表达式(如上),这些表达式似乎没什么意义。这些是什么/如何修复/改进伪代码?因为在CPU级别上...
IDA 技巧(67) 反编译器辅助工具
我们之前已经描述过自定义类型在反编译代码中的使用,但你可能还会遇到一些类似函数调用的不寻常关键字。它们被反编译器用来表示无法映射到优雅C代码的操作,或者只是为了使输出更紧凑。它们列在反编译器提供的de...
IDA 技巧(66) 反编译器注释
当你在反编译器中处理伪代码时,可能会注意到变量声明和提示中有一些内容略显神秘的注释。那么它们是什么意思呢?Image虽然有些注释的含义显而易见,但有些则不那么明显,还有一些仅在罕见情况下出现。变量位置...
IDA 技巧(60) IDA 的类型库
类型库是为特定平台和编译器收集的高层次类型信息的集合体,可供IDA和反编译器使用。类型库可能包含:函数原型,例如:void *__cdecl memcpy(void *, const void *Sr...
IDA 9.0 发布:逆向工程领域迎来重大的新功能
IDA的许可机制经历了重大变革,现在许可证不再受平台限制,可以在Windows、Linux和macOS之间通用。多种反编译器包可供选择,其中包括新的IDA Home RISCV,取代了已退役的IDA ...
用ghidra中的列表修补程序中的bug
有了完整的多架构反编译器,很容易理解为什么我的许多学生会直接跳过列表视图,使用反编译器插件。反编译器中的类 C 代码对大多数人来说比列表视图中更神秘的汇编指令更加熟悉。然而,一名强大的逆向工程师必须在...
IDA 技巧(45) 反编译器生成的数据类型
反编译器生成的数据类型在之前的一篇文章中,我们讨论了如何编辑伪代码中使用的函数和变量的类型。在大多数情况下,您可以使用标准 C 类型: char、int 、long 等等。但是,在某些情况下,您可能需...
IDA 技巧(42) 反编译器中的注释
注释当您无法为变量或函数想出一个好的名称时,您可以添加注释,并对所发生的情况进行解释或理论。伪代码中提供了以下注释类型:普通行注释:使用 / 添加或编辑它们(很容易记住, C++ 中 // 用于注释)...
IDA 技巧(42) 反编译中的重命名与类型修复
之前我们介绍了如何开始使用反编译器,但未经修改的反编译器输出并不总是易于阅读,特别是在二进制文件没有符号或调试信息的情况下。然而,只需进行一些小的修改,您就可以显着改善结果。让我们看一下伪代码视图中可...
IDA 技巧(40) 反编译器基础知识
Hex-Rays 反编译器是 IDA 可用的最强大的附加组件之一。虽然一旦习惯了它就非常直观,但如何开始使用它可能并不容易。 基础信息 当前 IDA 支持的反编译器 x86 (32-bit) x64 ...