文章总结: IDA9.5Beta发布,新增Dalvik、TriCore、Hexagon三大反编译器,支持C位域原生反编译,重写AVX/SSE处理管线,引入Applekernelcache加载器、逐字名称与FLIRT2.0,并改进switch-case恢复。附加组件与核心版本解耦,可独立更新。该版本显著提升逆向工程效率与准确性。 综合评分: 85 文章分类: 产品介绍,逆向分析,安全工具
IDA 9.5 Beta 发布:三大新反编译器、位域支持、Apple 内核缓存与 FLIRT 2.0
原创
利刃信安 利刃信安
利刃信安
2026年10月4日 04:30 北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
IDA 9.5 Beta 发布:三大新反编译器、位域支持、Apple 内核缓存与 FLIRT 2.0
Hex-Rays 正式放出了 IDA 9.5 Beta。这是一个分量很足的版本:新增 Dalvik、TriCore、Hexagon 三个反编译器,为 C 位域提供原生反编译支持,重写了 AVX/SSE 处理管线,引入 Apple kernelcache 加载器、逐字(verbatim)名称、FLIRT 2.0,以及更聪明的 switch-case 恢复和递归式 “Create C file” 导出。
与此同时,从 9.5 开始,Malware Analysis、Teams、Lumina、Assist 和 IDA MCP 等附加组件与 IDA 核心版本解耦,各自独立版本化、独立发布,修复与新能力不再需要等待下一个 IDA 大版本,可直接就地更新到已安装的 IDA 上。
一、三大新反编译器
1. Dalvik 反编译器
IDA 现在可以把 Android DEX 字节码反编译成 Java 伪代码。它建立在 DEX 文件的类型化模型之上——类、字段、方法、参数都是真实、可重命名、可改类型的实体,改动任意一个都会贯穿到伪代码中。
- • 新增类视图(class view),列出程序的类及每个声明中的字段与方法,提供伪代码提示和 “Move function to folder”;
Ctrl+Shift+F6或在类树中Ctrl+双击可打开新的类视图。 - • 多 dex 应用中,一次调用能到达另一个 dex 文件里的方法体;虚调用还会引用子类中的覆写实现。
- • 从 DEX 异常表重建
try/catch块;使用优化字节码(odex)的方法同样可以反编译。 - • 尽可能恢复被混淆的名称:Kotlin metadata、序列化注解、DEX 调试信息。
- • 输出更接近源码:字符串拼接显示为
"a" + b(而不是StringBuilder.append()链);嵌套类打印为Outer.Inner;显示泛型、注解@Foo(...)和匿名类new Type() { ... };方法参数按 DEX 注解命名。 - •
try/catch/finally通过支配性分析重建,支持嵌套块、catch-all 处理器、以return/goto结尾的finally,以及多出口的synchronized块。
对脚本和插件而言,新增了语言无关的类 API(get_classes()、get_class_info()、render_class()、render_member(),C++ 与 IDAPython 均可用),Dalvik 是它的第一个后端。
局限:暂不支持重建 try-with-resources(输出更长但正确),且输出的是 Java 而非 Kotlin。
2. TriCore 反编译器
针对 Infineon TriCore,新插件 hextricore 可反编译 TriCore 代码,支持 eabi 与 Tasking 两套 ABI 族。
3. Hexagon 反编译器
针对 Qualcomm Hexagon(QDSP6),新插件 hexqdsp6 可反编译 DSP 代码。它能对包(packet)语义建模——并行读、.new 值、谓词执行——并处理硬件循环、复合分支、跳转表、浮点和标量 SIMD 指令;HVX 向量与系统指令以 intrinsics 形式呈现。
- • 包内每条指令读取的都是包开始时的寄存器值,
.new/.cur操作数可见包自身的结果,谓词指令会转成条件块。 - • 识别变参函数。
- • intrinsics 使用 clang 的
__builtin_HEXAGON_*命名,语义可在hexagon_protos.h中查证。 - • HVX 向量(
V0–V31、Q0–Q3)被建模为向量寄存器。
二、反编译器支持位域
访问 C 位域成员 时,不再显示成移位与掩码运算,而是显示为成员访问:
- •
(*(_DWORD *)&s >> 3) & 7读作s.field - •
*p = *p & 0xFFFFFF07 | (v << 3) & 0xF8读作p->field = v(前提是类型被正确定义并应用)
它覆盖反编译器支持的所有架构,包括 ARM64、PPC、MIPS、RISC-V 专用的 extract/insert 指令。该功能默认开启,可在 Edit > Plugins > Hex-Rays Decompiler Options > Options 2 中用 “Decompile bitfield accesses” 关闭。
下面这个 MSVC 的 xor 开关写法很能说明问题:
struct s4 { unsigned a : 4; unsigned b : 4; unsigned rest : 24; };
void inc_a(struct s4 *p) { p->a++; }
// 9.4
*(_DWORD *)p ^= ((unsigned __int8)*(_DWORD *)p ^ (unsigned __int8)(*(_DWORD *)p + 1)) & 0xF;
// 9.5
++p->a;
更多可识别形态:
// 9.4
if ( ControlPc >= ((*((_DWORD *)v1 + 1) >> 6) & 0xFFFFFC) + v1->FuncStart )
if ( (v16 & 0xC0000000) == 0x80000000 )
if ( *((int *)this->m_pDevice + 5442) < 0 )
// 9.5
if ( ControlPc >= 4 * v7->FuncLen + v7->FuncStart )
if ( FunctionEntry->Flags == 2 )
if ( this->m_pDevice->m_TimingCaptureActive != 0 )
位分配顺序默认与字节序方向一致,但可针对特定类型翻转。Xbox 360 二进制中这种情况很常见(GPU 寄存器或继承自 Windows 内核的结构使用小端位域顺序),此时可用 #pragma bitfield_order(lsb_to_msb) 或 __invbf 标注。当存在带完整类型信息的 PDB 时,会据此自动检测位序。
三、SSE/AVX/AVX2/AVX-512 全面增强
过去 AVX 代码常常反编译成一堆 __asm 块。新插件 avxlifter 把 AVX、AVX2、AVX-512(F/CD/BW/DQ/VBMI/VNNI/BF16/FP16/VL)以及 VMX 指令转成原生微码,让反编译器能够推理它们;否则也转成作用于 __m128/__m256/__m512 的 _mm*_… intrinsics,包括掩码 EVEX merge/zero 形式、gather/scatter、compress/expand 和 opmask k 寄存器。
- • packed and/or/xor/andnot 变成 C 运算符,符号翻转与绝对值掩码读作
a ^ signmask、a & absmask,vxorpd x, x, x就是0.0。 - • 标量 FMA 与 min/max 变成 C 数学函数(
fminf、fmaxf),不再是_mm_*_ssintrinsics。 - • 无副作用的 intrinsics 被标记为 pure,死向量计算会被消除。
- • XMM、YMM、ZMM 被建模为同一寄存器的不同视图,legacy-SSE 写入会保留高位;不再出现虚假的未定义 YMM 变量。
- • 向量 union 新增
__int128成员,去掉了*(_OWORD *)强制转换。 - • SIMD 加载/存储、
memcpy/memmove和结构体拷贝都是普通赋值,不再残留_mm_loadu_si128/_mm256_storeu_ps。 - • 用
movups/movsd/mov/movzx逐段拷贝的字符串字面量(含 UTF-16 和 MSVC 混合宽度拷贝)被识别——这属于分析而非 lifting,因此不装插件也生效。 - • 对齐帧指针的函数(
and rbp, -32,AVX 代码典型写法)重新拥有栈变量,而不是&v3 & 0xFFFFFFFFFFFFFFE0。
四、Apple Kernel Cache 加载器
IDA 9.5 对 Apple kernelcache 做的事,正如 9.4 对 dyld shared cache 所做:kernelcache 是一组 KEXT 的集合,IDA 现在把它当作一个整体处理,而不是单个巨大的 Mach-O。一个链接后的 kernelcache(系统或辅助)会与它引用的 boot KC 一起作为连贯集合处理:单一布局,符号与引用跨链接解析。
- • KC Index 部件列出当前集合中的所有 KEXT,可按来源过滤,并按需映射——内核优先,其余在访问时映射。
- • 从
OSMetaClass重建 C++ 运行时——类层次、带完整签名的虚方法、metaclass vtables——并按缓存 OS 版本匹配的 XNU 类型库为OSDynamicCast结果、kalloc_type描述符和类型化分配赋予类型。 - • Locate > Symbol / String / Address 直接从文件搜索整个缓存,因此你从未加载过的 KEXT 也能像其他 KEXT 一样被搜索;在被完全 strip、没有任何符号表的缓存上,字符串搜索依然有效。
- • Functions 列表中每个 KEXT 或缓存镜像一个文件夹,按 bundle id(
com/apple/iokit/...)嵌套;kcu.cfg/dscu.cfg中的FUNC_FOLDER_FORMAT控制布局,设为""则保持扁平。 - • 附带示例插件可将某个 KEXT 或 dyld 缓存镜像提取为独立 Mach-O(KC/DSC Index 中的 “Extract Mach-O image to file…”,
Ctrl+Alt+Shift+M)。结果可分析但不可运行,因为它不含 rebase/bind 信息。
五、逐字函数名与类型名
现代语言(Rust、Go、Swift、重度模板化的 C++)用 C 标识符非法的字符命名。IDA 不再把它们篡改成 ASCII 安全形式:符号名、类型名、成员名现在按原样保留,来自符号表、demangler 和调试信息即是如此。
// 9.4
__core::fmt::ArgumentV1_
struct mut_ref_dyn_core::fmt::Write
// 9.5
&[core::fmt::ArgumentV1]
struct &mut dyn core::fmt::Write
- • 新数据库默认显示 demangled 名称。
- •
A::B::C这类限定名在反汇编、伪代码和打印原型中都会作为整体高亮、选中和交叉引用。 - • FLIRT 签名可携带原始(未改编)名称,Go/Rust/Swift 命名全程保留。
- • 非 C 类型名与成员名可经由 Edit-type 对话框忠实往返。
- • 经典行为可按数据库通过
GarbleNames策略保留(在数据库创建时固定);已有数据库保持现状。
迁移提示:该策略在数据库创建时固定。9.5 之前创建的数据库仍会篡改名称,因此在既有脚本下名称不会发生变化。
六、FLIRT 2.0
经典 FLIRT 依靠字节识别库函数,但函数内部调用的目标会被链接器重定位,FLIRT 只能把这些字节当作通配符,也就丢掉了它们指向谁——一个自身没有可靠特征的 helper 便始终无名。
FLIRT 2.0 签名(v11 格式)额外记录每个库模块引用了什么。 一旦 library_function 被匹配、它的调用落到了某个地址,IDA 就知道那里的函数是 hidden_helper。自动分析之后,一个延迟 pass 会为这类由已识别代码到达的函数命名,并用同样的证据在字节完全相同的候选中做出选择。
在一个 strip 过的静态链接 sqlite3 上,正确命名的函数数量对比:
| Runtime | 9.4 | 9.5 | | — | — | — | | glibc amd64 | 1279 | 1846 | | glibc i386 | 1424 | 1826 | | glibc arm64 | 1434 | 1815 | | glibc armhf | 776 | 1204 | | glibc riscv64 | 288 | 933 | | glibc s390x | 1398 | 1739 | | MSVC /MT x64 | 565 | 698 | | MSVC /MT x86 | 458 | 561 | | MSVC /MT arm64 | 0 | 753 | | MSVC /MT arm | 0 | 622 |
- • 识别 32 位 VC 14.39–14.52 二进制,ARM/ARM64 MSVC 运行时签名覆盖 VC11 至 VC 14.52。
- •
main/wmain与WinMain/wWinMain依据二进制中的证据区分;startup 签名会命名其 entry module 引用的函数与数据。 - • 签名可携带原始未改编名称:Go 运行时签名保留
runtime.(*mheap).alloc(旧的改编版以*_legacy.sig形式随附)。 - • 签名加载更快(批量缓冲读取)。
迁移提示:sigmake 现在总是写 v11。IDA 9.5 能读取旧
.sig,但 IDA 9.4 及更早版本会拒绝 v11,因此用 9.5 FLAIR 工具构建的签名无法在 9.4 中加载。
七、更精确的 switch-case 恢复
- • 被编译器拆成二分查找分派的 switch 会被重新拼合:嵌套在相等/范围守卫下的 switch 合并进父级,被这类守卫隔开的两个 switch 合二为一。
- • 建立在 pivot 相减选择子(
switch (x - C))上的跳转表会被重基到原始值,从而恢复真实的 case 标签。 - • 更好地从 if 链恢复 switch,包括 case 会 fall-through 的分派树,以及从外层循环离开的 getopt 风格树。
- • case 按值排序,共享主体的 case 合并,仅跳入另一 case 的 case 折入其中。
共享 case 尾部现在以 fall-through 呈现:
// 9.4 // 9.5
case0u: case0u:
result = 1; result = 1;
goto LABEL_3; case1u:
case1u: ++result;
LABEL_3: case2u:
++result; ++result;
goto LABEL_4; case3u:
case2u: ++result;
LABEL_4: break;
++result;
...
在 x86、ARM、MIPS、RISC-V、PPC、ARC、V850 和 Dalvik 等所有架构上,反编译器现在用自己对微码的数据流分析来查找跳转表,而不再复用反汇编器的 switch 信息。反汇编器漏掉的 switch(“switch analysis failed”)得以恢复,重复的 switch 被合并,许多以前反编译错误的现在正确了:
// 9.4
if ( v67 <= 8 )
switch ( (unsigned int)(a3 + 7) >> 3 ) { ... }
// 9.5
switch ( v67 ) { ... }
八、递归式 “Create C file”
File > Produce file > Create C file…(Ctrl+F5)现在在 “All functions”(或选中项)之外新增了 “Current function and its callees recursively”。被调用者会先被反编译,自叶子向上,因此每个函数都在它调用的函数之后处理,恢复出的原型会改善调用者的伪代码。
- • 会沿
.plt与 stub thunk 跟进到真实函数;跳过导入;根函数始终包含,仅对其被调用者过滤。 - • 对话框提供 “Skip debugger segments”、“Skip library functions”(默认开启)和 “Decompile to cache only”(不写文件,仅报告反编译了多少函数);选项在会话间记忆。
九、上层语言支持
反汇编器恢复 Swift 字符串
Swift 编译器把字符串表示为两个 64 位立即数:小字符串直接内嵌,大字符串字面量是带标签指针,指向前方固定偏移处。IDA 9.5 内建了这套解码逻辑,解码 Swift 字符串**并把它们加入 String 窗口(Shift-F12)**便于引用,背后由新的 Synthetic Strings API 支撑,插件也可使用。
IDA 9.4:
0220EA6B40 MOV X9, #0xEC000000203A6576
IDA 9.5:
0220EA6B40 MOV X9, #isImmortal OR isASCII OR isSmall OR smallCount12 OR 0x203A6576 ; "allowsSave: "
加载元数据损坏/混淆的 Go 二进制
- • 即使 pclntab 的 magic 被覆盖、节被 strip 或改名、或嵌入到其他段中,也能找到它。
- • 在没有任何 build string 残留时恢复 Go 版本。
- • 在 garble 混淆的二进制中恢复函数与名称。
- • 支持 Go 1.27 二进制。
ARM[64]/MIPS/PPC/RISC-V 上的 Rust ABI
9.4 为 x86 引入的 CM_CC_RUST 现已实现于 ARM64、32 位 ARM、MIPS(o32/n64)、PowerPC(32/64 位)和 RISC-V(32/64 位),这些目标上的 Rust 二进制会获得真实的参数与返回值而非猜测值。此外:字符串字面量出现在伪代码中、字符串切片类型命名为 &str;panic/abort helper 被识别为不返回;解析 Rust 异常处理表;无 DWARF 也能识别 Rust 二进制(即使 strip),函数默认使用 __rust 调用约定而非 __fastcall。
十、反编译器其他改进
- • 跳转到函数指针结构体成员:在伪代码中对被调用的函数指针成员按 Enter 或双击,现在跳转到该成员所指的函数,而非成员声明。对象可以是全局变量、常量索引的数组元素、其他结构/ union 的成员,或它们的链式组合,例如
g_dev.ops.call()、g_tab[1].call()。 - • 寄存器变量也能 “Split variable”:拆分/合并变量现在同样作用于寄存器变量,而不再仅限栈变量。
- • 新增 “Create scattered pair” 操作:32 位目标上一个 64 位值可能拆在不被单一存储位置描述的寄存器对中(如
r2/r1反序、r3+r12非相邻、或寄存器+栈槽)。有证据的对会自动合并为一个 scattered 变量,命令可覆盖自动识别刻意不处理的情形。 - • 更好的 x87 FPU 栈处理:当被调用者被标注为返回
void或整数、实际却在 x87 栈上留下值时,不再放弃恢复,而是以“未固定”方式重试,并修正被调用者返回类型。 - • 合并的结构体字段被拆开:编译器用一次宽操作初始化或比较多个相邻字段时,只要成员恰好铺满访问范围,就会被还原为逐个成员。
- • strip 后的 Swift 二进制也能正确反编译:即使没有原型,也会恢复 Swift 调用约定与错误处理,错误结果以
__swift_get_error()呈现。 - • 大量输出质量改进:
x ^ ~x简化为-1、x & ~x简化为0;无符号变量中的裸常量按无符号显示(0x80070057而非-2147024809);sizeof()/offsetof()提示显示数值;更多memcpy(含通过指针的)变成普通拷贝。 - • 修复了大量 INTERR 内部错误,覆盖 x86/x64、ARM、ARM64、PowerPC、MIPS、V850 等。
十一、反汇编器
跨循环与栈变量跟踪寄存器值
固件和 C 运行时经常在循环中调用函数指针数组(__libc_init_array、.init_array、__libc_freeres、驱动表等)。这些间接调用过去没有交叉引用,整个子系统都不可见。IDA 现在能跟踪循环中以常量步长变化的寄存器,数组中的每个函数都会获得调用 xref;在一个 MIPS gzip uImage 中此举发现了 18 个新函数。
ARC:跳转表、millicode 识别等
bi/bih 跳转表被恢复为 switch,识别 ARCtangent-A4 的间接调用惯用法;处理 MetaWare 编译器的 out-of-line millicode helper,恢复其变参函数参数;大量指令(enter_s/leave_s、乘法、条件设置、除法、bmskn、min/max)不再以 __asm 形式残留。
其他架构与平台
- • ARM:解码更多 Armv9 扩展(FEAT_LUT、FEAT_CMPBR、FEAT_CPA、FEAT_LSUI、FEAT_FPRCVT、FEAT_MOPS、FEAT_FCMA、FEAT_SPECRES2)。
- • Hexagon:解析 GP-relative(小数据)访问;ELF 加载器按 ABI 计算 GOT/GOTREL 重定位、处理 TLS 重定位。
- • MIPS R6:反汇编器与反编译器全面支持,包括新编码、compact 分支/跳转、select 与 FP 比较。
- • 游戏主机:PlayStation 3(64 位 PowerPC + 32 位指针 ILP32)、Xbox 360 / Green Hills(Wii U,命名 out-of-line 寄存器存取 helper)、PlayStation Portable(Allegrex,新增默认开启的
single_floatABI 选项、支持 packed PRX 重定位);PPC 上 AltiVec/VMX128 向量指令以 Xbox 360 XDK 命名的 intrinsics 呈现。 - • 新增 WebAssembly 加载器与反汇编器:支持到 WebAssembly 3.0,涵盖 SIMD(含 relaxed SIMD)、atomics、bulk memory、引用类型、GC、异常、尾调用与多值块;栈代码折叠为可读操作数(
local.get A; local.get B; i32.add读作i32.add A, B);每个线性内存成为独立段,常量地址成为数据交叉引用。
十二、分析与内核
- • 异常处理:正确的栈层级与健壮的 try 块。landing pad 由 unwinder 进入而非其前面的代码,过去 IDA 却从前一条指令取栈指针层级,导致其后的所有栈变量都偏移。修复位于内核,覆盖 ARM、MIPS、PPC、RISC-V、SH4、Hexagon、NDS32 和 TriCore 等所有让内核计算块层级的处理器模块。
- • 一个畸形的 try 块不再让同一范围内的其他块全部失效;超出程序末尾的块也不再遮蔽后面的块。
- • 新增
OVERSIZED_FUNC_SIZE选项(ida.cfg,默认 0/关闭),可把过大的函数标记为 oversized,保护 IDA 免遭“用超大函数拖慢分析”的二进制。 - • 新增
JUMPTABLE_MAX_INSNS选项,限制单个 switch 模式匹配的工作量,使混淆代码无法用一个 switch 卡住分析。
十三、UEFI 插件与加载器
IDA 9.5 附带全新的 UEFI 插件与加载器(本版本主要聚焦 DXE 环境,后续 beta/正式版会继续打磨)。整份 UEFI 固件镜像(SPI flash dump、capsule body 或 firmware volume)可加载进单个数据库。该插件在自动分析后运行,添加名称与类型,使已知协议调用反编译为可读代码:
gBS->LocateProtocol(&gEfiPcdProtocolGuid, NULL, (void **)&gEfiPcdProtocol);
gEfiPcdProtocol->GetBool(1068);
- • 入口点按模块命名,并按 FFS 文件类型赋予类型;固件镜像中函数按模块分组到文件夹。
- • 自动发现并类型化指向服务表的全局变量:
gBS、gRT、gST、gSmst、gImageHandle。 - • 发现协议 install/locate/notify;GUID、接口指针与实现被类型化和命名,例如
DiskIoDxe_EfiDriverBindingProtocol_Start。 - • 新增 “UEFI protocols” 窗口列出所有 install/uninstall/locate/notify,可按种类和模块类型过滤。
- • 跨模块从协议成员调用到实现添加交叉引用,双击伪代码中的
x->Member可跳转到实现。
十四、类型系统
- • Clang 成为新的默认解析器:IDA 9.5 用内建基于 clang 的解析器解析类型声明,C、C++、Objective-C、Objective-C++ 开箱即用,无需配置。默认
TYPE_PARSER = "clang",旧的"legacy"仍可用。类型编辑器与 Local Types 新增语言选择器(按数据库保存)。 - • Apple Silicon macOS 内核的版本匹配 XNU 类型库:加载 Apple Silicon macOS 内核时,IDA 自动应用与内核 OS 版本匹配的 XNU 类型库。
- • 移除:9.4 中弃用的
old_clang解析器、idaclang 插件和独立idaclang工具已删除,改用内建 clang 解析器与tilib -TC。
十五、调试信息、符号还原与异常处理
- • Demangler:支持 Swift 6 编译器产生的名称。
- • DWARF:丢弃零长度 Rust 参数;Rust 单元类型
()在聚合中表示为零大小 struct;从 Rust struct/union 中丢弃零长度成员;尊重 subprogram 上的DW_AT_noreturn;Objective-C/Swift 运行时根类以其 isa 指针表示。 - • PDB:从调试信息恢复位域分配顺序。
- • Goodname:新增 MSVS STL 名称模式。
- • 修复了 DWARF(
DW_OP_addrx定位的全局变量类型/名称丢失、PowerPC 浮点参数映射错误、Rust 闭包隐藏环境指针未恢复等)与 PDB(/Z7COFF 对象的函数原型未应用、struct/array 全局变量未从调试信息布局等)的一系列问题。
十六、UI 与交互
- • Qt 6.8 LTS 升级到 Qt 6.12 LTS:IDA 跟随桌面的浅色/深色方案(Linux 上通过 XDG desktop portal),
IDA_COLOR_SCHEME=light|dark|auto可强制切换;PySide6 随之升级,使用 PySide 的插件需重测。 - • 新的列表 HTML 渲染器:每个列表(反汇编、十六进制、伪代码、类型列表)都能连颜色一并忠实复制与导出。右键新增 Copy 子菜单,可把选中项、高亮的标识符或当前函数/类型/项复制为文本(
Ctrl+C)、HTML 或 deeplink。File > Produce file > Export to HTML… 以模板驱动方式取代旧的 HTML 输出,内置 Document / Interactive / Snippet 三种模板,自定义模板就是普通 IDAPython 脚本。 - • Pathfinder 与 Xref 图强关联并改进:打开 Pathfinder 时旁边会打开实时 xref 图,增删、重排路标点或修改排除项会立即重绘;两路标点间显示 “Direct connection”、“N nodes” 或 “N nodes (shortest: M)”(无路径时显示红色)。
- • 重做快速过滤机制:在列表或选择窗口中输入会过滤列表,而非运行增量搜索;快速过滤条成为这些窗口的固定组成部分。相关行为由 Options > Feature Flags 下的两个特性开关控制。
- • Jump Anywhere 显示更多、找到更多:结果带语法着色,函数结果显示参数名;预览面板始终开启;本地类型可同时按美化名与原始名找到。
- • 其他:Alt+ 窗口切换的部件编号从 1 秒改为 500 毫秒后出现;限定名整体高亮;双击跳转到类型定义或结构体成员;新增 “Extensions” 菜单汇合 Lumina、Teams 等扩展。
十七、性能与资源占用
- • 大规模 DWARF:调试节改为内存映射而非读入内存,在 2.6 GB 的 C++ 二进制上节省约 2 GB(−30%),8900 万 DIE 的二进制上每 DIE 索引从 2048 MB 降至 1109 MB。新增可选
-Odwarf:lazy_types=1,只导入从具名函数和全局变量可达的类型。 - • dyld shared caches:启用地址范围不再重写整个数据库。2.7 GB 缓存上,初次加载与分析总计冻结 UI 8.1 秒,而非 42–48 秒(最长单次冻结 5.4 秒 vs 13.5–15.9 秒;UI 线程 I/O 21 GB vs 234 GB)。
- • 病态输入:800 个类、20 万字符串的文件中,RTTI 分析复制的数据从 37.1 GB 降至 36 MB;超大函数(状态寄存器分派器)自动分析从 1751 秒降至 253 秒。
- • 反编译器:批量反编译不再二次方级变慢(2.6 万函数快 8%,7.4 万函数快 11.8%);含单个 5506 指令基本块的函数从 2929 秒降至 148 秒。
- • FLIRT:签名文件通过缓冲区读取而非逐字节读取。
- • 数据库可按多个独立 zstd 帧打包(
PACK_ZSTD_FRAME_SIZE),便于 IDA Teams 并行解码——9 GB 数据库的检出从 2.3 秒降至 0.3 秒。
十八、SDK 与 API
- • 加载器、处理器模块、类型库、FLIRT 签名、IDS 文件和主题的安装清单:现在可以像插件一样,以带 manifest 文件的目录形式安装。清单名分别为
ida-loader.json(loaders/)、ida-proc.json(procs/)、ida-til.json(til/)、ida-sig.json(sig/)、ida-ids.json(ids/)、ida-theme.json(themes/)。
{
"IDAMetadataDescriptorVersion": 1,
"loader": {
"name": "my loader",
"entryPoint": "my_ldr.py"
}
}
- • 新增 Synthetic String API,插件可以添加“只存在于代码中”的字符串。
- • 新增 License Inspection API:
License类(license.hpp;IDAPython 中为ida_license.License)可查询活动许可证(是否可用、产品与版本、激活周期、涵盖的附加组件与特性)并控制它(设置活动许可证、检出/检入、借出/归还浮动许可证)。 - •
COLOR_GROUP更名为COLOR_SEMSPAN(“semantics-bearing span”),COLOR_GROUP保留为弃用别名。 - • 新增列表导出 API
export_listing,可把反汇编、伪代码和类型列表渲染为文本或 HTML;新增类 API(get_classes()、get_class_info()、render_class()、render_member())。 - •
set_decompiler_timeout(msecs)限定整个decompile()调用,超时以新的MERR_TIMEOUT失败,适用于无界面的 headless 与 idalib 场景。 - • 修复了大量 SDK/IDAPython/idalib 问题(对象脚本结束后仍存活、
ask_file空参数崩溃、qtree.hpp无法用 GCC 8.x 编译等)。
十九、网络与安全
- • 许可证、Lumina 或 Vault 服务器异常时给出清晰答复:连接失败会指明服务器(
host:port)并以原因为先导,而不再是裸传输错误;缺失许可证会报告为 “license X is not available on this server”。 - • 当许可证或 Lumina 服务器停止响应时,IDA 不再冻结——工作期间、退出期间或云端反编译期间均如此:阻塞式网络操作被限定或可取消。
- • macOS:使用系统自带的支持 TLS 1.3 的 LibreSSL,可连接要求 TLS 1.3 的服务器以及要求 Extended Master Secret 扩展的 FIPS 服务器。
- • 安全:Linux 构建以完整 RELRO 和无 PLT 链接加固,更不易受内存破坏攻击。
二十、下载地址
IDA 9.5 Beta:
magnet:?xt=urn:btih:ffb182b7024f3356722c6082663ab5a83817dcb2&dn=ida95b1&xl=4756528480&tr=udp%3A%2F%2Ftracker.corpscorp.online%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=https%3A%2F%2Ftracker.7471.top%3A443%2Fannounce&tr=http%3A%2F%2Ftracker.mywaifu.best%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.nyaa.vc%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.waaa.moe%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce
点击复制到 BT 客户端即可开始下载:
magnet:?xt=urn:btih:ffb182b7024f3356722c6082663ab5a83817dcb2&dn=ida95b1
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:利刃信安 利刃信安 利刃信安《IDA 9.5 Beta 发布:三大新反编译器、位域支持、Apple 内核缓存与 FLIRT 2.0》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论