REA 逆向 iOS 应用完整实操:从 IPA 清单到 Mach-O 动态库追踪
REA 逆向 iOS 应用完整实操从 IPA 清单到 Mach-O 动态库追踪【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/reaREA 是一款面向 AI Agent 的逆向工程工具这篇文章讲清 REA 逆向 iOS 应用这条链路对 IPA 做静态认证清单、投影 bundle 结构、追踪 Mach-O 动态库加载全程零执行不越狱、不运行应用。它到底是什么不跑应用先把包变成证据REAReverse engineer anything with agents把逆向流程拆成一条条可审计的 CLI 命令由 Agent 或你自己按图索骥地执行。和传统解包工具不同它不直接给你一棵文件树而是先建立认证过的库存证据authenticated inventory evidence包内每个文件都带 sha256 指纹、格式、大小和可执行标记后续所有结构结论都能回溯到这份清单。对 iOS 开发者它回答的是三个静态解包答不了的问题完整性这个包改过没有——靠逐文件哈希校验归属哪个文件属于哪个.app哪些是嵌套 Framework、XPC 服务、登录项加载逻辑主二进制声明的每条 dylib 依赖实际会命中包内哪个文件核心工作流从输入到输出装好之后按 安装文档 完成 Provider 配置即可开工。整条链路的数据形态变化如下。输入侧你交给它的是什么一个.ipa文件或者解出来的Payload/Name.app目录、ZIP、DMG 镜像。命令本身不关心文件怎么来的只要求字节稳定——清单是内容寻址的源文件动过后面所有证据都会失效。rea inspect-artifact ./MyApp.ipa --json | jq . inventory.json输出是一份inventory_artifactEvidence你只需要记住它的 Evidence ID下一步要用。中间态认证清单长什么样这份清单是证据而非猜测关键字段字段说明root_sha256根文件哈希指纹后续回溯的锚点nodes每个组件的格式、架构、可执行位occurrences逻辑路径、声明大小与verified校验状态limitations无法核实的内容如实标注不静默跳过关注occurrences里有没有verified之外的状态——那代表哈希和声明大小对不上包可能被动过。输出侧应用结构图谱与动态库解析图把清单投进投影命令得到 bundle 解剖结果rea project-apple-application-graph {inventory_evidence:[Evidence ID]}打开之后你会看到应用根、bundles列表含info_plist_path、executable_candidates、signing_paths以及基于路径的 JavaScript ↔ 原生桥接假设。投影不解析 plist 和签名语义CFBundleExecutable、URL Scheme 用inspect_plist签名声明用inspect_signature单独核查。应用根的识别规则很直白库存根识别为应用根IPA每个Payload/Name.app.app目录目录本身含应用的 ZIP / DMG每个最外层带Contents/的Name.appbundle 布局分三类macos-deep含Contents/、versioned-framework含Versions/按真实版本目录分析、shallow典型 iOS 形态凭Info.plist判定为ios平台。*.appex、*.xpc、*.framework、登录项Contents/Library/LoginItems/、特权助手Contents/Library/LaunchServices/按路径惯例自动归类——这是找隐藏启动项和提权点的高效线索实现见 Apple 应用投影服务。下钻一层看每条 dylib 加载到底命中哪个文件rea trace-dylib-resolution MyApp.app --json输出里每条依赖边都列出所有尝试过的候选路径及结果resolved/absent/architecture-missing/escapes-target并给出resolved、conditional、unresolved、undetermined四级判定。关注unresolved的边——那是包内缺文件、运行时必然出问题的点。Mach-O 和 FAT 头的解析是纯 TypeScript 实现工具契约不需要 otool、lipoLinux 上也能跑。想验证清单预测的加载顺序可以接 Hopper 等反汇编引擎看实际汇编跑一个最小例子以MyApp.ipa为例完整终端交互$ rea inspect-artifact ./MyApp.ipa --json | jq . inventory.json $ jq -r .. | select(.evidence_id?) // empty inventory.json | head -1 evid_9f3c... $ rea project-apple-application-graph {inventory_evidence:[evid_9f3c...]} | jq . # 输出 application roots、bundles、bridge 假设 $ rea trace-dylib-resolution Payload/MyApp.app --json | jq .findings投影输出里先看coverage是否为complete-within-inventory再看platforms是否为iosdylib 输出里只看findingsrequired-load-unresolved这类发现优先处理。想对某条unresolved边追到底就顺着它的候选路径回到清单里核对occurrences的校验状态。容易踩的坑plist 和签名不在投影里project-apple-application-graph只报路径与哈希看CFBundleExecutable或 URL Scheme 要用inspect_plist签名声明用inspect_signature。DMG 子卷依赖 macOS 挂载在非 macOS 环境DMG 往往只有根身份投影会如实标记partial并说明缺失未知不要当成包里没有这个 bundle。桥接假设会截断候选对最多序列化 2 MiB超出时bridge_candidate_coverage报告省略数量coverage 降级为partial——这是透明降级不是丢数据。AppleDouble 侧车文件._*和__MACOSX/会被识别为清单事实但自动排除在 bundle 角色和解剖组件之外别把它们当成真实启动项。conditional不等于resolved包内能解析但/usr/lib/swift这类根外候选在运行系统上存在时会抢先加载结论要留有余地。速查场景命令产出物生成认证清单rea inspect-artifact ./MyApp.ipa --jsoninventory_artifactEvidence投影应用结构rea project-apple-application-graph evidencebundle 解剖、应用根、桥接假设追踪动态库加载rea trace-dylib-resolution MyApp.app --jsondyld 解析图与 findings核查 plist 字段rea inspect-plist info_plist_pathplist 字段值反汇编验证rea decompile binary --provider hopper反汇编 / 伪代码完整字段语义与状态表见 Apple 应用分析文档首次使用先读 安装与 Provider 配置。【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考