资讯动态

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

发布时间:2026/10/9 20:11:09 来源:尧图企业网站定制
REA keyed archive解码指南不实例化类也能安全读取二进制plist【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/reaREA的inspect_keyed_archive能力可以解码 macOS / iOS 应用中的keyed archiveNSKeyedArchiver 归档直接读懂二进制 plistbplist00与 XML plist 中序列化的对象图。它全程不实例化任何归档类只观察类名、序列化字段和引用关系因此对未知、私有甚至已被删除的类也安全可用。为什么普通方式读不了二进制plistmodel.plist、Info.plist这类文件其实是Foundation 二进制 plist格式文件头是bplist00魔数。当其中是一个keyed archive时结构大致是$archiver标记归档器为NSKeyedArchiver$objects一张对象表每个对象用索引互相引用$top根对象入口比如root、UID等命名根传统做法是用目标平台运行时NSKeyedUnarchiver反序列化但那要求类真实存在并可以被实例化——分析攻击者应用时这几乎不可能也可能执行恶意代码。REA 的解码思路把归档当成数据而非程序REA 的核心策略在 keyedArchive.ts 里先解析成纯数据。KeyedArchiveReader.ts 用 8 字节魔数判断binary-plist还是xml-plist调用 plist 库把字节解析为 JSON 结构XML 版本还会校验 BOM 与声明编码是否一致。只识别 UID 指针不执行任何类。UID 在二进制中表现为单键字典{UID: n}XML 中为{CF$UID: n}所有引用都被投影成带source / target / path / status的边状态可以是resolved、nil、unresolved、malformed。保留原始索引身份。每个对象的id就是$objects中的原始下标共享引用与循环引用因此能被完整还原——同一个对象被多处引用时输出里是同一个id而不是递归展开的副本。未知类原样保留。对象带$class时归类为archived-object状态标记为unknown-class类名来自$classname类描述符照常报告但从不调用、不构造这些类。这就是不实例化类的含义归档里的ReaArchiveRecord哪怕在分析机器上不存在你依然能看到它的字段、引用和生命周期。一键解码CLI 与 MCP 两种入口CLI 命令只有一个rea inspect-keyed-archive plist文件命令注册见 cliCommandNames.tsMCP 工具名对应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、原始valuereferences所有 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.ts20 万对象 / 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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑