
做过 Android APK 安全审计的朋友们大概都有这样的体验:一个 APK 甩过来,你得手动打开 jadx 反编译、手工检查是否加壳、再到 Manifest 里找关键字、一行行代码翻看有没有硬编码密钥,最后可能还得调式 SO 文件……
整个过程最让人头疼的往往不是某个技术点有多难,而是步骤繁琐、结果分散。你得像流水线上的工人一样,重复着打开、检查、记录的动作,效率低下不说,还容易遗漏。究其根本,人是这个流程中最慢的环节。
今天,我们就来尝试一种新的思路:利用 Claude Code Skills,让 AI 按照预设的工程化流程自动执行 APK 安全分析任务,从检测、分析到生成报告,一气呵成。本次介绍的所有 SKILLS 均由 ID:M1k3 编写。
技术研究过程
SKILLS 简单介绍与使用
什么是 Skill?简单来说,它就是把“如何做好一件事”打包成一个可以反复调用的能力,而不仅仅是写一段长 Prompt 让 AI 临时发挥。它更像一个随时待命的小工具。
一个 Skill 的基本结构如下,其中最核心的是 SKILL.md 文件,AI 读完它就知道该如何执行对应的任务。
.claude/skills/<skill-name>/
├── SKILL.md # 技能定义(入口)
├── references/ # 参考知识库
├── tools/ # 配套工具脚本
└── rules/ # 规则集
使用前,需要将编写好的 SKILLS 文件夹,放置在你需要分析的 APK 文件所在目录的 .claude\skills\ 子目录中,如下图所示:

放置完成后,在 Claude Code 界面输入 /skills 命令,即可查看我们自定义的 skill 是否被正确识别。如果未显示,可能需要检查配置文件的位置或格式。

分析 APK 的 5 个 SKILLS 介绍
这套 APK 分析 SKILLS 采用流水线架构设计,流程清晰高效:
- 阶段 1(串行入口):对 APK 进行初步处理,包括加固检查、加壳检测及反编译。
- 阶段 2(并行分析):根据加固状态,自动选择执行 4 个并行分析模块。
- 阶段 3(汇总输出):将所有分析结果汇总,生成统一的综合报告。
阶段 1(串行) 阶段 2(并行分析) 阶段 3(汇总)
┌──────────────┐ ┌────────────────────────────┐ ┌──────────────────────────┐
│ 加固检测 │ │ 并行分析模块 │ │ 综合安全报告 │
│ + 反编译 │───────▶│ │───────▶│ comprehensive_analysis.md │
│ │ │ ┌──────────────────────┐ │ │ │
│ │ │ │ Semgrep 扫描 │ │ │ │
└──────────────┘ │ ├──────────────────────┤ │ └──────────────────────────┘
│ │ H5 分析器 │ │
│ ├──────────────────────┤ │
│ │ Manifest 分析器 │ │
│ ├──────────────────────┤ │
│ │ SO 分析器 │ │
│ └──────────────────────┘ │
└──────────────┬─────────────┘
│
▼
这个设计的关键在于智能的条件分支:加固检测是所有后续分析的前提。如果 APK 已被加固,源码被加密,那么针对源码的深度扫描就失去了意义。系统会根据加固状态,自动调整工作流:
if (已加固) {
跳过 Semgrep 扫描; // 源码被加密,扫描无意义
跳过 H5 分析; // JSBridge 代码不可读
执行 Manifest 分析; // XML 资源未被加密
执行 SO 分析; // SO 文件通常不在加固范围
} else {
执行全部四项分析;
}
参考知识库 references 机制
每个 Skill 都可以携带自己的参考知识库。以 so-analyzer 这个技能为例,其 SKILL.md 文件会控制在 100 行以内,保持简洁(篇幅太长 Claude 可能不会严格执行)。而更详细的知识则通过 @references/ 目录下的文件按需引用。这种方式避免了将所有信息塞进一个超长 Prompt 导致上下文窗口被淹没的问题。
so-analyzer/
├── SKILL.md # 精简的执行指令
├── references/
│ ├── sdk_functions.md # SDK 函数映射表(AI 知识增强)
│ ├── so_auto_analyzer.md # SO 分析方法论
│ └── example_targets.py # 目标模式示例
└── scripts/
└── so_auto_analyzer.py # 核心分析脚本
五个分析 APK 的 SKILLS
技能一:加固检测与反编译(apk-decompile-check)
这是整个流水线的入口技能,主要完成两项核心任务:
- 加固检测:调用
ApkCheckPack 工具识别 APK 是否被主流方案加固(如 360加固、腾讯乐固、梆梆安全等)。
- JADX 反编译:将 APK 反编译为 Java 源码和资源文件,为后续分析提供材料。
它的输出报告中会包含加固状态及常见的安全检测特征:
加固状态: 已加固
加固厂商: 360加固
安全检测特征:
- ROOT检测: 有
- 模拟器检测: 有
- 反调试检测: 有


技能二:Semgrep 安全扫描(semgrep-scanner)
该技能使用 16 条自定义规则 对反编译后的 Java 源码进行静态分析,扫描安全漏洞。它不依赖 AI 的主观判断,而是利用确定的 Semgrep 引擎和规则集进行检测,结果更可靠。扫描完成后,会自动调用 semgrep_report_converter.py 脚本将 JSON 结果转换为按高/中/低危分类的 Markdown 报告,便于阅读。
其规则集覆盖了多个关键风险领域:
rules/
├── crypto/
│ ├── keys/ # AES、DES、HMAC 等硬编码密钥检测
│ ├── cloud/ # 阿里云/AWS/腾讯云 AK/SK 泄露检测
│ ├── certificates/ # 硬编码证书检测
│ ├── iv/ # 硬编码 IV 检测
│ ├── salt/ # 硬编码盐值检测
│ └── keystore/ # KeyStore 密码硬编码检测
└── webview/
├── webview_insecure_config.yaml # WebView 不安全配置
├── jsbridge_sensitive_data.yaml # JSBridge 敏感数据传输
├── ssl_pinning_bypass.yaml # SSL Pinning 绕过
└── intent_url_injection.yaml # Intent URL 注入

技能三:AndroidManifest 安全分析(android-manifest-analyzer)
该技能专注于从 AndroidManifest.xml 及相关的网络安全配置文件中挖掘攻击面。它不仅简单地罗列问题,还会根据风险严重性进行分级(如将未受保护的导出 Activity 标记为「高危」),并给出相应的修复建议。
| 检查维度 |
具体内容 |
| 安全标志 |
debuggable、allowBackup、usesCleartextTraffic |
| 网络安全 |
network_security_config.xml 的明文策略、证书信任 |
| URL Scheme |
自定义协议、Deep Link、潜在的劫持风险 |
| 组件导出 |
四大组件的 exported 状态及权限保护 |
| 权限声明 |
危险权限、自定义权限保护级别 |

技能四:H5/JS 数据返回路径分析(android-app-h5-data-return-analyzer)
随着混合开发模式(WebView + H5)的普及,数据在 Native 和 Web 之间的流转成为新的安全关注点。该技能致力于追踪所有可能的数据通道,特别是可导出 Activity 的 Intent Filter,从而拼凑出完整的 URL Scheme 攻击路径(例如 myapp://h5/open),这些路径可以直接用于渗透测试。
检查清单覆盖了主流混合开发框架的通信方式:
检查清单:
├── WebView + JSBridge(addJavascriptInterface / @JavascriptInterface)
├── Cordova Plugin 回调
├── evaluateJavascript / loadUrl("javascript:...")
├── URL Scheme / shouldOverrideUrlLoading
├── Unity 通信(UnitySendMessage)
└── React Native Bridge(@ReactMethod)

技能五:SO 文件敏感信息提取(so-analyzer)
这是技术含量最高的一个技能。它并非进行简单的字符串搜索,而是通过模拟执行 SO 库中的函数,来捕获运行时才可能产生的密钥、Token 等敏感信息。你可以通过调整 --threshold(置信度阈值)参数,在“快速扫描”和“深度分析”模式间切换——阈值越低,分析的函数越多,适合深度审计。
其执行流程如下:
执行流程:
1. 解析 ELF 结构 → 提取导入/导出符号
2. 生成 Stub → 为外部依赖创建仿真桩
3. 签名解析 → 从 JNI 函数签名推断参数类型
4. 仿真执行 → 用 Unicorn Engine 运行 ARM64 代码
5. 生成报告 → 输出发现的密钥、Token、证书
该技能配备了专门的参考知识库来增强 AI 的分析能力,包括常见 SDK 敏感函数映射表、详细的 SO 文件逆向分析方法论以及典型的目标模式示例。

技能六:最佳实践检查器(skill-best-practices-checker)(可选)
这是一个用于“检查检查者”的元技能。它会从 Claude Code 官方文档拉取最佳实践标准,对任何自定义技能进行自动化审查,确保技能本身的质量和规范性。
检查项:
├── Frontmatter 格式是否规范
├── 参数是否使用 $ARGUMENTS 语法
├── SKILL.md 是否控制在 100 行以内
├── 执行步骤是否清晰可执行
├── 是否有验证方式
└── 有副作用的操作是否标记 disable-model-invocation

输出结果汇总报告
所有技能设计完成后,使用过程变得非常简单直接:
# 1. 反编译(自动检测加固)
/skill: apk-decompile-check /path/to/target.apk
# 2. 并行安全分析(AI 自动根据加固状态选择)
/skill: semgrep-scanner
/skill: android-manifest-analyzer
/skill: so-analyzer
/skill: android-app-h5-data-return-analyzer
# 3. 综合报告(AI 自动汇总所有分析结果)
最终,在 reports/ 目录下,你会获得一份完整、结构化的安全评估报告包:
reports/2026-04-12-143000-target-app/
├── semgrep_report.md # 硬编码凭据扫描结果
├── manifest_analysis.md # Manifest 安全配置分析
├── so_analysis.md # SO 文件敏感信息
├── h5_analysis.md # H5/JS 数据通道分析
└── comprehensive_analysis.md # 综合安全评估(含风险汇总和修复建议)

总结
通过这次实践可以看到,利用 Claude Code Skills 编排的自动化工作流,能够将原本繁琐、重复的 Android APK 安全分析 任务转化为高效、标准的流水线作业。这不仅仅节省了人力和时间成本,更重要的是减少了人为失误和遗漏,提升了审计的全面性和一致性。
这种“技能即工具”的思路,结合 AI 的决策和调度能力,为我们在其他需要固定流程的技术领域(如代码审计、漏洞扫描、数据分析)提供了极具价值的范本。在日常工作中,发掘并构建这样的自动化工作流,是提升工程师效能的关键一步。
希望本文分享的 APK 分析流水线能给你带来启发。如果你对构建自己的自动化技能或探讨更多 Android 安全 话题感兴趣,欢迎到 云栈社区 与更多开发者交流。