news 2026/10/22 2:48:01

REA keyed archive解码指南:不实例化类也能安全读取二进制plist

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
REA keyed archive解码指南:不实例化类也能安全读取二进制plist

REA keyed archive解码指南:不实例化类也能安全读取二进制plist

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

REA的inspect_keyed_archive能力可以解码 macOS / iOS 应用中的keyed archive(NSKeyedArchiver 归档),直接读懂二进制 plist(bplist00)与 XML plist 中序列化的对象图。它全程不实例化任何归档类,只观察类名、序列化字段和引用关系,因此对未知、私有甚至已被删除的类也安全可用。

为什么普通方式读不了二进制plist?

model.plist、Info.plist这类文件其实是Foundation 二进制 plist格式(文件头是bplist00魔数)。当其中是一个keyed archive时,结构大致是:

  • $archiver:标记归档器为NSKeyedArchiver
  • $objects:一张对象表,每个对象用索引互相引用
  • $top:根对象入口,比如root、UID等命名根

传统做法是用目标平台运行时(NSKeyedUnarchiver)反序列化,但那要求类真实存在并可以被实例化——分析攻击者应用时这几乎不可能,也可能执行恶意代码。

REA 的解码思路:把归档当成"数据"而非"程序"

REA 的核心策略在 keyedArchive.ts 里:

  1. 先解析成纯数据。KeyedArchiveReader.ts 用 8 字节魔数判断binary-plist还是xml-plist,调用 plist 库把字节解析为 JSON 结构,XML 版本还会校验 BOM 与声明编码是否一致。
  2. 只识别 UID 指针,不执行任何类。UID 在二进制中表现为单键字典{UID: n},XML 中为{CF$UID: n};所有引用都被投影成带source / target / path / status的边,状态可以是resolved、nil、unresolved、malformed。
  3. 保留原始索引身份。每个对象的id就是$objects中的原始下标,共享引用与循环引用因此能被完整还原——同一个对象被多处引用时,输出里是同一个id,而不是递归展开的副本。
  4. 未知类原样保留。对象带$class时归类为archived-object,状态标记为unknown-class,类名(来自$classname类描述符)照常报告,但从不调用、不构造这些类。

这就是"不实例化类"的含义:归档里的ReaArchiveRecord哪怕在分析机器上不存在,你依然能看到它的字段、引用和生命周期。

一键解码:CLI 与 MCP 两种入口

CLI 命令只有一个:

rea inspect-keyed-archive <plist文件>

命令注册见 cliCommandNames.ts,MCP 工具名对应inspect_keyed_archive。针对已激活的应用包,第二个参数传包内相对路径即可,例如:

rea inspect-keyed-archive <app> Resources/model.plist

常用参数:

参数说明
root只投影某个$top命名根(如UID),省略则返回全部根
offset/limit对$objects对象表分页,默认每页 20000 条,保留原始索引
pathMCP 场景下的包内相对路径,必须是规范相对路径

完整参数与结果契约定义在 keyedArchive.ts 的输入 schema 中,文档说明见 native-investigation.md。

结果长什么样?

返回一份 JSON 图,关键字段:

  • roots:$top命名根
  • objects:逐条对象(id、kind、class_name、status、原始value)
  • references:所有 UID 引用边,含resolved / nil / unresolved / malformed状态
  • archive_sha256:归档文件摘要,保证证据可追溯
  • limitations:明确声明"类从未被实例化,类特有语义未知"等边界

官方端到端验证 keyed-archive.mjs 用 Swift 构造了一个带自引用循环的ReaArchiveRecord归档,断言输出中target_classes_instantiated_by_reader: false,同时验证共享身份、分页(next_offset)、XML 转换后图等价——你可以把这套 fixture 当作行为基准。

安全边界:为什么它"不炸"

这个实现把分析当作不可信输入处理:

  • 64 MiB 输入上限,超过直接拒绝(KeyedArchiveReader.ts)
  • 20 万对象 / 20 万引用 / 128 层嵌套硬限制,防恶意构造的归档拖垮解析
  • 路径校验禁止..、.、绝对路径,且不跟随符号链接
  • 发现NIBArchive魔数会明确报错,提示改用decode_interface_builder——编译后的 NIB 是另一种格式,见 InterfaceBuilderAnalysis.ts

一句话总结:你把一个不可信的 plist 交给 REA,得到的是可审计的对象图与证据摘要,而不是一个可能跑起来的目标类。这正是"从应用行为到原生二进制"这条逆向链路里,静态证据与运行时观察严格分离的设计哲学。

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 8:30:56

CTD数据库与MATLAB构建基因-药物-疾病关系图谱

1. CTD数据库不是“另一个生物数据库”&#xff0c;而是基因-药物-疾病关系的底层坐标系很多人第一次听说CTD&#xff08;Comparative Toxicogenomics Database&#xff09;&#xff0c;下意识会把它和NCBI、Ensembl或KEGG归为一类——“又一个要查文献时顺手点开的网站”。这种…

作者头像 李华
网站建设 2026/10/21 9:09:01

Vue3 + vxe-table 工具条失踪排查:版本、配置、样式全攻略

这坑我替你踩过了&#xff1a;Vue3 vxe-table 工具条失踪记如果你正对着表格工具条发愣——放大镜没影了、刷新按钮飘了、自定义列死活不出现——那这篇文章正好是给你写的。Vue3项目里集成vxe-table&#xff0c;表格本身渲染得好好的&#xff0c;数据也出来了&#xff0c;行选…

作者头像 李华
网站建设 2026/10/22 8:30:57

RoboCup仿真救援代码解析:多智能体协作与路径规划实战

简介&#xff1a;Robocup仿真救援代码是一份面向Robocup Rescue仿真竞赛的Java项目源码&#xff0c;适合正在备赛的队伍、AI或机器人方向的学生与开发者。该项目围绕灾难救援场景中的智能体软件设计&#xff0c;涵盖自主决策、环境感知、路径规划、避障与评估等关键环节。代码基…

作者头像 李华
网站建设 2026/10/19 18:11:24

MSDN是什么?别再把它当镜像下载站,官方文档这样用才高效

"我告诉你msdn"这几个字放到程序员闲聊群里&#xff0c;十个人里有八个会想到那个界面极简、收录了海量系统镜像的下载站&#xff0c;剩下两个可能翻个白眼说"你说的到底是MSDN我告诉你&#xff0c;还是微软官方的MSDN&#xff1f;"但在我这种从纸版手册时…

作者头像 李华
网站建设 2026/10/17 8:04:56

SSH密钥认证完全指南:从原理、配置到免密登录实战

直接开始写正文。我会以一位长期和Linux服务器打交道的运维/开发博主口吻来写这篇文章&#xff0c;全面覆盖SSH密钥认证从原理、配置到排查的完整链路&#xff0c;结合搜索热词中真实的高频场景&#xff08;Windows 10连Ubuntu 22.04、MobaXterm、VSCode、虚拟机互通、SSH服务重…

作者头像 李华
网站建设 2026/10/19 17:39:16

Codex Windows 配置教程:从环境准备到常见报错排查

最近不少同事都在问同一件事&#xff1a;Codex 在 Windows 上到底怎么配置才能顺利跑起来。我最初也是从命令行一路踩坑&#xff0c;装完 Node.js、配好 npm、处理完登录认证&#xff0c;才把这套 AI 编程工具真正在 Windows 下用顺。这篇教程基于我自己的实操经验&#xff0c;…

作者头像 李华