关于 ios-reverse-engineering
ios-reverse-engineering 是用于分析 iOS 应用包和二进制文件的技能,面向安全研究与应用分析人员。它覆盖代码结构、API 调用、第三方 SDK 和安全问题,并可生成结构化报告。
主要功能
- 01提取应用类、元数据与二进制信息
- 02追踪代码调用链和 API
- 03扫描凭据与云服务密钥
- 04识别第三方 SDK 及版本
- 05检查反篡改与安全模式
- 06生成结构化分析文档
适用场景
- 01分析 IPA 或 Mach-O 文件的应用结构
- 02整理应用中的网络 API 端点
- 03检查二进制中的凭据与安全风险
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ incogbyte/ ios-reverse-engineering-claude-skill --skill ios-reverse-engineering安装后在 Claude Code 中输入/ios-reverse-engineering确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/anti-tampering-patterns.mdapi-extraction-patterns.mdcall-flow-analysis.mdclass-dump-usage.mdcloud-secrets-patterns.mdreversing-tools-guide.mdsdk-fingerprinting.mdsetup-guide.mdvulnerability-patterns.mdscripts/audit-vulnerabilities.shcheck-deps.shdeep-secret-scan.shdetect-protections.shdetect-sdks.shextract-ipa.shfind-api-calls.shinstall-dep.shreversing-analyze.shscripts/ghidra/DecompileAllFunctions.javaExportAPICalls.javaExportCryptoUsage.javaExportStringXrefs.javaFindSecrets.javascripts/lib/plist.sh详细介绍
iOS 逆向工程
使用 ipsw (blacktop/ipsw)、otool、strings、radare2/rizin 和 Ghidra headless 提取并分析 iOS IPA 文件、.app 包、Mach-O 二进制文件、动态库和框架。追踪应用代码中的调用流程,分析安全模式,深度扫描云服务提供商凭据(Firebase、GCP、AWS、Azure),通过反编译和 Ghidra headless 脚本进行 LLM 辅助的二进制逆向,识别嵌入的第三方 SDK 并检测其版本、交叉比对 CVE,以及检测防篡改保护(混淆工具、反调试、防止 dylib 注入、完整性检查、越狱检测)。生成提取出的 API 和安全发现的结构化文档。适用于 Swift 和 Objective-C 应用。
先决条件
此技能需要 ipsw(包含 class-dump 功能及更多功能);在 macOS 上,还需要通过 Xcode Command Line Tools 安装标准开发工具(otool、strings、plutil、codesign)。对于深度二进制分析,建议使用 radare2(或 rizin);高级反编译可选用 Ghidra headless。在 Linux 上,ipsw 可提供跨平台 Mach-O 分析、entitlements、class-dump 和 thinning;libplist/plistutil(或 python3 plistlib)可解析 plist;binutils 提供 strings/nm。otool/codesign/plutil/PlistBuddy/lipo 仅适用于 macOS,脚本会自动回退到 ipsw/plistutil/python3——Linux 上不需要 macOS 工具。运行依赖检查器进行验证:
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/check-deps.sh
如果缺少任何依赖项,请按照 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/setup-guide.md 中的安装说明操作。
工作流
阶段 1:验证并安装依赖项
开始分析前,请确认所需工具均可用,并安装缺少的工具。
操作:运行依赖检查脚本。
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/check-deps.sh
输出包含机器可读的行:
INSTALL_REQUIRED:<dep>——必须先安装,然后才能继续INSTALL_OPTIONAL:<dep>——建议安装,但不影响继续
如果缺少必需依赖项(退出代码为 1),请自动安装:
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/install-dep.sh <dep>
安装脚本会检测操作系统和包管理器,然后:
- 如果可用,则通过 Homebrew 安装(
brew install blacktop/tap/ipsw) - 回退为从 GitHub releases 下载到
~/.local/share/,并在~/.local/bin/中创建符号链接 - 如果安装失败,则打印确切的手动命令并以代码 2 退出——向用户展示这些说明
对于可选依赖项,询问用户是否要安装。建议安装 jtool2 和 frida,以进行更深入的分析。
安装后,重新运行 check-deps.sh,确认所有依赖项均已就绪。所有必需依赖项通过检查之前,不要进入阶段 2。
第 2 阶段:提取并转储类
使用提取脚本处理目标文件。脚本支持 IPA、.app、Mach-O、.dylib 和 .framework 文件。
操作:运行提取脚本。
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/extract-ipa.sh [OPTIONS] <file>
对于 IPA 文件:脚本会解压 ZIP 存档,在 Payload/ 中定位 .app 包,识别主 Mach-O 二进制文件,运行 ipsw class-dump,提取 Info.plist、entitlements、内嵌框架、字符串常量、Mach-O 头部标志(macho-flags.txt — PIE / hardened-runtime 指示信息),以及 Apple 的隐私清单(PrivacyInfo.xcprivacy,如果存在,则复制到分析根目录)。
对于 .app 包:脚本直接处理包目录(生成与 IPA 相同的文件)。
对于 Mach-O 二进制文件、.dylib 和 .framework 文件:脚本直接运行 ipsw class-dump 并提取字符串。
在 Linux 上,Mach-O 文件(load-commands.txt、linked-libraries.txt、symbols.txt、macho-flags.txt、objc-info.txt、entitlements)通过 ipsw macho info 生成,而非使用 otool/codesign/lipo/nm;plist 则通过 python3 的 plistlib / plistutil 读取。输出与 macOS 运行结果一致。
选项:
-o <dir>— 自定义输出目录(默认:<filename>-analysis)--no-classdump— 跳过 class-dump(速度更快,仅分析元数据)--thin <arch>— 从通用二进制文件中提取指定架构(例如arm64)--swift-demangle— 对输出中的 Swift 符号进行反修饰
完整的 ipsw class-dump 参考请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/class-dump-usage.md。
第 3 阶段:分析结构
浏览提取的输出,了解应用的架构。
操作:
-
读取
<output>/Info.plist中的 Info.plist:- 识别包标识符(
CFBundleIdentifier) - 检查最低 iOS 版本(
MinimumOSVersion) - 查找 URL 方案(
CFBundleURLTypes) - 留意应用传输安全设置(
NSAppTransportSecurity) - 查找后台模式(
UIBackgroundModes) - 检查隐私使用说明(相机、位置等)
- 识别包标识符(
-
查看
<output>/entitlements.plist中的 entitlements:- 钥匙串访问组
- 应用组
- 推送通知 entitlements
- 关联域名(通用链接)
-
调查
<output>/class-dump/中的 ipsw class-dump 输出:- 识别 ViewController——它们是 UI 入口点
- 查找名称中包含
API、Network、Service、Client、Manager、Repository的类 - 区分应用代码与框架代码
- 识别架构模式(MVC、MVVM、VIPER、Coordinator)
-
列出
<output>/frameworks/中的内嵌框架:- 识别第三方框架(Alamofire、AFNetworking、Firebase 等)
- 留意可能包含网络代码的自定义框架
-
识别架构模式:
- MVC:包含直接网络代码的 ViewController
- MVVM:采用绑定模式的 ViewModel 类
- VIPER:Interactor、Presenter、Router 类
- Coordinator:管理导航的 Coordinator/Flow 类
- 这些信息有助于确定后续阶段中网络调用的位置
阶段 4:追踪调用流程
沿着执行路径,从面向用户的入口一路追踪到网络调用。
操作:
-
从入口点开始:阅读阶段 3 中识别出的主 ViewController 或 AppDelegate。
-
追踪初始化链:
AppDelegate.application(_:didFinishLaunchingWithOptions:)或@main App结构体通常会设置 HTTP 客户端、基础 URL 和 DI 框架。先阅读这里。 -
追踪用户操作:从 ViewController 开始,依次追踪:
viewDidLoad()→ 设置 → IBAction/按钮目标- IBAction/目标 → ViewModel/Presenter 方法
- ViewModel → Repository/Service → API 客户端
- API 客户端 → URLSession/Alamofire 调用
-
梳理 DI 和服务创建:找到网络服务的实例化位置:
- Swinject 容器
- 通过 init 参数手动注入依赖
- 单例模式(
shared、default、instance)
-
处理 Swift 符号名称修饰:符号名称经过修饰时,使用 strings 输出和 ipsw class-dump 头文件作为锚点。即使在优化后的构建版本中,协议一致性和属性名称仍然可读。
如需详细技巧和 grep 命令,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/call-flow-analysis.md。
阶段 5:提取并记录 API
查找所有 API 端点并生成结构化文档。
操作:运行 API 搜索脚本进行全面搜索。
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/
其他选项:
--context N— 显示每个匹配项周围的 N 行上下文(建议使用:--context 3)--report FILE— 将结果导出为结构化 Markdown 报告--dedup— 按端点/URL 去重结果
定向搜索:
# Only URLSession patterns
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --urlsession
# Only Alamofire/AFNetworking
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --alamofire
# Only hardcoded URLs
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --urls
# Only auth patterns
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --auth
# Only Combine/async-await patterns
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --swift-concurrency
# Only GraphQL patterns
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --graphql
# Only WebSocket patterns
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --websocket
# Only security patterns (ATS, cert pinning, jailbreak detection)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --security
# Full analysis with context and Markdown report
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --context 3 --dedup --report report.md
然后,对于发现的每个端点,阅读周围的源代码/字符串,提取以下信息:
- HTTP 方法和路径
- 基础 URL
- 路径参数、查询参数、请求正文
- 请求头(尤其是身份验证)
- 响应类型
- 调用位置(阶段 4 中的调用链)
使用以下格式记录每个端点:
### `METHOD /path`
- **Source**: `MyApp.APIService` (class-dump header or strings reference)
- **Base URL**: `https://api.example.com/v1`
- **Path params**: `id` (String)
- **Query params**: `page` (Int), `limit` (Int)
- **Headers**: `Authorization: Bearer <token>`
- **Request body**: `{ "email": "string", "password": "string" }`
- **Response**: `Codable struct User`
- **Called from**: `LoginViewController → LoginViewModel → AuthService → APIClient`
如需了解针对特定库的搜索模式和完整文档模板,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/api-extraction-patterns.md。
阶段 6:安全分析
扫描提取的应用,查找与安全相关的模式。
操作:运行专注于安全的搜索:
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/find-api-calls.sh <output>/ --security --context 3
查找并标记:
- App Transport Security(ATS)例外 —
NSAllowsArbitraryLoads、包含NSExceptionAllowsInsecureHTTPLoads的NSExceptionDomains - 禁用证书固定 — 始终信任的自定义
URLAuthenticationChallenge处理,ServerTrustPolicy.disableEvaluation - 暴露的机密 — 字符串或 class-dump 输出中的硬编码密码、API 密钥、加密密钥
- 越狱检测绕过 — 检查
/Applications/Cydia.app、canOpenURL("cydia://")、/bin/bash是否存在 - 弱加密 — MD5 哈希、ECB 模式、硬编码 IV/密钥、CC_MD5 用法
- Keychain 误用 —
kSecAttrAccessibleAlways、缺少访问控制标志 - 调试标志 —
#if DEBUG产物、暂存环境 URL、详细日志 - 隐私 — 剪贴板访问、窥探粘贴板、未经同意进行追踪
如需查看完整的安全模式列表,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/api-extraction-patterns.md。
阶段 7:大模型深度秘密与凭据分析
全面扫描二进制文件中嵌入的云服务提供商凭据、API 密钥和秘密。大模型会分析每项发现,对其进行分类、评估风险并提供修复指导。
操作:运行深度秘密扫描器:
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --report secrets-report.md
减少误报(内置):扫描器按值(而非 grep 行)提取候选秘密并去重,因此同一个秘密出现在 3 个文件中时只计为 1 项发现。随后会根据以下条件验证每个候选项:
- 占位符允许列表(
AKIAIOSFODNN7EXAMPLE、your_key、通过单独的低严重性模式匹配的sk_test/pk_test、<...>、placeholder等)→ 降级为 INFO, - 针对各提供商的严格格式/字符集检查(AWS 为
AKIA+ 16 个字符,GCP 为AIza+ 35 个字符,Stripe 前缀 + 24 个字符,JWT 三段式标头等)→ 不匹配会提高误报可能性, - Shannon 熵(< 约 3.0 位/字符 → 可能是二进制文件内容,而非秘密),
- 客户端安全标记(Firebase API Key、Stripe publishable、Mapbox public、Infura/Alchemy →
client-safe=yes,严重级别从 critical 降为 medium)。
每项发现都会标注误报可能性(Low/Medium/High)和客户端安全标签。使用 --raw 可禁用所有过滤,进行暴力排查(匹配项仍会标注误报可能性)。配置指示项(SDK 类名、端点 URL)会作为 INFO 报告,且不计入 critical/high 总数。
# Brute-force: keep every match (placeholders still listed, tagged FP:High)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --raw --severity info --report secrets-raw.md
定向扫描:
# Firebase / Google only
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --firebase
# AWS only
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --aws
# Azure only
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --azure
# GCP only
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --gcp
# Payment providers (Stripe, PayPal, RevenueCat)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --payments
# Messaging (Twilio, SendGrid, Slack, OneSignal)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --messaging
# Analytics (Sentry, Mixpanel, Amplitude, Segment)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --analytics
# JWT tokens
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --jwt
# Developer-platform keys (GitHub, GitLab, Mailgun, Mailchimp, Telegram, Square)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --devtools
# Web3 keys (Infura, Alchemy, Ethereum private keys, PEM blocks)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --web3
# Critical and high severity only
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/deep-secret-scan.sh <output>/ --severity high --report secrets-report.md
大模型分析:扫描完成后,阅读报告并逐项分析发现:
- 分类 — 确认服务和凭据类型
- 评估是否适合客户端使用 — 某些密钥本来就用于客户端(Firebase API keys、Stripe publishable keys)
- 判断影响范围 — 攻击者能利用此凭据做什么?
- 检查误报 — 示例值、文档字符串、测试数据
- 建议验证方法 — 使用安全命令测试凭据是否有效
- 建议修复措施 — 轮换凭据、限制 API 密钥、移至服务端、使用环境配置
使用以下格式记录每项发现:
### [SEVERITY] Service — Credential Type
- **Value**: `[first 4 chars]...[last 4 chars]` (redacted)
- **Location**: `file:line`
- **Client-safe**: Yes / No
- **Impact**: What an attacker could do
- **False positive likelihood**: Low / Medium / High
- **Validation**: How to test if active
- **Remediation**: Specific steps to fix
完整的云服务提供商模式、密钥格式和风险评估列表,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/cloud-secrets-patterns.md。
阶段 8:结合 LLM 分析进行深入二进制逆向
使用 CLI 逆向工具(radare2/rizin 或 Ghidra headless)执行深入的二进制分析。LLM 会读取结构化输出,以发现仅靠字符串/模式匹配无法识别的安全问题。
前提条件:必须安装 radare2/rizin 或 Ghidra。使用以下命令安装:
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/install-dep.sh radare2
# or
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/install-dep.sh ghidra
操作:对主二进制文件运行逆向分析:
# Full analysis (functions, strings, imports, exports, classes, security, network, crypto, auth, entropy)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh <main-binary> -o <output>/reversing
# Quick scan (functions + strings + imports only)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --quick <main-binary> -o <output>/reversing
# Force Ghidra headless (uses Java scripts for decompilation, secret scanning, crypto analysis)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --tool ghidra <main-binary> -o <output>/reversing
Ghidra Headless 脚本:使用 Ghidra 时,工具会自动运行 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/ghidra/ 中的专用 Java 脚本:
DecompileAllFunctions.java— 将所有函数反编译为伪 C 代码(或使用--security-only进行有针对性的反编译)FindSecrets.java— 搜索反编译代码中的硬编码凭据、API 密钥和机密信息ExportAPICalls.java— 查找网络 API 符号,追踪调用方,并从反编译代码中提取 URLExportCryptoUsage.java— 识别加密函数的用法,反编译调用加密函数的代码,并标记薄弱模式ExportStringXrefs.java— 导出所有字符串及其交叉引用,并按类型分类(URL、身份验证、加密、云服务)
有针对性的分析:
# Focus on secret/credential handling code
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --secrets <binary> -o <output>/reversing
# Focus on networking code
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --network <binary> -o <output>/reversing
# Focus on crypto implementations
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --crypto <binary> -o <output>/reversing
# Focus on authentication logic
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --auth <binary> -o <output>/reversing
# Decompile a specific function
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --decompile "sym.objc.AuthService.login" <binary> -o <output>/reversing
# Decompile all functions matching a pattern
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --decompile-pattern "auth\|login\|token" <binary> -o <output>/reversing
# Cross-references to a specific function
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --xrefs "sym.imp.CCCrypt" <binary> -o <output>/reversing
# Call graph for a function
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --callgraph "sym.objc.NetworkManager.request" <binary> -o <output>/reversing
# Entropy analysis (detect packing/encryption)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/reversing-analyze.sh --entropy <binary> -o <output>/reversing
LLM 分析:逆向工具生成输出后,读取生成的文件并进行分析:
- 读取
functions-secrets.txt— 找出处理凭据、密钥和令牌的函数 - 读取
functions-network.txt— 梳理网络层,查找代码中的 API 端点 - 读取
functions-crypto.txt— 找出加密实现,检查是否存在薄弱模式 - 读取
functions-auth.txt— 了解身份验证流程和潜在的绕过方式 - 读取
xrefs-security.txt— 追踪加密/钥匙串 API 的实际调用方式 - 读取
xrefs-network.txt— 追踪网络 API 的调用方式,查找隐藏端点 - 读取
classes-interesting.txt— 找出安全关键类及其关系 - 读取
strings-interesting.txt— 与反编译代码交叉比对 - 对感兴趣的函数使用
--decompile,获取伪代码以进行详细分析 - 对关键函数使用
--callgraph,可视化执行路径
反编译代码中的重点检查项:
- 传递给加密函数的硬编码值(密钥、IV、盐)
- 身份验证绕过条件(调试标志、硬编码凭据)
- 不安全的数据流(机密信息存储在 UserDefaults 中或记录到控制台)
- 证书固定绕过的可能性
- 越狱检测逻辑(用于理解,而非绕过)
- 混淆字符串的解密流程
有关 radare2/rizin/Ghidra 命令的完整参考,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/reversing-tools-guide.md。
阶段 9:SDK 和框架指纹识别
识别应用中嵌入的所有第三方 SDK 和框架。尽可能检测版本,并与已知 CVE 交叉比对。
操作:运行 SDK 检测脚本:
# Full SDK detection with CVE checking
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-sdks.sh <output>/ --check-cves --report sdks-report.md
# Verbose output with match details
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-sdks.sh <output>/ --verbose --check-cves
# JSON output for programmatic use
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-sdks.sh <output>/ --json --check-cves
该脚本通过以下方式对 SDK 进行指纹识别:
- 搜索
Frameworks/中嵌入的框架名称 - 检查
otool -L输出中的链接库 - 检查 class-dump 头文件中的类前缀(例如,
FIR*= Firebase,STP*= Stripe) - 检查二进制文件中的 SDK 专属字符串(域名、API 模式)
- 检查符号和元数据
检测到的 SDK 类别:网络、分析、广告、身份验证、支付、推送通知、地图、社交、数据库、云存储、UI/UX、安全、消息传递、崩溃报告、A/B 测试、深度链接、AR/ML。
LLM 分析:检测后,评估:
- 攻击面 — 每个 SDK 都是潜在的攻击途径;SDK 越多,攻击面越大
- 过时版本 — 将检测到的版本与 CVE 数据库交叉比对
- API 密钥安全性 — 判断暴露的密钥是否可安全用于客户端(Firebase API 密钥),还是仅限服务端使用(Stripe 密钥)
- 数据流映射 — 每个 SDK 会收集哪些数据?数据会发送到哪里?
- 隐私合规性 — 验证跟踪 SDK 是否符合 ATT(App Tracking Transparency)
- 不必要的 SDK — 未使用的 SDK 会增加风险,却没有带来益处
完整的 SDK 指纹数据库、检测技术和 CVE 参考,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/sdk-fingerprinting.md。
阶段 10:保护机制与防篡改检测
检测应用使用的安全保护、防篡改机制、混淆和反调试技术。
操作:运行保护机制检测脚本:
# Full protection analysis
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --report protections-report.md
# With direct binary analysis (more accurate for some checks)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --binary <path-to-macho-binary> --report protections-report.md
目标分析:
# Only obfuscation detection
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --obfuscation
# Only anti-debugging checks
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --debugger
# Only dylib injection prevention
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --injection
# Only integrity/tampering checks
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --integrity
# Only jailbreak detection
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --jailbreak
# Only binary encryption (FairPlay DRM)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/detect-protections.sh <output>/ --encryption
检测到的保护类型:
- 混淆 — 已知工具(iXGuard、SwiftShield、OLLVM、Arxan)、类名/方法名混淆比例、字符串加密、控制流平坦化
- 反调试 —
ptrace(PT_DENY_ATTACH)、sysctl P_TRACED 检查、基于时间的检测、异常端口操作、SIGTRAP 处理程序、调试服务器检测 - Dylib 注入防护 —
__RESTRICT段、DYLD_INSERT_LIBRARIES检查、已加载库枚举/验证、Substrate/Frida 检测 - 完整性检查 — 运行时代码签名验证、二进制哈希自检、团队 ID 验证、配置描述文件验证、App Store 收据验证
- 越狱检测 — 文件路径检查(Cydia、Sileo、SSH、apt)、URL 方案检查、沙盒逃逸测试(fork)、符号链接验证、环境变量检查、检测库(IOSSecuritySuite)
- 二进制加密 — FairPlay DRM(LC_ENCRYPTION_INFO cryptid),并提供解密工具指南
保护评分:脚本会输出保护评分(0-20),用于评估整体保护级别:
- 15-20:保护严密
- 10-14:保护良好
- 5-9:保护中等
- 1-4:保护较弱
- 0:未受保护
LLM 分析:检测后,评估:
- 保护质量 — 保护措施是分层部署,还是存在单点故障?
- 绕过难度 — 是单函数检查,还是分散式检查?
- 检测与响应 — 应用会崩溃、向服务端报告,还是平稳降级?
- 混淆覆盖范围 — 部分混淆可能会让敏感代码仍然可读
- 服务端证明 — 客户端检查可以被绕过;App Attest/DeviceCheck 则无法被绕过
保护模式和检测技术的完整参考,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/anti-tampering-patterns.md。
阶段 11:静态漏洞审计
审计提取出的应用,检查特定于 iOS 的漏洞类别,这些类别不在模式级安全扫描(阶段 6)和机密信息扫描(阶段 7)的覆盖范围内。本阶段是对这些阶段的补充:它查找的是漏洞模式,而非 API 调用或凭据值。
操作:运行漏洞审计器:
# Full audit across all categories, with a Markdown report
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --all --report vuln-report.md
类别筛选器(可单独运行,也可组合使用):
# Insecure local storage (UserDefaults tokens, sqlite/realm, UIFileSharingEnabled, file protection off)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --storage
# WebView / JS-bridge (UIWebView, allowUniversalAccessFromFileURLs, addScriptMessageHandler, TLS-bypass)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --webview
# Deeplink / URL-scheme hijack (custom schemes, token-in-callback, universal links)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --deeplink
# Weak crypto / RNG (ECB, arc4random/rand for tokens, MD5/SHA1, hardcoded IV/salt)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --crypto
# Biometric/local-auth, sensitive-data logging, ATS detail, privacy/tracking, entitlements, debug artifacts
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --auth --logging --network --privacy --entitlements --debug
# Mach-O hardening flags (non-PIE executable, no MH_NO_HEAP_EXECUTION, hardened-runtime weakening)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --hardening
# Data injection / dynamic dispatch (NSPredicate/NSExpression format strings, KVC, NSSelectorFromString/performSelector, stringWithFormat)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --injection
# Insecure deserialization (NSKeyedUnarchiver unsafe APIs, decodeObject(forKey:) without NSSecureCoding)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --deserialization
# Unsafe parsing / archive handling (XXE via NSXMLParser/libxml2, Zip Slip via archive libs)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --parsing
# Only high/critical findings
bash ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/scripts/audit-vulnerabilities.sh <output>/ --all --severity high --report vuln-report.md
检测类别:不安全的本地存储(包括缺少备份排除设置,以及 App-Group UserDefaults 机密信息泄露)、WebView/JS 桥接、深层链接/URL 方案劫持、弱加密/RNG、生物识别/本地认证模式(包括缺少 Sign in with Apple nonce)、敏感数据日志记录、ATS 详情(NSAllowsArbitraryLoads/ForMedia、NSMinimumTLSVersion、NSRequiresForwardSecrecy)、明文/不安全 WebSocket、第三方证书固定配置错误(AFNetworking/TrustKit/Alamofire)和永久存储的 URL 凭据、隐私/跟踪(未使用 ATT 的 IDFA、剪贴板、屏幕捕获、应用切换器/后台快照泄露、LSApplicationQueriesSchemes 指纹识别、缺少隐私清单 PrivacyInfo.xcprivacy,以及使用说明 × API 交叉检查)、权利风险(disable-library-validation、应用组、共享钥匙串)、调试/暂存环境产物、Mach-O 强化标志(PIE / hardened runtime / library validation)、数据注入/动态分派(NSPredicate/NSExpression、KVC、NSSelectorFromString/performSelector、stringWithFormat)、不安全的反序列化(NSKeyedUnarchiver 不安全 API、缺少 NSSecureCoding)、不安全的解析/归档处理(通过 NSXMLParser/libxml2 导致 XXE、通过归档提取库导致 Zip Slip)。
对于数据注入发现(--injection),请与阶段 8 反编译出的调用点交叉核对——Ghidra 的 ExportAPICalls.java 输出文件 injection-callers.txt 会追踪 NSSelectorFromString/performSelector/setValueForKeyPath/predicateWithFormat/NSPredicate/NSExpression/stringWithFormat 的调用方,帮助你确认字符串是否由攻击者控制,再确定严重性。
每条发现都包含严重性、置信度、误报可能性(低/中/高)和证据(文件:行号)。基于邻近性的发现(日志记录机密信息、UserDefaults 中的令牌、用于令牌的 RNG)是单行共现匹配:该行同时包含触发词和机密信息关键词——请将其视为中等置信度信号,并检查周边函数以发现跨多行的情况。基于缺失项的发现(没有 NSURLFileProtectionKey、没有屏幕捕获防护)按设计均为误报可能性=高。
LLM 分析:审计完成后,根据误报可能性字段进行分类处理:
- 优先按误报可能性分类——误报可能性高的发现(基于缺失项、宽松的邻近性匹配)在采取行动前需要人工确认。
- 然后按严重性 × 置信度处理——严重/高危且置信度高的发现应立即处理;中等风险的发现需要调查。
- 将证据对应到代码——在反编译/类转储输出(阶段 8)中查看
file:line:match,确认是否可被利用。 - 交叉核对——与
deep-secret-scan.sh(阶段 7)核对实际凭据值,并与detect-protections.sh(阶段 10)核对反篡改机制是否会阻止动态确认。
完整的模式参考(严重性、误报说明、易受攻击的代码、修复方法)请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/vulnerability-patterns.md。
输出
工作流结束时,交付:
- 提取的应用内容,存放在输出目录中
- 架构摘要 — 应用结构、主要类、使用的模式和框架
- API 文档 — 所有已发现的端点,格式如上
- 调用流程图 — 从 UI 到网络的关键路径(尤其是身份验证和主要功能)
- 安全发现 — ATS 配置、证书固定状态、暴露的密钥、越狱检测、加密问题
- 云凭据报告 — 已验证并经过误报筛选的密钥,包含误报可能性和客户端安全标签(阶段 7)
- 深度二进制分析 — 反编译的函数、交叉引用、加密分析、数据流发现(阶段 8)
- SDK 清单 — 所有已识别的第三方 SDK,包含版本、类别、CVE 匹配项和风险评估(阶段 9)
- 防护评估 — 防篡改机制、混淆、反调试、注入防护,以及防护评分(阶段 10)
- 漏洞审计报告 — iOS 漏洞类别(存储 + 备份排除 + App-Group UserDefaults、WebView、deeplink、加密、身份验证 + Sign-in-with-Apple nonce、日志记录、ATS + 证书固定配置错误 + 持久化凭据、隐私 + 隐私清单/使用说明交叉核对 + 后台快照 + LSApplicationQueriesSchemes、entitlements、调试、Mach-O 加固、数据注入/动态调度、不安全反序列化、不安全解析/归档处理),包含严重性/置信度/误报可能性/证据(阶段 11)
在 find-api-calls.sh、deep-secret-scan.sh、detect-sdks.sh 和 detect-protections.sh 上使用 --report report.md,自动生成结构化 Markdown 报告。
参考资料
${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/setup-guide.md— 安装 ipsw、jtool2、frida 和可选工具${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/class-dump-usage.md— ipsw class-dump CLI 选项、Swift 支持和 Mach-O 分析${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/api-extraction-patterns.md— 特定库的搜索模式和文档模板${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/call-flow-analysis.md— 跟踪 iOS 应用调用流程的技术${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/cloud-secrets-patterns.md— 云服务提供商凭据模式(Firebase、GCP、AWS、Azure、Stripe、GitHub、GitLab、web3 等)和误报最小化${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/reversing-tools-guide.md— CLI 逆向工具参考(radare2、rizin、Ghidra headless)${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/sdk-fingerprinting.md— SDK 指纹数据库、类前缀、版本提取和 CVE 参考${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/anti-tampering-patterns.md— 防篡改、混淆、反调试和注入防护模式${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/vulnerability-patterns.md— iOS 漏洞类别(存储、WebView、deeplink、加密、身份验证、日志记录、ATS、隐私、entitlements、调试、Mach-O 加固、数据注入/动态调度、不安全反序列化、不安全解析/归档处理),包含误报说明和修复建议