IDA 8.3 功能亮点
IDA64 支持 (32-位) .idb 文件
我们已进一步开发了 IDA64,这样它便能在各种情形下完全取代遗留的 32 位 IDA 了。 为了简化迁移,我们新增了一个功能来将遗留的 .idb 数据库转换成 .i64 数据库(代号为 CVT64)。
现在已考虑弃用 32-位 IDA,可能在某个时候就下架了。
UX 改进
已改进了 UI 在某些战略方面的性能。例如,由于“函数”窗口(无论是否过滤)导致“Dyld 共享缓存”的自动分析较慢,已成为过去时。

IDA 8.0 功能亮点
像往常一样,IDA 已在许多方面进行了改进,但这次最重要的特性在于——引入了全新的 IDA Teams。
IDA Teams 登场了!
我们一直在努力为我们的新产品画龙点睛:这套整合的工具,可在 [逆向] 工程师团队之间实现无缝协作。
受现有最佳版本控制工具的启发,IDA Teams 将其关键概念引入 IDA 数据库和工作流程:
- 版本控制
- 更改属性
- 差异与合并
我们感到非常自豪和兴奋!对于 IDA Teams 可以完成的工作,希望您能够欣赏它的潜力。 但我们不会止步于此:我们已对下一版本有了很棒的想法!

iOS 16 dyld 共享缓存支持
Apple 再次修改了其移动操作系统上系统文件的内部格式,以便提高性能和内存使用率,因此我们也相应更 新了 IDA 来支持新的调整。

概述函数(outlined functions)
Google 的 Go 语言(又名 golang)因其易用性、高性能、以及无需依赖项的自包含二进制文件特性而变得非常流行。由于某些语言设计人员的决定,golang 二进制文件与其他编译器生成的二进制文件完全不同,因此 IDA 需要进行一些变更来正确支持其特性。
以下是 IDA 7.5 中针对 ARM 的被剥离 golang 二进制代码的示例:

在初始的伪代码中,我们可以看到对编译器生成的 _OUTLINED_FUNCTION_NN 片段进行了显式调用, 一些变量也被标记为橙色,因为反编译器认为它们被这些调用给破坏了(调用常规函数就是这种情况)。
在用“outline”属性标记这些伪函数并刷新伪代码后,该反编译器内联(inline)了所有内容,并且不再有橙色 变量:

Golang 1.18
该语言的新版本对元数据的布局进行了更改。新的 IDA 版本可以解析它,并很好地恢复函数名称。
例如,下图是在 IDA 7.7 中剔除(stripped)的 golang 1.18 二进制文件:

下图是相同的二进制文件在 IDA 8.0 中的显示情况:

ARC 反编译器
ARC 处理器用于许多嵌入式设备,例如 SSD 驱动器或 Wi-Fi 芯片组。 直到几年前,它还是声名狼藉的 Intel ME 中使用的核心。新的反编译器支持 IDA 当前支持的所有 ARC 指令集变体:经典的 32 位 ISA、32/16 位 ARCompact 和新的 ARCv2。此外,它提供针对延迟槽(delay slots)、条件指令和零耗循环(zerooverhead loops)的开箱即用式支持。

不再支持 Python 2
自结束对于 Python 2.7 的支持以来,已经过了两年多时间,是时候放手了。IDA 8.0 将仅支持 Python 3.x, 包括最新的 3.10(Windows 安装程序包括 Python 3.10.5)。
借助函数查找器插件 (patfind),可以更好地分析固件
通常,固件二进制文件没有任何符号或其他元数据来帮助 IDA 在未标记的加载数据中查找代码,因此用户必须 手动完成。在新版本中,我们新增了一个插件,可以使用在 Ghidra 中使用的模式格式(带有少量扩展)。为 二进制文件和类似二进制的格式默认启用该插件,并帮助 IDA 自动发现更多代码。此外,也能为常规的结构化 文件手动调用它来查找其他未引用的代码。

使用默认设置进行初始的自动分析后发现的函数数量比较:
文件类型 | IDA 7.7 | IDA 8.0 |
---|---|---|
Cortex M0 firmware (8KB) | 0 | 59 |
ARM9 firmware (23KB) | 0 | 97 |
ARM11 firmware (300KB) | 84 | 1697 |
PowerPC firmware (2MB) | 0 | 2223 |
FLAIR 模式生成器(makepat)
向所有 IDA Pro 客户提供的 FLAIR 工具包允许用户从静态库创建 FLIRT 签名。然而,这样的库并非始终可 用,有时您拥有的只是最终链接的二进制文件。makepat 插件支持为任意 IDA 数据库中的函数创建 .pat 文件。 它使用为 Lumina 添加的功能来标记模式中的可变字节。然后可以使用 sigmake 将 .pat 编译为签名文件,并 应用于其他文件。
