文章总结: 本文为IDA9.5beta版本的上手体验,重点介绍了扩展菜单优先级提升、官方MCP支持、对ARMv9新指令集(如FEAT_CPA)的适配,以及作者对AI辅助逆向工程工具链的实践与思考,包括自建反编译工具链的尝试。
综合评分: 85
文章分类: 安全工具,逆向分析,AI安全
上手体验 IDA 9.5 beta
原创
0xcc
0xcc
非尝咸鱼贩
2026年10月4日 02:18
瑞士
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
IDA 前两天发了 IDA 9.5 的 beta,今天周末顺手试用一下。
https://hex-rays.com/blog/ida-9.5-beta-is-available
https://docs.hex-rays.com/release-notes/9_5beta
具体更新日志内容可以用 AI 查看总结原文。下面是一些上手体验。
扩展菜单终于提升了优先级,被单独拿出来放到顶层了。
在更新日志里也提到了 Assist 和官方 MCP,还需要单独安装一下才会启用。
在 IDA 9.4 的更新当中加入了对 iOS dyld_shared_cache 的界面优化,专门在界面右侧提供了一个文件树结构来动态加载所需的模块列表。
这个 UI 和工作流的设计目前被应用到了 kernelcache 和 DriverKit 的分析上。
驱动按照树形结构整理好,双击载入模块。
9.4 和以下版本中 kernelcache 并不区分具体模块:
9.5 则干净了很多
在 macOS / iOS 27 发布之前就有人注意到新的系统中,可执行文件的切片(Macho Slice)多了一个新的 CPU 类型:arm64e.x1。
不久前发布的 iPhone 18 所使用的 A20 芯片和 M6 Mac 都采用了用上了 Armv9 扩展指令集。其中一个对普通用户不起眼,但对内存安全有影响的特性就是对 FEAT_CPA(Checked Pointer Arithmetic,检查指针算术)的支持。
如下是来自 A20 内核的一段代码:
请注意这个 ADDPT 指令。在 IDA 9.4 和以下版本中不被支持:
在 ARMv9 架构中,FEAT_CPA(Checked Pointer Arithmetic,检查指针算术)可以让开发者不必修改 C 代码,而仅在工具链中针对新架构启用编译选项获得更强的保护。ADDPT 和 SUBPT 指令可以在指针运算时检查整数溢出和越界访问,结合目前已有的 PAC(控制流完整性保护)和 MTE(内存标签扩展)等特性,协同提升内存安全性。
关于如何在编译器中启用 FEAT_CPA,可以参考 Apple 官方文档:
https://developer.apple.com/documentation/security/preparing-your-app-to-work-with-pointer-authentication?language=objc
除了 FEAT_CPA 之外,Armv9 还引入了 FEAT_PAuth_LR(Pointer Authentication for Return Address,返回地址保护),是对 PAC 的进一步增强。
篇幅所限就不详细展开说,可以阅读这篇文章:
Strengthen return address protection using ARM64e.x1 with PAuth_LR https://blakecrosley.com/blog/arm64e-x1-checked-pointer-arithmetic
IDA Pro 其实很早之前就支持 smali 了,这个时候才加上 Java 伪代码反编译。晚到总比不到好。
说到官方的 IDA MCP 就顺便扯几句没营养的。
以前头痛欲裂看几天都未必搞得定的二进制,ai 几下子就蹬完了,谁不爱呢。今年的 Flare-On 挑战赛已经没有人味儿了,一个多小时 ai 全部解完。不过具体到用什么方案就百花齐放了。在 vibe 产品太多,用户反而不够用的今天,这个选题快被社区玩出花了。软件真正实现了“用完即走”,想要什么功能花点 token 直接现写。
以前社区比较有影响力的两个项目:
- mrexodia/ida-pro-mcp
- blacktop/ida-mcp-rs
社区版的 ida-pro-mcp 主要以 Python 实现,在 MCP 协议上暴露了许多工具,如 decompile、disasm、xrefs_to、list_funcs、rename、set_comments、set_type。 Rust 版的路线也差不多,目前默认暴露 75 个工具,并允许按类别裁剪。在此之上,为了覆盖工具没有实现的功能,他们都提供了直接执行 IDAPython 代码的接口。
值得注意的是新的这个 IDA 官方版的重要维护人就是 mrexodia。
这个官方的插件则只暴露 open_database、execute_python、reference、list_databases、 save_database、close_database 六个工具;反编译、找交叉引用、筛字符串乃至修改数据库,都让模型临时写 Python 完成。reference 则提供了查文档的能力。
确实由于模型能力的进化,很多曾经需要封装的技能,模型早就背得滚瓜烂熟了,直接生成动态脚本比封装工具更灵活。
在没有官方工具的时候我体验了以上两个社区的工具,最后还是决定重新 vibe 一个。
Rust 版是纯 headless,可以同时管理多个数据库实例。而很多时候我的工作流是顺手在 IDA 界面里打开一个数据库,然后想起来要用 AI 干点什么。这样只能打开两份数据库副本。
而那个 Python 社区版 MCP 塞了一堆没什么用的工具,甚至还有什么文件 hash 计算。这个需求一行 bash 就搞定了,还放 MCP 里占用上下文。而且我很不喜欢这个每开一个 idb 就要多启动一个 http 端口的设计。
我自己的设计路线就略有不同。一个 python 的 cli 暴力接口给 harness,同时提供一个 daemon 模式作为消息路由。在 IDA 里则是主流的 python 插件形式,但是不直接启动 MCP 服务,而是通过 Unix socket 反向连接到 daemon 服务上。
如果 cli 还想在 headless 模式下打开新的 idb,就走 IDA Domain API。
这样活动的 IDA 图形界面还是可以随时上去人工查看状态,虽然可能会被模型的请求打断。倒是解决了端口满天飞和 headless 模式查看不了任何信息的问题。
但是既然都说到 AI 反编译了,可以更大胆点。
现在模型的能力强的令人咋舌,以至于反编译的质量稍微差点也不怎么影响出活。哪怕是没有反编译器的情况下,模型现在 objdump 用得飞起,直接看反汇编,只是这样比较费 token 和时间罢了。
由于我自用的场景基本上就局限在 ARM 指令集,所以用一堆开源库糊一个完全不依赖 IDA 的反编译器也很快。
除了传统的 capstone 搭配 loader 出汇编代码,还可以看看这个基于 ghidra 移植而来的反编译引擎 kuna:
https://github.com/noelo-Lab/kuna
这甚至解决了一个 IDA 的短板。比如反编译超大的二进制文件,dyld_shared_cache (现在其实还好)或者 AppStore 里解密出来的 ipa,载入一次就要很久。
而一般的 app 如果没有专门针对瘦身过,是会携带很多运行时信息,对 llm 很友好。IDA 刚载入数据库会消耗很长时间,但如果只是写一个工具仅仅提供指到哪里反编译哪里,相当于跳过全局分析。加上 ARM 指令有一个特点就是对齐,这上面可以加速的技巧就太多了。
牺牲准确性和反编译效果,那边自动分析还没跑完,已经出活了。
今天的自吹就到这
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:非尝咸鱼贩 0xcc
0xcc《上手体验 IDA 9.5 beta》