mcpField
I
ios-reverse-engineering

ios-reverse-engineering

github.com/incogbyte安全11839 次安装17 周前更新
代码仓库

关于 ios-reverse-engineering

ios-reverse-engineering 是用于分析 iOS 应用包和二进制文件的技能,面向安全研究与应用分析人员。它覆盖代码结构、API 调用、第三方 SDK 和安全问题,并可生成结构化报告。

主要功能

  1. 01提取应用类、元数据与二进制信息
  2. 02追踪代码调用链和 API
  3. 03扫描凭据与云服务密钥
  4. 04识别第三方 SDK 及版本
  5. 05检查反篡改与安全模式
  6. 06生成结构化分析文档

适用场景

  1. 01分析 IPA 或 Mach-O 文件的应用结构
  2. 02整理应用中的网络 API 端点
  3. 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.md
api-extraction-patterns.md
call-flow-analysis.md
class-dump-usage.md
cloud-secrets-patterns.md
reversing-tools-guide.md
sdk-fingerprinting.md
setup-guide.md
vulnerability-patterns.md
scripts/
audit-vulnerabilities.sh
check-deps.sh
deep-secret-scan.sh
detect-protections.sh
detect-sdks.sh
extract-ipa.sh
find-api-calls.sh
install-dep.sh
reversing-analyze.sh
scripts/ghidra/
DecompileAllFunctions.java
ExportAPICalls.java
ExportCryptoUsage.java
ExportStringXrefs.java
FindSecrets.java
scripts/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 阶段:分析结构

浏览提取的输出,了解应用的架构。

操作:

  1. 读取 <output>/Info.plist 中的 Info.plist:

    • 识别包标识符(CFBundleIdentifier)
    • 检查最低 iOS 版本(MinimumOSVersion)
    • 查找 URL 方案(CFBundleURLTypes)
    • 留意应用传输安全设置(NSAppTransportSecurity)
    • 查找后台模式(UIBackgroundModes)
    • 检查隐私使用说明(相机、位置等)
  2. 查看 <output>/entitlements.plist 中的 entitlements:

    • 钥匙串访问组
    • 应用组
    • 推送通知 entitlements
    • 关联域名(通用链接)
  3. 调查 <output>/class-dump/ 中的 ipsw class-dump 输出:

    • 识别 ViewController——它们是 UI 入口点
    • 查找名称中包含 API、Network、Service、Client、Manager、Repository 的类
    • 区分应用代码与框架代码
    • 识别架构模式(MVC、MVVM、VIPER、Coordinator)
  4. 列出 <output>/frameworks/ 中的内嵌框架:

    • 识别第三方框架(Alamofire、AFNetworking、Firebase 等)
    • 留意可能包含网络代码的自定义框架
  5. 识别架构模式:

    • MVC:包含直接网络代码的 ViewController
    • MVVM:采用绑定模式的 ViewModel 类
    • VIPER:Interactor、Presenter、Router 类
    • Coordinator:管理导航的 Coordinator/Flow 类
    • 这些信息有助于确定后续阶段中网络调用的位置
阶段 4:追踪调用流程

沿着执行路径,从面向用户的入口一路追踪到网络调用。

操作:

  1. 从入口点开始:阅读阶段 3 中识别出的主 ViewController 或 AppDelegate。

  2. 追踪初始化链:AppDelegate.application(_:didFinishLaunchingWithOptions:) 或 @main App 结构体通常会设置 HTTP 客户端、基础 URL 和 DI 框架。先阅读这里。

  3. 追踪用户操作:从 ViewController 开始,依次追踪:

    • viewDidLoad() → 设置 → IBAction/按钮目标
    • IBAction/目标 → ViewModel/Presenter 方法
    • ViewModel → Repository/Service → API 客户端
    • API 客户端 → URLSession/Alamofire 调用
  4. 梳理 DI 和服务创建:找到网络服务的实例化位置:

    • Swinject 容器
    • 通过 init 参数手动注入依赖
    • 单例模式(shared、default、instance)
  5. 处理 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

大模型分析:扫描完成后,阅读报告并逐项分析发现:

  1. 分类 — 确认服务和凭据类型
  2. 评估是否适合客户端使用 — 某些密钥本来就用于客户端(Firebase API keys、Stripe publishable keys)
  3. 判断影响范围 — 攻击者能利用此凭据做什么?
  4. 检查误报 — 示例值、文档字符串、测试数据
  5. 建议验证方法 — 使用安全命令测试凭据是否有效
  6. 建议修复措施 — 轮换凭据、限制 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 符号,追踪调用方,并从反编译代码中提取 URL
  • ExportCryptoUsage.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 分析:逆向工具生成输出后,读取生成的文件并进行分析:

  1. 读取 functions-secrets.txt — 找出处理凭据、密钥和令牌的函数
  2. 读取 functions-network.txt — 梳理网络层,查找代码中的 API 端点
  3. 读取 functions-crypto.txt — 找出加密实现,检查是否存在薄弱模式
  4. 读取 functions-auth.txt — 了解身份验证流程和潜在的绕过方式
  5. 读取 xrefs-security.txt — 追踪加密/钥匙串 API 的实际调用方式
  6. 读取 xrefs-network.txt — 追踪网络 API 的调用方式,查找隐藏端点
  7. 读取 classes-interesting.txt — 找出安全关键类及其关系
  8. 读取 strings-interesting.txt — 与反编译代码交叉比对
  9. 对感兴趣的函数使用 --decompile,获取伪代码以进行详细分析
  10. 对关键函数使用 --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 分析:检测后,评估:

  1. 攻击面 — 每个 SDK 都是潜在的攻击途径;SDK 越多,攻击面越大
  2. 过时版本 — 将检测到的版本与 CVE 数据库交叉比对
  3. API 密钥安全性 — 判断暴露的密钥是否可安全用于客户端(Firebase API 密钥),还是仅限服务端使用(Stripe 密钥)
  4. 数据流映射 — 每个 SDK 会收集哪些数据?数据会发送到哪里?
  5. 隐私合规性 — 验证跟踪 SDK 是否符合 ATT(App Tracking Transparency)
  6. 不必要的 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 分析:检测后,评估:

  1. 保护质量 — 保护措施是分层部署,还是存在单点故障?
  2. 绕过难度 — 是单函数检查,还是分散式检查?
  3. 检测与响应 — 应用会崩溃、向服务端报告,还是平稳降级?
  4. 混淆覆盖范围 — 部分混淆可能会让敏感代码仍然可读
  5. 服务端证明 — 客户端检查可以被绕过;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 分析:审计完成后,根据误报可能性字段进行分类处理:

  1. 优先按误报可能性分类——误报可能性高的发现(基于缺失项、宽松的邻近性匹配)在采取行动前需要人工确认。
  2. 然后按严重性 × 置信度处理——严重/高危且置信度高的发现应立即处理;中等风险的发现需要调查。
  3. 将证据对应到代码——在反编译/类转储输出(阶段 8)中查看 file:line:match,确认是否可被利用。
  4. 交叉核对——与 deep-secret-scan.sh(阶段 7)核对实际凭据值,并与 detect-protections.sh(阶段 10)核对反篡改机制是否会阻止动态确认。

完整的模式参考(严重性、误报说明、易受攻击的代码、修复方法)请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/ios-reverse-engineering/references/vulnerability-patterns.md。

输出

工作流结束时,交付:

  1. 提取的应用内容,存放在输出目录中
  2. 架构摘要 — 应用结构、主要类、使用的模式和框架
  3. API 文档 — 所有已发现的端点,格式如上
  4. 调用流程图 — 从 UI 到网络的关键路径(尤其是身份验证和主要功能)
  5. 安全发现 — ATS 配置、证书固定状态、暴露的密钥、越狱检测、加密问题
  6. 云凭据报告 — 已验证并经过误报筛选的密钥,包含误报可能性和客户端安全标签(阶段 7)
  7. 深度二进制分析 — 反编译的函数、交叉引用、加密分析、数据流发现(阶段 8)
  8. SDK 清单 — 所有已识别的第三方 SDK,包含版本、类别、CVE 匹配项和风险评估(阶段 9)
  9. 防护评估 — 防篡改机制、混淆、反调试、注入防护,以及防护评分(阶段 10)
  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 加固、数据注入/动态调度、不安全反序列化、不安全解析/归档处理),包含误报说明和修复建议

评论

支持 Markdown