如何用 REA 完成 iOS 应用 IPA 逆向工程结构解剖的完整实战【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea手里只有一个 IPAApple 的应用分发封装格式。解开它你能得到一棵完整的文件树——但这棵树回答不了内容是否被动过、某个文件属于哪个.appbundlemacOS/iOS 上把可执行文件、资源、配置打包在一起的应用容器、哪些嵌套组件会随应用启动。REA 是一款面向 AI Agent 的逆向工程工具它把这条链路全程静态走完——IPA/DMG 认证清单、bundle 结构投影、Mach-OApple 平台二进制格式动态库加载追踪不运行目标应用的一行代码。下面按三个阶段把这条链路走完。阶段一先建一份带哈希指纹的认证清单文件树只记录了路径没记录完整性。所以 IPA 逆向工程的第一步不是读文件而是对 IPA 做一次库存操作inventory给每个组件打上内容指纹rea inspect-artifact MyApp.ipa --json产物是一条inventory_artifact证据记录关键字段root_sha256/root_format根文件的哈希指纹与格式ipa、dmg等nodes每个组件的格式、架构、可执行位、内容状态occurrences每条出现的逻辑路径、声明大小、哈希校验状态如verifiedlimitations无法核实的条目显式写进这个字段而不是被悄悄丢掉。提示这份清单只记录观察到的事实——路径、哈希、权限位。它不解释 plist 或签名语义因此后面每个结论都能回指到清单里某条具体的哈希。阶段二把文件树投影成 bundle 结构图谱清单回答有什么但不回答结构是什么。把上一阶段的清单证据交给投影命令文件树就变成一张带精确路径、内容哈希和解剖信息的应用结构图rea project-apple-application-graph {inventory_evidence:[inventory_artifact Evidence]}每个 IPA / DMG /.app做无执行投影输出精确路径、内容哈希、检测到的格式、bundle 解剖信息以及基于路径的桥接假设JavaScript ↔ 原生配对。实现位于 src/application/apple/AppleApplicationService.ts工具契约见 src/contracts/applicationToolContracts.ts。应用根按输入形态识别IPA每个Payload/Name.app各是一个应用根.app目录被库存的目录本身含应用的目录 / ZIP / DMG每个最外层Name.app后接Contents/。bundles部分逐个报告每个应用根及其全部嵌套 bundle 的parent_path、layout、info_plist_path、executable_candidates可执行候选和signing_paths签名路径。布局分三类布局含义内容目录macos-deep含Contents/Contents/可执行文件在Contents/MacOS/versioned-framework含Versions/每个真实Versions/version/版本目录shallow无上述结构bundle 目录本身凭根Info.plist判定为ios平台隐藏启动项与提权入口藏在角色字段里。REA 按路径约定role_basis: path-convention自动把嵌套组件归类*.appex是app-extension应用扩展、*.xpc是xpc-serviceXPC 服务、*.framework是framework、*.systemextension是system-extension系统扩展Contents/Library/LoginItems/下是login-item登录项Contents/Library/LaunchServices/下是特权助手privileged helper。登录项和特权助手是提权点的高频藏身处想排查这个应用还悄悄装了什么直接看角色列表即可。边界提醒角色是路径推断不是运行时观察。一个组件位于LoginItems/不等于它在运行时实际执行。阶段三追踪 Mach-O 动态库的加载命中路径每条 dylib 加载最终命中哪个文件答案在 dyldmacOS 动态链接加载器解析规则的模拟里。bundle 内每个可执行单元主程序、XPC 服务、扩展、登录项、助手都是独立的进程根process root拥有各自的executable_pathrea trace-dylib-resolution MyApp.app --jsonREA 用纯 TypeScript 解析 Mach-O / FAT 头与加载命令不依赖 Apple 工具在非 macOS 系统上也能运行。它模拟 dyld 的解析规则executable_path、loader_path、rpath搜索链符号链接跟随以及分级架构兼容x86_64h进程可加载x86_64。每条依赖边都会列出所有尝试过的候选路径及结果resolved、absent、architecture-missing、platform-mismatch、escapes-target等再给出四级判定状态含义resolved根内有一个镜像成功加载conditional根内可解析但更早的根外候选若存在于运行系统则优先unresolved根内所有候选确定缺失或不可用undetermined有候选在根外或依赖运行环境无法定论静态预测还可以用反汇编引擎二次核对rea analyze MyApp.app --provider hopper对 IPA 内的原生二进制用 Hopper 或 Ghidra 查看实际汇编核对清单预测的加载顺序——图中 Hopper 的 Python 命令栏正在执行 REA 的桥接脚本反汇编视图停留在入口点与__LINKEDIT段边界trace_dylib_resolution在原生调查流程中的位置见 docs/native-investigation.md。常见坑与排查DMG 投影标记为partial且缺少子卷信息DMG 子卷清单依赖原生 macOS 挂载适配器。先确认宿主机挂载能力只拿到根身份时缺失状态保持未知不要用partial结果推断 bundle 不存在。清单里出现unavailable_components加密压缩成员读不出字节条目带encryption标记整体覆盖度降为partial。用外部工具先解密归档再重新做库存操作。投影结果的bridge_candidate_coverage显示omitted 0桥接假设候选数组最多序列化 2 MiB超出时保留确定前缀并报告 total / emitted / omitted 三个计数覆盖度降级为partial。先看omitted数量再决定是否需要拆小分析单元。期望某个 framework 被识别成某技术栈却落空运行时家族提示只匹配完整路径段React.framework、Flutter.framework、hermes.framework会命中而Preact.framework、MyApp.framework不会。家族提示是清单推导的猜测不是观察到的加载行为。版本化 framework 的info_plist_path是null符号链接如Versions/Current不展开投影按真实Versions/version/目录描述框架存在多个真实版本目录时 plist 归属保持未知附 limitation 说明原因。trace-dylib-resolution对系统库报undetermined属于正常边界根外绝对路径如/usr/lib/libSystem.B.dylib不做宿主机核查macOS 11 及以后多数系统库位于 dyld 共享缓存而非磁盘。findings是推导出的未决发现不是观察到的运行时行为。速查命令 / 工具输入得到什么rea inspect-artifactIPA / DMG / ZIP /.app目录带哈希指纹、格式与可执行位的inventory_artifact证据rea project-apple-application-graphinventory_artifact证据应用根识别、bundles解剖、桥接假设rea trace-dylib-resolution.app或 Mach-O 可执行文件dyld 加载解析图与未决发现rea inspect-plist/inspect_signatureinfo_plist_path/ 可执行候选plist 字段取值与签名声明边界提醒这套链路输出的是观察事实不是语义解释。任何应用声明了某权限签名包含某 entitlement的表述都必须回到inspect_plist/inspect_signature的结果上复核。完整的语义与状态表见项目内 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),仅供参考
阅读完成 · 觉得有帮助?