☰
用 REA 静态解剖 iOS 应用:从 IPA 认证清单到 Mach-O 加载追踪的完整工作流
2026/11/4 11:11:16 网站建设 项目流程

用 REA 静态解剖 iOS 应用:从 IPA 认证清单到 Mach-O 加载追踪的完整工作流

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

你手里只有一个 IPA(Apple 的应用分发封装格式),解出的文件树回答不了完整性、bundle(应用容器)归属、启动依赖这三个问题。REA 是面向 AI Agent 的静态逆向工具。从认证清单到动态库加载追踪,这条链路不运行目标应用的一行代码。

生成带哈希指纹的认证清单

文件树只记路径,不记完整性。IPA 静态分析的第一步,是产出一条带哈希指纹的证据记录;后面每个结论都能回指到某条具体哈希。

inspect_artifact

对 IPA / DMG / ZIP /.app目录执行库存操作(工具名inspect_artifact),输入就是目标文件本身。产出inventory_artifact证据,关键字段:

字段记录内容
root_sha256/root_format根文件哈希与格式(ipa等)
nodes各组件格式、架构、可执行位
occurrences路径、大小、校验状态
limitations无法核实的条目,不悄悄丢弃

校验状态以verified这类值落进occurrences。这份清单只记录观察事实,不解释 plist 或签名语义。

把文件树投影成 bundle 结构图谱

投影回答的是树怎么组织的。路径和哈希在这里变成一张带解剖信息的应用结构图,每个结论都能落到精确路径。实现见 AppleApplicationService.ts,工具契约见 applicationToolContracts.ts。

rea project-apple-application-graph '{"inventory_evidence":[<inventory_artifact Evidence>]}'

参数只有一个:把上一阶段的证据填进inventory_evidence数组。这是一次无执行投影。应用根按库存类型识别:

  • IPA:每个Payload/<Name>.app各是一个根
  • .app目录:被库存的目录本身
  • 含应用的目录 / ZIP / DMG:最外层<Name>.app(后接Contents/)

DMG 的清单路径形如<image>.dmg/<Volume>/<Name>.app;只有根身份、缺子卷清单时,结果标为partial。其他格式(如 APK、ASAR)直接拒为输入错误。

bundles部分列出每个应用根及其全部嵌套 bundle,布局分三类:

布局判定
macos-deep含Contents/的 macOS 应用
versioned-framework含Versions/,按真实版本目录分析
shallow无上述结构,典型 iOS 应用形态

同字段还有parent_path、info_plist_path、executable_candidates、signing_paths。含Contents/的根判为macos,浅层 bundle 凭根Info.plist判为ios。这就是 bundle 结构分析的完整产出。

按 dyld 规则追踪动态库加载

加载追踪回答每条依赖最终命中哪个文件。清单管"有什么",这里管"怎么加载"。模拟用 dyld(macOS 动态链接加载器)的解析规则完成,是 iOS 应用逆向链路里最硬的一段。

rea trace-dylib-resolution MyApp.app --json

可加--root指定进程根、--architecture锁定架构。Mach-O(Apple 平台二进制格式)与 FAT 头的解析用纯 TypeScript 完成,不依赖 Apple 工具,非 macOS 系统上同样能跑。bundle 内每个可执行文件——主程序、XPC 服务、扩展、登录项、助手——都是独立进程根,各带自己的@executable_path。

解析模拟了 dyld 搜索链:@executable_path、@loader_path、@rpath逐级展开,符号链接在根内跟随,x86_64h进程可加载x86_64。每条依赖边列出全部候选路径及结果(resolved/absent/architecture-missing/escapes-target等),边级判定分四级:

状态含义
resolved根内有一个镜像成功加载
conditional根内可解析,根外更早候选可能优先
unresolved根内候选确定缺失或不可用
undetermined候选在根外或依赖运行环境

想核对实际加载顺序,可把可执行文件交给反汇编引擎看汇编:

角色归类:启动项与提权入口

嵌套组件不用逐个目录翻。投影按路径约定自动归角色(role_basis: "path-convention"),随应用启动的组件与提权点变成一份可读清单。分类随投影命令一起返回:

rea project-apple-application-graph '{"inventory_evidence":[<inventory_artifact Evidence>]}'
角色路径惯例说明
app-extension*.appex应用扩展
xpc-service*.xpcXPC 服务
framework*.framework框架
system-extension*.systemextension系统扩展
login-itemLoginItems/*.app登录项
特权助手LaunchServices/SMJobBless 助手

排查"应用还悄悄装了什么",先看login-item与特权助手两行。这也是 iOS 应用逆向里找隐藏组件的常用入口。

边界与二次核实

路径与哈希类结论可直接采信:格式、布局、角色、加载判定状态。涉及 plist 字段或签名声明的内容,投影一概不读,必须二次核实:

  • CFBundleExecutable、URL Scheme、权限描述:对info_plist_path用inspect_plist
  • 可执行候选的签名声明:用inspect_signature核查

还有几个透明边界:

  • AppleDouble 侧车文件(._*、__MACOSX/)是清单事实,但排除在角色与解剖之外
  • 桥接假设序列化上限 2 MiB,超出携带bridge_candidate_coverage并降级为partial
  • 目录型库存即使名为.app也视为独立根;DMG 子卷依赖原生 macOS 挂载适配器

这套 iOS 应用逆向链路输出的是观察事实,不是语义解释。任何"应用声明了某权限"或"签名包含某 entitlement"的表述,都必须回到inspect_plist/inspect_signature的结果上复核。

落地速查

四步链路按表查。

操作 / 命令输入得到什么
库存操作(inspect_artifact)IPA / DMG /.app带哈希的证据记录
rea project-apple-application-graphinventory_artifact证据应用根 +bundles解剖
rea trace-dylib-resolution.app或 Mach-O 文件dyld 加载解析图
inspect_plist/inspect_signatureplist 路径 / 可执行候选plist 字段 + 签名声明

完整语义与状态表见 docs/apple-application-analysis.md;首次使用按 docs/installation.md 完成安装与 Provider 配置。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询