REA 跑通 iOS 应用分析 4 幕链路:从认证清单到 dylib 加载追踪
REA 跑通 iOS 应用分析 4 幕链路从认证清单到 dylib 加载追踪【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea你刚拿到一个来路不明的 IPAApple 的应用分发封装本质是一个 zip 容器要在不执行任何一行代码的前提下确认它到底装了什么、哪些组件会随启动被加载。这是一次典型的纯静态逆向工程不运行目标只从字节推断。REA 把这条 iOS 应用分析链路拆成四幕数据流下面按信息从原始文件流向最终判定的顺序走完。能力总览能力模块对应命令或工具输入输出产物固化证据rea inspect-artifactIPA / DMG / ZIP /.app目录inventory_artifact认证清单路径、哈希、格式、可执行位还原结构rea project-apple-application-graphinventory_artifact证据应用根、bundle 解剖、角色归类、桥接假设追踪加载rea trace-dylib-resolution.app或 Mach-O 可执行文件dyld 加载解析图、候选路径、四级判定交叉核实inspect_plist/inspect_signatureinfo_plist_path/ 可执行候选plist 字段取值、签名声明四幕各自只产出一类事实后一幕消费前一幕的输出不产生跨步推断。第一幕 · 固化证据生成认证清单的 5 个关键字段文件树只记录了路径没记录完整性所以第一步是给每个组件打上哈希指纹。对 IPA、DMG、ZIP 或 macOS.app目录执行库存inventory后REA 产出一条inventory_artifact证据rea inspect-artifact app.ipa --json这条记录只做一件事如实登记观察到的事实。它不解释 plist 语义也不推断签名。五个关键字段各有分工缺一不可。root_sha256根文件的 SHA-256 指纹。后续任何内容被改动过的判断都以它为锚点没有它就无法回指到具体字节。root_format根文件的格式标签如ipa、dmg。它决定了下一步走哪套解包与应用根识别规则。nodes去重后的内容节点逐个记录格式、架构、可执行位与内容状态相同字节在不同路径下复用同一节点避免重复存储。occurrences每条出现记录各自的逻辑路径、声明大小与哈希校验状态同一节点可分别以脚本、资源、原生插件身份出现而互不覆盖。limitations无法核实的条目写进这里而不是被悄悄丢掉读不到字节的加密成员也会在此标注。清单到手后下一步是把路径变成结构。 第二幕 · 还原结构三种 bundle 布局如何区分投影命令以清单为输入把扁平的文件树展开成一张带路径、内容哈希与解剖信息的 bundleApple 平台上把可执行文件、资源与配置打包在一起的应用容器结构图谱。rea project-apple-application-graph {inventory_evidence:[inventory_artifact 证据]}投影对每个 IPA / DMG /.app执行无运行展开报出精确路径、内容哈希、检测到的格式、bundle 解剖以及基于路径的 JavaScript 与原生配对假设。它不解析 plist 或 CMS 签名语义也不声称观察到了运行时调用。应用根按输入类型识别IPA每个Payload/Name.app各是一个应用根.app目录被库存的目录本身含应用的目录 / ZIP / DMG每个最外层Name.app后接Contents/。DMG 的清单路径形如image.dmg/Volume/Name.app若只有 DMG 根身份而缺少子卷清单投影会标记为partial并说明缺失状态未知。bundles部分逐个报告每个应用根及其全部嵌套 bundle 的info_plist_path、executable_candidates可执行候选、signing_paths签名路径。布局按目录结构分三类布局特征内容目录macos-deep含Contents/Contents/可执行文件在Contents/MacOS/versioned-framework含Versions/每个真实Versions/version/目录shallow两者皆无bundle 目录本身含根Info.plist时判为ios角色则按路径惯例自动归类无需逐个目录翻。登录项和特权助手是提权入口的高频藏身处排查这个应用还悄悄装了什么时直接看角色列表即可路径惯例角色*.appex应用扩展app-extension*.xpcXPC 服务*.frameworkframework*.systemextension系统扩展Contents/Library/LoginItems/登录项login-itemContents/Library/LaunchServices/特权助手privileged helper投影实现位于 AppleApplicationService.ts工具契约见 applicationToolContracts.ts。 第三幕 · 追踪加载dyld 解析的四级判定状态清单说明有什么而每条动态库加载落到哪个文件则需模拟 dyldmacOS 的动态链接加载器解析规则由rea trace-dylib-resolution完成。它用纯 TypeScript 解析 Mach-OApple 平台的可执行文件格式与 FAT通用二进制把多种架构镜像打包在同一文件头和加载命令不依赖任何 Apple 工具在非 macOS 系统上也能跑。rea trace-dylib-resolution MyApp.app --json解析过程复现了 dyld 的搜索链executable_path取进程根可执行文件所在目录loader_path取持有该加载命令的镜像目录rpath先展开加载镜像、再回溯到进程根的每条LC_RPATH符号链接在根内跟随而用..或绝对路径逃逸会被判为escapes-target。架构匹配是分级进行的x86_64h进程可加载普通x86_64。bundle 内每个可执行文件主程序、XPC 服务、扩展、登录项、助手都是独立进程根各自拥有executable_path。每条依赖边都会列出所有尝试过的候选路径及其结果resolved/absent/architecture-missing/escapes-target等最终收敛为四级判定状态含义resolved根内有一个镜像成功加载conditional根内可解析但更早的根外候选若存在于运行系统则优先unresolved根内所有候选确定缺失或不可用undetermined有候选在根外或依赖运行环境无法定论对 IPA 内的原生二进制还可交给 Hopper 等反汇编引擎查看实际汇编核对清单预测的加载顺序。第四幕 · 交叉核实路径哈希答不了什么前面的结构结论都建立在路径 哈希之上它只能回答文件在哪、内容是什么、被归成什么角色凡涉及 plist 字段或签名声明的表述都要换专门工具补一次核实投影不读 plist 语义。要看CFBundleExecutable、URL Scheme、权限描述对 bundle 的info_plist_path使用inspect_plist签名声明则用inspect_signature核查可执行候选确认实际携带了哪些 entitlement。同时有若干已知边界要心里有数。AppleDouble 侧车文件._*、__MACOSX/会被识别为清单事实但自动排除在 bundle 角色与解剖组件之外。桥接假设最多序列化 2 MiB超出时结果携带bridge_candidate_coverage报告省略数量覆盖度降级为partial。DMG 子卷清单依赖原生 macOS 挂载适配器。而 APK、ASAR 等其他格式会被直接拒为输入错误。整条链路的输出是观察事实不是语义解释。任何应用声明了某权限签名含某 entitlement的结论都必须回到inspect_plist或inspect_signature的结果上复核。收尾 · 命令速查与延伸阅读命令 / 工具输入产出库存操作产出inventory_artifactIPA / DMG / ZIP /.app目录带哈希指纹、格式与可执行位的认证清单rea project-apple-application-graphinventory_artifact证据应用根识别、bundle 解剖、角色归类、桥接假设rea trace-dylib-resolution.app或 Mach-O 可执行文件dyld 加载解析图与未决发现inspect_plist/inspect_signatureinfo_plist_path/ 可执行候选plist 字段取值与签名声明完整的语义与状态表见项目内 apple-application-analysis.md。首次使用前请先阅读 installation.md 完成安装与 Provider 配置trace_dylib_resolution在原生调查流程中的位置见 native-investigation.md。【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考