
REA 实战指南用静态分析把一份 iOS 应用解剖到底【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea手里只有一个 IPA 文件要回答三个问题内容被改过没有应用还悄悄装了什么它运行时会去加载哪些库这套活可以完全交给 REA——一款面向 AI Agent 的逆向工程工具它对 IPA 做 iOS 逆向分析时全程静态一行目标代码都不执行交付物却是一整套可复核的证据链。第一份交付物带哈希指纹的证据清单对 IPA 执行库存操作后你拿到的不是解压出来的散文件而是一条inventory_artifact证据记录。它像一张开箱验货清单树上有几件货、每件货的 SHA-256 指纹、所在路径、声明大小全部在册。关键字段如下root_sha256/root_format根文件的指纹与格式ipa、dmg等nodes每个组件的格式、架构、可执行位与内容状态occurrences每条出现的位置、声明大小、哈希校验状态如verifiedlimitations核不了的条目写进这个字段而不是被静默丢弃。这张清单刻意只记账、不释义它不解析 Info.plist不解释签名声明也不声称观察到任何运行时调用。清单上的每个后续结论都能回指到某条具体哈希。做完这一步你手里多了一份改动检测的基线将来任何一次比对都是哈希对哈希。第二份交付物bundle 结构图谱把清单喂给投影命令文件树就变成一张应用结构图rea project-apple-application-graph {inventory_evidence:[inventory_artifact Evidence]}这条命令对每个 IPA / DMG /.app做无执行投影产出精确路径、内容哈希、检测到的格式、bundle 解剖信息和基于路径的桥接假设。实现位于 src/application/apple/AppleApplicationService.ts工具契约在 src/contracts/applicationToolContracts.ts。应用根的识别规则按库存类型分三种情况库存根应用根IPA每个Payload/Name.app.app目录被库存的目录本身含应用的目录 / ZIP / DMG每个最外层Name.app后接Contents/DMG 的清单路径形如image.dmg/Volume/Name.app若只有 DMG 根身份、没有子卷清单投影会标记为partial并说明缺失状态未知。APK、ASAR 等其他格式会被直接拒为输入错误。bundles部分逐个列出应用根与全部嵌套 bundle报告parent_path、info_plist_path、executable_candidates可执行候选、signing_paths签名路径。布局分三类macos-deep含Contents/可执行文件位于Contents/MacOS/versioned-framework含Versions/按每个真实版本目录分析不依赖Versions/Current软链shallow无上述结构根上有Info.plist即判定为ios平台——典型的 iOS 应用形态。图上还有一层桥接假设把每个应用根内的 JavaScript 与原生组件按路径两两配对作为这对脚本可能绑定那套原生代码的候选线索。它是路径推断不是绑定证明序列化上限 2 MiB超出时结果里的bridge_candidate_coverage会报出省略数量覆盖度降为partial。投影同时会给出运行时族提示匹配ReactNative.framework、Flutter.framework、UnityFramework.framework、hermes.framework这类完整路径段但同样只是库存推导不是加载观测。做完这一步你手里多了一张带解剖信息的结构图能直接回答里面装了什么、分别在哪。第三份交付物嵌套组件角色清单结构图里的嵌套组件REA 按路径惯例自动归入角色不用你逐个目录翻。iOS 应用逆向里最值得盯的两类在这里一览无余路径惯例角色*.appexapp-extension应用扩展*.xpcxpc-serviceXPC 服务*.frameworkframework框架*.systemextensionsystem-extension系统扩展*.dextdriver-extension驱动扩展Contents/Library/LoginItems/*.applogin-item登录项Contents/Library/LaunchServices/特权助手privileged_helpersContents/Library/LaunchAgents/、LaunchDaemons/launchd_plistsagent / daemon 域Contents/Helpers/*.apphelper-application助手应用其他嵌套*.appnested-application登录项和特权助手是提权点的高频藏身处前者决定开机自动运行什么后者对应 SMJobBless 这类以更高权限驻留的服务。排查这个应用还悄悄装了什么直接看角色列表即可。做完这一步你手里多了一份可读的启动项与驻留组件清单每个条目都能落回结构图上的精确路径。第四份交付物动态库加载完整地图清单回答有什么加载地图回答每条 dylib 加载最终命中哪个文件rea trace-dylib-resolution MyApp.app --json对 bundle 里每个可执行文件做完整的 Mach-O 动态库追踪。解析用纯 TypeScript 实现直接读 Mach-O / FAT 头与加载命令不依赖 Apple 工具非 macOS 系统上也能跑。它按 dyldmacOS 的动态链接加载器的规则模拟解析executable_path、loader_path、rpath搜索链软链跟随分级架构兼容x86_64h进程可加载x86_64。bundle 内每个可执行文件——主程序、XPC 服务、扩展、登录项、助手——都是独立的进程根各持一个executable_path。每条依赖边会列出所有尝试过的候选路径及其结果resolved、absent、architecture-missing、escapes-target等再落到四级判定状态含义resolved根内有一个镜像成功加载且没有更早的未决候选conditional根内可解析但更早的根外候选或运行环境输入可能改变结果unresolved根内所有候选确定缺失或不可用undetermined有候选在根外或依赖运行环境无法定论想要更硬的核对把产物交给 Hopper 等反汇编引擎看实际汇编对照静态预测的加载顺序trace_dylib_resolution在原生调查流程中的位置见 docs/native-investigation.md。做完这一步你手里多了一张带判定等级的加载解析图外加一批可直接跟进的未决发现。收尾核实边界与二次核实以上所有结论都建立在路径 哈希之上。凡涉及 plist 字段或签名声明的内容必须回到专门工具上二次核实投影不读 plist 语义。CFBundleExecutable、URL Scheme、权限描述对 bundle 的info_plist_path用inspect_plist核查签名声明则用inspect_signature检查可执行候选。AppleDouble 侧车文件._*、__MACOSX/是清单事实但自动排除在 bundle 角色与解剖组件之外。目录型库存即使名为.app也视为独立根DMG 子卷清单依赖原生 macOS 挂载适配器。边界提醒这套链路输出的是观察事实不是语义解释。任何应用声明了某权限签名包含某 entitlement签名中携带的权限声明的表述都必须回到inspect_plist/inspect_signature的结果上复核。速查表命令 / 工具输入产出库存操作产出inventory_artifactIPA / DMG / ZIP /.app目录带哈希指纹、格式与可执行位的证据记录rea project-apple-application-graphinventory_artifact证据应用根识别、bundles解剖、桥接假设rea trace-dylib-resolution.app或 Mach-O 可执行文件dyld 加载解析图与未决发现inspect_plist/inspect_signatureinfo_plist_path/ 可执行候选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),仅供参考