关于 Android-Pentesting-Skill
Android-Pentesting-Skill 是面向 Android APK 审计与逆向分析的安全 skill,采用分阶段静态分析,并可按需进行动态验证。它强调限定应用自身代码范围、追踪漏洞上下文,并要求报告包含验证状态和具体 PoC。
主要功能
- 01分模式执行 APK 安全审计
- 02映射组件、深链接等攻击面
- 03追踪数据流并筛查漏洞
- 04支持 Semgrep 与专项静态检测
- 05生成带 PoC 的审计发现
适用场景
- 01审查 APK 或反编译源码
- 02测试导出组件与深链接安全
- 03分析移动应用漏洞或恶意软件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dragonjar/ android-pentesting-skill --skill android-pentesting-skill安装后在 Claude Code 中输入/android-pentesting-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitattributes.gitignoreCONTRIBUTING.mdLICENSEREADME.es.mdREADME.mdassets/frida-scripts/README.mdandroid-constructors-hook.jsandroid-anti-frida-countermeasures.jsandroid-argument-manipulation.jsandroid-early-instrumentation.jsdexdump.jsandroid-native-wrapper.jsbiometric-bypass.jsanti-frida-bypass.jscomprehensive-tracer.jsandroid-file-access-monitor.jscrypto-intercept.jsflag-secure-bypass.jsflutter-channel-hook.jsintent-logger.jsjni-tracer.jsmediaprojection-bypass.jsipc-abuse-helper.jsmethod-tracer.jsnative-heap-tracer.jsmem-layout-viewer.jskeystore-inspector.jsjwt-token-monitor.jsnative-hook.js详细介绍
Android APK 安全审计
概述
确定性的 6 阶段静态分析 + 可选的动态确认工作流。尽早去除噪声,严格限定软件包范围。只有在理解了漏洞的来源、传播路径和接收点,或明确标记为需要动态确认时,才报告漏洞。
适用场景
- 用户提供 APK 文件进行安全审查
- 用户要求分析反编译后的 Android 源代码
- 用户需要修改或重新打包 APK 进行测试
- 用户需要移动安全测试或漏洞评估
- 用户需要帮助测试导出的组件、深层链接或 Intent 注入
- 用户提到 Android 逆向工程或恶意软件分析
关键规则
- 绝不报告缺乏追踪上下文的 grep 命中结果
- 始终将搜索范围限制在应用命名空间内(避免库代码噪声)
- 如果解码失败,立即停止并报告
- 发现问题时,始终使用祈使语气
- 绝不跳过验证——如有疑问,请标记为“需要动态确认”
- 始终提供具体的 PoC(adb 命令、Frida hook 或恶意 Intent)
- 绝不针对同一根本原因重复报告
质量提示:请花时间进行彻底分析。质量比速度更重要。不要跳过验证步骤——误报比漏报更糟糕。
执行模型
使用的工具:bash、write、edit、read、glob、grep(核心工作流)。
工具链要求
开始前,请确认已安装以下工具:
- APKTool 3.0.2+(
apktool --version)——仅限 aapt2 模式;需要 Java 17+ - JADX 1.5.5+(
jadx --version) - Android SDK Platform Tools 36.0.2(
adb、fastboot) - Android SDK Build Tools 36.0.0(
apksigner、zipalign、aapt2、d8) - Frida 17.x(
frida --version)——⚠️ 设备上的 Frida-server 必须与 frida core 版本(fridaPython 软件包)匹配,而不是 frida-tools - Objection 1.12.5+(
objection --version) - APKiD 3.1.0+(
apkid --version)
运行 scripts/06-setup/preflight-check.sh(bash)、scripts/06-setup/preflight-check.py(通用,输出 JSON)或 scripts/06-setup/preflight-check.ps1(PowerShell)来验证所有工具。安装说明请参阅 references/environment-setup.md。
AI 驱动的分析
此技能包含 AI 驱动的分析能力。运行此技能的 AI 模型具备内置代码分析能力——请有针对性地使用,以提升分析结果。
何时使用 AI
- 分析反编译代码中的语义漏洞
- 追踪复杂的数据流(来源到接收点)
- 生成概念验证(PoC)漏洞利用
- 过滤自动化扫描的误报
- 理解混淆代码的行为
- 提升报告的质量和上下文信息
如何使用 AI
- 分析特定代码片段:不要让 AI 查找所有漏洞——应针对具体的可疑代码
- 提供上下文:包含完整的函数或类,而不只是代码片段
- 要求进行 CVSS 评分:请求使用 CVSS 4.0 评估严重性
- 验证发现结果:始终结合代码和 Frida 测试验证 AI 的发现
AI 分析提示词
完整方法和提示词模板请参阅 references/ai-pentesting-guide.md。
快速示例:
ANALYZE: Is this SQL injection exploitable?
Code: <vulnerable_query_with_user_input>
Context: <userId from Intent extra>
For each finding provide:
- CWE ID and CVSS 4.0 score
- Exploitation scenario
- Frida script to demonstrate (if applicable)
参考:
references/ai-pentesting-guide.md——完整的 AI 分析方法
清单:
references/project-manifest.md是所有打包文件和目录的权威清单。
审计模式选择
选择能够满足用户请求的最小模式。有关完整的功能标志和预设,请参阅 references/audit-modes.md。
| 模式 | 默认用途 | 说明 |
|---|---|---|
quick | 初步分诊 | 解码、清单、针对性静态检查、覆盖范围说明。 |
static | 无设备/模拟器 | 仅进行静态分析;将仅能通过运行时确认的问题标记为 Needs Dynamic Confirmation。 |
full | 标准 APK 审计 | 静态分析 + 动态分析 + MASVS + 可选的高管风险评分。 |
protected-app | 加固/RASP 阻止分析 | 遵循加固应用回退方案并记录覆盖缺口。 |
osint | 公开暴露面补充分析 | 仅进行被动且在范围内的 OSINT。 |
reporting-only | 现有 findings JSON | 去重、分诊、MASVS、风险评分、报告。 |
可选输入适配器 — Gmail APK 导入
scripts/00-ingestion/fetch-apk-gmail.py 会在审计工作流开始之前,将 Gmail 中的 APK 附件下载到工作目录。这是一个可选输入适配器,并非审计阶段:它不会修改阶段 -1 至 5,且只会生成文件和 ingestion-manifest.json(每个文件的发件人、邮件 ID、附件 ID、sha256)。
# List matches without downloading
python3 scripts/00-ingestion/fetch-apk-gmail.py --output-dir ./ingested/ --dry-run
# Download (requires OAuth credentials outside the repo)
python3 scripts/00-ingestion/fetch-apk-gmail.py --output-dir ./ingested/ --sender [email protected] --max 5
安全模型:Gmail 只读 OAuth 权限范围、发件人允许列表、APK 魔数验证并隔离无效文件、sha256 幂等性、不自动安装。通过 GMAIL_INGEST_CREDENTIALS / GMAIL_INGEST_TOKEN 环境变量指定凭据路径,并将其加入 git 忽略列表。请参阅 scripts/00-ingestion/README.md。
阶段 0 — 解码并检测框架
解码 APK
apktool d app.apk -o decoded/ # Decode resources + smali
jadx -d jadx_output app.apk # Decompile to Java
apkid app.apk # Detect framework/packer
框架检测
尽早识别应用架构,以便调整分析方式。
React Native:grep -r "com.facebook.react" decoded/AndroidManifest.xml · 检查 assets/ 中是否有 libhermes.so 和 index.android.bundle
Flutter:grep -r "io.flutter" decoded/AndroidManifest.xml · 检查是否有 libflutter.so 和 assets/flutter_assets/
Cordova/Ionic:grep -r "org.apache.cordova" decoded/AndroidManifest.xml · 检查 assets/www/ 中是否有 cordova.js
Xamarin:grep -r "mono\|com.xamarin" decoded/AndroidManifest.xml · 检查是否有 libmonodroid.so
.NET MAUI:检查 assemblies/*.dll(托管 DLL 包)、assemblies/TrimmerRoots.xml 和 libxamarin-android / Mono.Android.dll 构件 · 运行 scripts/01-cross-platform/dotnet-maui-analysis.sh <apk> <out>,自动提取托管程序集、使用 ilspycmd 反编译并进行 C# 安全分诊
参考:
references/hybrid-webview-frameworks.md,了解完整的检测脚本、Frida 检测钩子及框架特定的安全注意事项。
参考:
references/dotnet-maui-security.md,了解 .NET MAUI/Xamarin 托管程序集(IL/DLL)提取、C# 专用安全检查清单及 mono 运行时 Frida 钩子。
跨平台分析脚本:使用
scripts/01-cross-platform/cordova-analysis.sh、scripts/01-cross-platform/flutter-analysis.sh、scripts/01-cross-platform/react-native-analysis.sh和scripts/01-cross-platform/unity-analysis.sh,分别对 Cordova/Ionic、Flutter、React Native 和 Unity 应用进行框架特定的静态分析。这些脚本会提取框架特定的元数据、识别原生模块的使用情况,并指出各框架特有的安全注意事项。
混淆检测
- ProGuard/R8:类名类似
a.b.c、a$a、a$1 - DexGuard:额外的字符串加密和原生方法
- 自定义混淆:异常模式、混合命名方案
参考:
references/static-analysis-patterns.md,了解详细的检测模式。
阶段 1 — 攻击面映射
分析 AndroidManifest.xml
cat decoded/AndroidManifest.xml
aapt2 dump badging app.apk
导出的组件
导出的组件是攻击面:
| 组件 | 导出条件 | 安全检查 |
|---|---|---|
| 活动 | android:exported="true" | Intent 过滤器、权限要求 |
| 服务 | android:exported="true" | Intent 过滤器、权限要求 |
| 接收器 | android:exported="true" | Intent 过滤器、权限要求 |
| 提供程序 | android:exported="true" | 路径权限、读写权限 |
深层链接方案
提取并记录所有深层链接方案:
<intent-filter>
<data android:scheme="scheme" android:host="host" />
</intent-filter>
与安全相关的 XML 资源
检查 res/xml/ 中的以下内容:network_security_config.xml(TLS/明文传输)、文件提供程序路径、偏好设置。
参考:
references/android-manifest-checklist.md,包含 50 多项完整的清单检查。 IPC / Intent 滥用:参见references/intent-injection.md和references/pendingintent-security.md。
阶段 2 — 定向分诊
限定范围的 Grep 模式
始终仅在应用命名空间内执行 grep。使用 references/static-analysis-patterns.md 中的模式:
| 类别 | 示例模式 | 查找内容 |
|---|---|---|
| WebView 接收点 | loadUrl\(、evaluateJavascript | 加载不受信任的 URL |
| IPC 来源 | getIntent()、onNewIntent() | 未经净化的数据入口 |
| Intent 中继 | getParcelableExtra、getSerializableExtra、startActivity\(、sendBroadcast\( | 嵌套 Intent / confused deputy 模式 |
| 硬编码密钥 | password\s*=、api[_-]?key | 代码中的凭据 |
| 编码后的字面量 | Base64\.decode、"\x[0-9a-f]" | 混淆字符串 |
| 弱加密 | DES/、MD5、"AES/ECB" | 不安全的算法 |
| 不安全存储 | SharedPreferences、MODE_WORLD_READABLE | 未受保护的数据 → references/data-storage-auditing.md |
| 网络/TLS | TrustManager、X509TrustManager | SSL 验证绕过 |
| 原生桥接 | System\.loadLibrary、JNI 方法 | 原生代码接口 |
资源文件分析
检查 res/values/strings.xml 中是否有密钥:
grep -iE "(key|token|secret|password|api)" decoded/res/values/strings.xml
参考:
references/static-analysis-patterns.md,包含按漏洞类型分类的 100 多种 grep 模式。
阶段 2.5 — 静态分析规则(可选)
基于 semgrep 的静态分析模块使用 OWASP MASTG 规则扩充 grep 模式:
# Enable semgrep in auto-audit-static.sh
bash scripts/auto-audit-static.sh app.apk --semgrep
# Run semgrep scan standalone
python3 scripts/03-static-analysis/semgrep-scan.py decoded/ --output findings-semgrep.json
# Merge findings with existing findings
python3 scripts/03-static-analysis/merge-findings.py --input findings.json semgrep.json --output merged.json
# Update rules from upstream
bash scripts/03-static-analysis/update-rules.sh --fetch
功能:
- 70 多条符合 MASTG 的规则,涵盖加密、网络、存储、身份验证
- 非阻断式回退(semgrep 不可用时继续运行)
- 合并前按 CWE + 标题去重
- 阶段 2.5 在 grep 模式之后、数据流追踪之前运行
参考:
scripts/03-static-analysis/semgrep-scan.py --help,了解规则类别和更新工作流。
高级静态检测器 — ZipSlip、XEE、无障碍、剪贴板
四类用于弥补缺口的检测器,补充 grep 模式和 semgrep 规则:
# Run against an already-decoded directory (from Phase 0)
bash scripts/03-static-analysis/advanced-static-checks.sh -d decoded/ -o adv-static/
# Or decode + check in one step
bash scripts/03-static-analysis/advanced-static-checks.sh -a app.apk -o adv-static/
检测器:Zip 路径遍历(CWE-22/23)、XML 外部实体(CWE-611)、已导出的无障碍服务(CWE-926)、后台剪贴板捕获(CWE-200)。生成 advanced-static-findings.json(source: grep)和一份人工可读报告。
APK 版本差异分析 — N 日漏洞搜寻(可选)
如果有目标 APK 的两个版本(例如安全修复前后版本),可对其进行差异分析,以发现修复内容并重新发现底层漏洞:
# Full diff: inventory, decompiled sources, secrets rotation
bash scripts/03-static-analysis/version-diff-audit.sh --old app-v1.2.apk --new app-v1.3.apk
# Fast path without jadx decompilation
bash scripts/03-static-analysis/version-diff-audit.sh --old v1.apk --new v2.apk --skip-jadx
信号:新版本中已移除密钥(确认修复 → N 日漏洞)、清单差异中新增的导出组件、新增的原生库。生成 version-diff-findings.json(source: diff)。不会打印密钥值,只显示模式名称 + 文件 + 哈希前缀。
参考:
references/app-version-diffing.md,了解完整的漏洞搜寻工作流。
阶段 3 — 数据流追踪
源到接收点方法
映射从不受信任的来源到危险接收点的数据流:
常见来源
| 来源 | 方法 | 示例 |
|---|---|---|
| IPC(Activities) | getIntent() | 恶意 intent 数据 |
| IPC(Services) | onStartCommand() | 启动附加数据 |
| 深层链接 | getIntent().getData() | URL 参数 |
| WebView | JavascriptInterface | 不受信任的 JS 调用 |
| 网络 | HttpResponse | API 响应 |
| 存储 | SharedPreferences | 已存储的用户输入 |
| 外部 | Environment.getExternalStorageDirectory() | 文件系统数据 |
常见汇
| 汇 | 方法 | 影响 |
|---|---|---|
| 命令执行 | Runtime.exec()、ProcessBuilder | RCE |
| WebView 加载 | loadUrl()、loadData() | XSS、网络钓鱼 |
| 文件操作 | FileWriter、FileOutputStream | 路径遍历、LFI |
| IPC 广播 | sendBroadcast() | Intent 注入 |
| 反射 | Class.forName()、getMethod() | 代码执行 |
| 原生调用 | JNI | 原生代码执行 |
| SQL | SQLiteDatabase.execSQL() | SQL 注入 |
判定规则
| 规则 | 条件 | 操作 |
|---|---|---|
| 1 | 来源 → 汇之间存在直接流 | 报告为 可能 |
| 2 | 通过静态分析发现间接流 | 路径明确时报告为 可能 |
| 3 | 动态调用/反射调用 | 标记为 需要动态确认 |
| 4 | 原生边界 | 标记为 需要动态确认 |
| 5 | 库代码 | 验证应用是否进行了安全封装 |
| 6 | 未进行净化 | 提升严重级别 |
grep 无法发现的手动检查项
| 检查项 | grep 无法发现的原因 | 验证方法 |
|---|---|---|
| 运行时权限 | requestPermissions() 调用 | 跟踪 onRequestPermissionsResult |
| 自定义权限保护 | checkPermission() | 查找权限检查 |
| Activity 跳转与 intent 转发 | startActivity() 会隐藏嵌套 intent 转发和授权标志 | 跟踪 intent 构造、Parcelable 转发和 FLAG_GRANT_* 的使用 |
| 文件提供程序路径 | XML + 代码 | 将路径映射到公开的 content URI |
| 内容提供程序查询 | query() | 跟踪 URI 构造 |
参考:
references/attack-patterns.md,了解现代攻击向量:intent 注入、深层链接滥用、WebView 通用 XSS、任务劫持、文件提供程序路径遍历、广播窃取、组件劫持。
第 4 阶段 — 动态分析(可选)
当静态分析遇到瓶颈时使用:混淆、反射、原生代码、运行时保护。
运行时防御分析(RDA)
运行时防御分析模块基于 Frida 检测并绕过反分析机制:
# Run static audit first; RDA is a separate Phase 4 module
bash scripts/auto-audit-static.sh app.apk --semgrep
# Or via frida-exploit-helper.py
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --runtime-defense
# List available detectors
bash scripts/02-rasp/runtime-defense-analyzer.sh --list
# Run with active bypass mode (attempt to bypass detections)
bash scripts/02-rasp/runtime-defense-analyzer.sh app.apk com.target.app --active-mode --authorized-lab
可用检测器目录(18 项:14 个可执行检测器 + 4 个不适用的后端/云端条目):
rootbeer— RootBeer 库检测safetynet— SafetyNet 证明emulator— 模拟器检测debug— 调试器检测frida-detect— Frida 检测screenshot— 截图防护检测screenrecorded— 屏幕录制检测talsec、approov、dexguard、appdome、doverunner、digitalai— 商业 RASP/防护检测contrast、imperva、dynatrace、accuknox— 归类为不适用于直接 Android APK 检测
输出:findings-rda.json,包含检测器结果
参考:
scripts/02-rasp/README.md,查看检测器详细文档。
Drozer IPC 探测
通过 drozer 在 binder 层进行交互(providers、activities、services、receivers),补充静态组件映射:
# Safe enumeration only (default)
bash scripts/07-tools/drozer-automated.sh -p com.target.app
# Print exact commands without running them
bash scripts/07-tools/drozer-automated.sh -p com.target.app --print-commands
# Exploitation probes (SQLi strings, path traversal) — authorized lab only
bash scripts/07-tools/drozer-automated.sh -p com.target.app --authorized-lab
输出:drozer-findings.json(source: drozer)+ drozer-report.md,包含各阶段的原始证据。
参考:
references/drozer-ipc-playbook.md,查看逐组件操作手册。
Firebase 暴露检查(仅限授权资产)
自动验证从 APK 中提取的 Firebase URL/API 密钥(仅进行浅层读取,不执行写入):
# From APK sources/resources
bash scripts/07-tools/firebase-check.sh -a app.apk -o firebase/
# Direct URL or offline key extraction
bash scripts/07-tools/firebase-check.sh -u "https://proj.firebaseio.com" -o firebase/
bash scripts/07-tools/firebase-check.sh -a app.apk --offline
判定结果:/.json?shallow=true 返回 HTTP 200 = 数据库开放(严重);返回 401/403 = 已受保护;--offline 仅生成信息性的密钥清单发现项。
参考:
references/firebase-security.md→ 自动验证部分。
ADB 备份提取
测试攻击者在启用 allowBackup 时,通过 USB/PC 访问能提取哪些内容:
# Interactive: triggers adb backup on the connected device
bash scripts/07-tools/adb-backup-extract.sh -a com.target.app
# Parse an existing .ab file (24-byte header, zlib)
bash scripts/07-tools/adb-backup-extract.sh --from-file backup.ab -o backup-audit/
输出:backup-findings.json(source: adb)+ 备份敏感性判定。加密备份将以退出代码 3 结束(按设计不支持)。
参考:
references/adb-backup-enterprise.md,了解 .ab 格式、MDM/工作资料的攻击面以及企业检查清单。
高级动态技术
gRPC 拦截、SMS/OTP 拦截测试、无 Root 的 Play Integrity 绕过路径(LSPatch、Zygisk+PIF)、模拟器与设备决策矩阵,以及通过仓库中的跟踪脚本进行灰盒覆盖:
参考:
references/advanced-dynamic-techniques.md。
授权的 RASP 绕过验证
检测到 RDA 后,请使用 DRY 绕过运行器,而不要针对每个检测器重复编写 Frida 逻辑:
# List reusable bypass profiles
bash scripts/02-rasp/rasp-bypass-runner.sh --list-profiles
# Build a reviewed command from detector names
bash scripts/02-rasp/rasp-bypass-runner.sh \
--package com.target.app \
--detectors rootbeer,frida_detect,talsec \
--print-command
# Execute only in an authorized lab
bash scripts/02-rasp/rasp-bypass-runner.sh \
--package com.target.app \
--from-rda findings-rda.json \
--run --authorized-lab
唯一可信来源是 scripts/02-rasp/bypass-profiles.json;运行器会复用 assets/frida-scripts/ 下的脚本。请勿将绕过逻辑复制到检测器文件中。有关覆盖范围、限制和报告要求,请参阅 references/rasp-bypass-workflow.md。
Frida 集成
# Spawn app with hook
frida -U -f com.example.app -l script.js
# Attach to running process
frida -U com.example.app -l script.js
使用 frida-exploit-helper.py
frida-exploit-helper.py 脚本为 Frida 操作提供便捷封装,内置脚本和常用模式。
适用场景:以下情况优先使用 frida-exploit-helper.py,而不是直接使用 Frida CLI:
- 使用内置 Frida 脚本(绕过 SSL 固定、绕过 Root 检测等)
- 执行快速内存操作(读取、写入、查找基址)
- 查找可用脚本
- 简化 Frida 工作流
内置脚本示例:
# SSL pinning bypass
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --script ssl-pinning-bypass
# Root detection bypass
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --script root-detection-bypass
# List all available bundled scripts
python3 scripts/07-tools/frida-exploit-helper.py --list-scripts
# Display app memory layout (find base addresses)
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --layout
# Hook specific functions (malloc, free, etc.)
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --hook malloc,free
# Read memory at address
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --read 0x12345678 64
# Write to memory address
python3 scripts/07-tools/frida-exploit-helper.py -p com.target.app --write 0x12345678 deadbeef
主要标志:
-p, --package— 目标包名(大多数操作必需)--script— 使用内置脚本名称(使用--list-scripts查看选项),或指定 .js 文件路径--spawn/-s— 为目标包启动新进程--attach/-a— 附加到正在运行的进程--list-scripts— 显示所有可用的内置 Frida 脚本--layout— 显示内存布局和基址--hook— 要挂钩的函数列表,以逗号分隔--read ADDRESS SIZE— 读取指定地址(十六进制)处的内存,大小以字节为单位--write ADDRESS DATA— 向指定地址(十六进制)写入数据。数据可以是十六进制或字符串--base <library>— 获取指定模块的基址(需要库名)
参考:运行
scripts/07-tools/frida-exploit-helper.py --help查看完整选项和内置脚本目录。
参考:
assets/frida-scripts/中的内置 Frida 脚本。参阅references/frida-scripts-index.md查看权威目录。 针对性运行时分诊:使用assets/frida-scripts/android-file-access-monitor.js查看文件系统/存储的访问情况,使用assets/frida-scripts/jni-tracer.js发现 JNI/原生边界,使用assets/frida-scripts/ipc-abuse-helper.js进行被动 IPC 日志记录,以及有意的提供程序/深度链接验证。
脚本成熟度级别:
- 稳定(范围明确):在文档说明的覆盖范围内可用于生产环境。
ssl-pinning-bypass.js覆盖核心 Java TLS/TrustManager 路径(确切列表见其文件头——并非适用于所有场景的 OkHttp/WebView 解决方案)。root-detection-bypass.js、biometric-bypass.js、network-interceptor.js等脚本覆盖范围较广,但并非无限。- 测试版:功能可用但尚不完整——请谨慎使用
JNI 跟踪(原生库跟踪)
如需进行高级 JNI 和原生库分析,请使用 jnitrace:
# Install jnitrace
pip install jnitrace
# Trace all JNI functions in a native library (spawn mode)
jnitrace -l libnative-lib.so -m spawn com.target.app
# Trace with attach mode (attach to already-running app)
jnitrace -l libnative-lib.so -m attach com.target.app
# Trace only JNI methods matching a regex (include filter)
jnitrace -l libnative-lib.so -m spawn com.target.app \
-i ".*decrypt.*|.*sign.*"
# Exclude noisy JNI methods
jnitrace -l libnative-lib.so -m spawn com.target.app \
-e "GetStringUTFChars|ReleaseStringUTFChars"
# Hide JNIEnv/JavaVM struct calls to reduce noise
jnitrace -l libnative-lib.so -m spawn com.target.app \
--ignore-env --ignore-vm
# Output trace to JSON file for later analysis
jnitrace -l libnative-lib.so -m spawn com.target.app \
-o trace-output.json
编程方式使用(通过 npm 包):
npm install jnitrace-engine
在以下情况下使用 jnitrace:
- 分析自定义 JNI 绑定
- 了解原生库的行为
- 调试原生崩溃
- 跟踪原生代码中的加密操作
注意:
jnitrace要求使用 Frida spawn 模式启动应用。更多详情请参阅references/native-analysis.md;也可使用jni-tracer.js作为基于 Frida 的替代方案。
Objection 命令
# Modern syntax (preferred): objection -n <package> start
objection -n com.example.app start
# Legacy syntax (deprecated but still works): objection -g <package> explore
objection -g com.example.app explore
# Enumerate components
android hooking list activities
android hooking list services
android hooking list receivers
# Bypass protections
android sslpinning disable
# Enumerate Android Keystore entries
android keystore list
ADB 运行时测试
# Test exported activity
adb shell am start -n com.example.app/.MainActivity -a android.intent.action.VIEW -d "scheme://host"
# Test exported receiver
adb shell am broadcast -a com.example.app.ACTION -e key "value"
# Monitor logs
adb logcat | grep com.example.app
绕过 SSL Pinning:
references/dynamic-analysis-setup.md+assets/frida-scripts/ssl-pinning-bypass.jsSplit APK / AAB 运行时处理:references/dynamic-analysis-setup.md#9-split-apk--aab-runtime-handling,了解pm path、adb install-multiple和bundletool工作流。 绕过 RASP:references/rasp-bypass.md+assets/frida-scripts/native-root-detection-probe.js,用于处理反调试、反 Frida、模拟器检测和原生 Root 检查升级。 受保护应用的备用方案:references/packer-modern-unpacking.md#protected-app-fallback-decision-tree,了解运行时提取、spawn 模式插桩、内嵌插桩备用方案和仅静态分析覆盖处理。 沙箱审计:scripts/07-tools/inspect-app-sandbox.sh <pkg> <out>通过 tar-over-adb 从已 Root 的设备/模拟器拉取/data/data/<pkg>,并审计明文凭据、全局可读文件和未加密数据库(发现项的source=sandbox)。 Logcat 泄漏监控:python3 scripts/07-tools/live-logcat-analyzer.py --package <pkg> --output findings.json [--duration 120]流式读取 logcat,对令牌/PII/堆栈跟踪进行脱敏检测,并生成source=logcat发现项。
阶段 5 — 分类与报告
合规评分(可选)
在 CVSS 发现项之外生成 MASVS v2 合规评分:
# Generate MASVS compliance score
python3 scripts/05-scoring/calculate-score.py findings.json --json-output > score.json
# Generate full report with MASVS score
python3 scripts/07-tools/generate-report.py --input findings.json --masvs --output report.html
# Use custom MASVS mapping
python3 scripts/07-tools/generate-report.py --input findings.json --masvs --masvs-mapping scripts/05-scoring/masvs-mapping.json --output report.html
评分方法:
- 评估 23 项 MASVS v2 控制项
- 根据严重性加权扣分(Critical×10、High×5、Medium×2、Low×1)
- 最终得分:0–100,并附字母等级(A/B/C/D/F)
等级阈值:
- A:90–100(优秀)
- B:80–89(良好)
- C:70–79(可接受)
- D:60–69(较差)
- F:0–59(严重)
参考资料:请参阅
scripts/05-scoring/README.md和references/masvs-scoring-model.md,了解控制项定义、映射语义和未测试情况的处理方式。
执行摘要风险评分(可选)
生成执行摘要时,仅在去重和置信度筛查之后纳入综合风险评分。使用 references/risk-score-model.md,将其与 CVSS 和 MASVS 分开:
- CVSS = 单个漏洞的严重性
- MASVS = 控制项覆盖率/合规状况
- 执行摘要风险评分 = 综合运营风险敞口和覆盖缺口
不得因被驳回的误报而扣分。对于尚未解决的受保护代码、缺失的拆分包或跳过的动态验证,应将其视为覆盖缺口,而非已确认的漏洞。
OSINT 信息补充(可选)
如果测试范围允许被动侦察,请使用 references/osint-apk-recon.md 为阶段 5 补充信息:
- 关联包名、应用标签、第一方域名、端点和脱敏后的密钥指纹。
- 除非明确授权主动探测,否则仅搜索被动公开来源。
- 在报告前,将域名分类为第一方、可能为第一方、第三方 SDK 或未知。
- 仅当 OSINT 证据支持范围内的应用发现项或公开暴露声明时,才将其纳入报告。
置信度等级
| 等级 | 定义 | 示例证据 |
|---|---|---|
| 已确认 | 已验证完整的源到汇追踪 | 从 IPC 源到 Runtime.exec() 的直接调用链,且未经过任何清理 |
| 很可能 | 有力证据,但存在少量缺口 | 静态追踪清晰,但反射机制掩盖了最终汇 |
| 需要动态确认 | 静态分析无法得出明确结论 | 混淆代码或需要运行时验证的本机边界 |
严重性
使用 CVSS 4.0。完整的方法和严重性映射请参阅 references/cvss-scoring-guide.md。
发现项模板
## [ID] - [Title]
**Confidence**: [Confirmed/Likely/Needs Dynamic Confirmation]
**Severity**: [Critical/High/Medium/Low] (CVSS: [X.X])
**CWE**: [CWE-ID]
**OWASP**: [OWASP Category]
### Description
[1-2 sentences explaining what the vulnerability is]
### Affected Components
- **File**: `path/to/file.java`
- **Method**: `methodName()`
- **Component**: `[Activity/Service/Receiver/Provider]` (if applicable)
### Attack Scenario
1. Attacker [action, e.g., sends malicious intent with crafted data]
2. App [processing step, e.g., extracts parameter without validation]
3. Data propagates through [call chain]
4. Reaches sink [dangerous operation]
5. Results in [impact, e.g., arbitrary command execution]
### Proof of Concept
```bash
adb shell am start -n com.example.app/.MainActivity \
-a android.intent.action.VIEW \
-d 'exploit://host/path?payload=cmd%7Ccat%20/data/data/com.example.app/databases/db'
或提供用于动态验证的 Frida hook 脚本。
影响
- 机密性:[高/中/低/无] — [说明]
- 完整性:[高/中/低/无] — [说明]
- 可用性:[高/中/低/无] — [说明]
修复建议
// Provide secure code example
Intent intent = getIntent();
if (intent != null && intent.getData() != null) {
String input = intent.getData().getQueryParameter("path");
if (isValidPath(input)) {
loadUrl(input);
} else {
Log.w(TAG, "Invalid path detected");
}
}
private boolean isValidPath(String path) {
return path != null && !path.contains("..") &&
path.matches("^/safe/\\w+\\.html$");
}
CVSS 4.0 计算
[显示向量字符串和分数明细]
### Coverage Statement
End your report with:
覆盖范围分析:
- 静态分析:已完成(已分析所有反编译源码)
- 动态分析:[已完成/部分完成/未执行](部分完成时说明原因)
- 范围:[仅限 com.example.app.* 命名空间]
- 框架:[React Native/Flutter/Native/Standard]
- 混淆:[ProGuard/R8/DexGuard/Custom/None]
限制:
- [列出任何限制,例如“本机代码分析需要其他工具”]
- [任何无法分析的组件]
- [任何需要进一步验证的发现项]
发现项总数:X(严重:Y,高:Z,中:A,低:B)
> **Reference**: `references/reporting-templates.md` for executive summary format, remediation priority matrix, and presentation templates.
### Automated Report Generation
Use the `generate-report.py` script to generate professional HTML or Markdown reports from findings JSON:
```bash
# Generate HTML report
python3 scripts/07-tools/generate-report.py \
--input findings.json \
--output report.html \
--app-name "My App" \
--package-name "com.example.app"
# Generate Markdown report
python3 scripts/07-tools/generate-report.py \
--input findings.json \
--output report.md \
--app-name "My App" \
--package-name "com.example.app"
该脚本支持 JSON 数组格式和 JSONL 格式(每行一个发现项),并会自动:
- 按严重性排序发现项(严重项优先)
- 计算 CVSS 4.0 严重性分数
- 生成包含风险评级的执行摘要
- 映射 OWASP MASTG 类别
- 生成格式化的概念验证和修复建议部分
预期的 JSON 结构请参阅 scripts/test-findings.json。规范性约定见 references/schemas/finding.schema.json — 每个输出脚本都会根据该约定验证发现项。
APK 修改工作流
1. 解码
apktool d app.apk -o app-modified/
2. 修改 — Smali 补丁
编辑 app-modified/smali/ 中的 smali 文件:
.method public checkSecurity()Z
.locals 1
# Original: iget-boolean v0, p0, Lcom/example/App;->securityEnabled:Z
# Patched — always return true
const/4 v0, 0x1
return v0
.end method
资源修改
编辑 app-modified/res/ 中的 XML 或资源文件:
<bool name="debug_mode">true</bool>
3. 重新构建
apktool b app-modified/ -o app-modified.apk
4. 签名
# Generate keystore (first time only)
keytool -genkeypair -v -keystore my-release-key.jks -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000
# Align first
zipalign -v 4 app-modified.apk app-aligned.apk
# Sign (apksigner supports v1, v2, v3, v3.1 signatures)
# Verify keystore exists before signing
if [ ! -f "my-release-key.jks" ]; then
echo "Error: Keystore not found. Create it with keytool first."
exit 1
fi
# --ks-key-alias is required when the keystore contains multiple keys; recommended in all cases
apksigner sign \
--ks my-release-key.jks \
--ks-key-alias androiddebugkey \
--ks-pass pass:myPassword \
--key-pass pass:myPassword \
--out app-signed.apk \
app-aligned.apk
# Verify signature
apksigner verify --verbose app-signed.apk
5. 安装并验证
adb install -r app-signed.apk
参考:有关高级重新打包、签名验证绕过和 ADB 调试,请参阅
references/dynamic-analysis-setup.md。有关 smali 编辑的边界情况和故障排除,请参阅references/apk-modification-guide.md。
故障排除
APK 解码失败
apktool d -f app.apk -o decoded/ # Force mode (re-decodes even if output dir exists)
aapt2 dump badging app.apk # Verify APK integrity
apkid app.apk # Detect packer/protector
注意:Apktool 3.0+ 已移除
-api/--api-level标志。现在会从 APK 自动检测 API 级别。 如果已加壳 → 请参阅references/packing-unpacking.md了解脱壳技术。
JADX 显示的代码有误
jadx --show-bad-code -v app.apk # Show code even with errors
jadx --decompilation-mode fallback app.apk
jadx-gui app.apk # GUI for manual inspection
Frida 无法附加
adb shell ps -A | grep frida
adb shell getprop ro.product.cpu.abi
adb shell "su -c 'killall frida-server'"
adb shell "su -c '/data/local/tmp/frida-server -D &'"
完整设置说明:
references/dynamic-analysis-setup.md
混淆代码无法阅读
- 识别混淆工具:
apkid app.apk - 启用 JADX 去混淆:
jadx --deobf app.apk - 请参阅
references/static-analysis-patterns.md→ “混淆模式” - 切换到第 4 阶段检查运行时行为
何时升级到动态分析
当混淆情况不明确、存在反射、JNI 边界、反调试/Root 检测或 SSL Pinning 时,静态分析会遇到局限。→ 使用 references/dynamic-analysis-setup.md 进入第 4 阶段。
示例
示例 1:快速评估
com.example.app.apk → 解码 → 检测框架 → 审核 Manifest → 搜索密钥 → CVSS 报告
示例 2:绕过 SSL Pinning
frida -U -f com.target.app -l ssl-pinning-bypass.js → 如果失败,请参阅 references/rasp-bypass.md
示例 3:APK 重新打包
解码 → 修改 → 重新构建 → 签名 → 安装(请参阅 references/apk-modification-guide.md)
Agent 操作约定
本约定定义了每次审计必须产出什么、何时推进、何时停止,以及如何报告发现项。
必需的审计产物
每次 APK 审计都必须生成以下产物:
| 产物 | 阶段 | 描述 |
|---|---|---|
scope.json | -1 | 包名、目标范围、授权确认 |
toolchain-report.json | 0 | 工具版本、可用性、预检结果 |
app-profile.json | 0 | 框架、混淆情况、架构 |
attack-surface.json | 1 | 导出组件、深层链接、权限 |
findings.json | 2-4 | 按标准架构记录的所有发现 |
evidence/ | 2-4 | 截图、日志、PoC 命令 |
coverage-matrix.json | 5 | MASVS 控制项覆盖状态 |
final-report.html | 5 | 执行摘要 + 技术发现 |
停止条件 — 立即停止并报告
| 条件 | 操作 |
|---|---|
| APK 解码失败 | 报告 DECODE_FAILURE 并附上错误日志 |
| 无法确定包名 | 报告 SCOPE_UNCLEAR 并停止 |
| 无法隔离目标命名空间 | 报告 SCOPE_TOO_BROAD |
| 请求动态测试,但没有 Frida/设备 | 将发现标记为 Needs Dynamic Confirmation |
| 加密/加壳的 APK 阻碍分析 | 报告 PACKED_APK 并注明部分覆盖 |
发现状态
| 状态 | 使用时机 | 是否需要 CVSS |
|---|---|---|
| Confirmed | 已验证完整的源到汇数据流 | 是 |
| Likely | 有有力证据,但数据流追踪存在少量缺口 | 是 |
| Needs Dynamic Confirmation | 静态分析无法得出结论(混淆、反射、JNI) | TBD |
| Informational | 违反最佳实践,风险较低 | 可选 |
| Rejected | 此前已报告,且已确认是误报 | 不适用 |
APK 类型处理
| 类型 | 分析方法 |
|---|---|
| Standard APK | 完整的 6 阶段工作流 |
| Split APK / AAB | 阶段 0 → 检测基础功能与动态功能,提取/安装完整的拆分包集合,并分别分析每个拆分包;参见 dynamic-analysis-setup.md#9-split-apk--aab-runtime-handling |
| Packed/Protected | 阶段 0 → 静态基线分析、运行时提取/生成进程模式/内嵌插桩回退方案;若受阻 → 报告 PACKED_APK 并注明覆盖缺口 |
| React Native | 阶段 0 → 提取 Hermes 字节码,使用 scripts/01-cross-platform/react-native-analysis.sh |
| Flutter | 阶段 0 → 使用 Blutter 分析、原生 SSL 钩子 |
| Xamarin | 阶段 0 → 识别 Mono 运行时,分析捆绑程序集 |
| Obfuscated | 阶段 2 → 增强 grep + 条件允许时在阶段 4 进行动态分析 |
证据标准
每项发现都必须包含:
- 文件 + 行号引用(动态分析则提供 Frida 跟踪)
- 证据片段(相关代码/数据)
- 攻击场景(攻击者如何利用)
- CVSS 4.0 向量(Confirmed/Likely)或
TBD(Needs Dynamic)
覆盖声明
每份报告末尾都必须包含:
{
"coverage": {
"static_analysis": "complete | partial | not-performed",
"dynamic_analysis": "complete | partial | not-performed",
"framework": "react-native | flutter | cordova | xamarin | native",
"obfuscation": "proguard | dexguard | custom | none",
"native_code": "analyzed | not-analyzed | not-applicable",
"rasp": "detected | not-detected | not-tested"
},
"total_findings": { "critical": 0, "high": 0, "medium": 0, "low": 0 }
}
参考索引
| 阶段 | 文件 | 阶段 | 文件 |
|---|---|---|---|
| 0 | environment-setup、opencode-tooling、static-analysis-patterns、hybrid-webview-frameworks、kotlin-patterns、kotlin-async-security、kotlin-compose-security、kotlin-multiplatform-security、malware-analysis、tool-installation | 3 | attack-patterns、intent-injection、pendingintent-security、firebase-security、deep-link-exploitation、real-world-android-vulnerabilities |
| 1 | android-manifest-checklist、android-version-security、android-14-15-security-changes、android-15-security-guide、android-16-security-guide、androidx-security-migration、secure-storage-migration、data-storage-auditing | 4 | dynamic-analysis-setup、native-code-analysis、native-analysis、rasp-bypass、rasp-bypass-workflow、packing-unpacking、packer-modern-unpacking、react-native-hermes-analysis、frida-version-matching-guide、android-keystore2-testing、biometric-testing-comprehensive、frida-advanced-patterns、android-anti-frida-countermeasures |
| 2 | dependency-analysis、supply-chain-security | 5 | cvss-scoring-guide、cvss-calculator、reporting-templates、finding-template-cards、finding-quality-triage、masvs-scoring-model、risk-score-model、osint-apk-recon、audit-modes、frida-scripts-index、cheat-sheet-commands、cheat-sheet-frida-scripts |
| Mod | apk-modification-guide、modern-android-coverage | FW | react-native-security、react-native-new-arch、flutter-security、flutter-blutter-analysis、jetpack-compose-security-deep-dive、fuzzing-guide、passkey-fido2-security、mobsf-integration |
| CI | automation-scripts、ci-cd-integration | AI | ai-pentesting-guide、ai-prompts/java-security-analyzer、ai-prompts/native-binary-analyzer、ai-prompts/exploit-generator、ai-prompts/report-enhancer |
| Plat | scripts/04-android-15-16/android15-apis.js、scripts/04-android-15-16/passkey-test.js、scripts/04-android-15-16/privacy-sandbox-test.sh | Ker | android-binder-cve-2023-20938 |
| 全部 | mastg-quick-reference、mastg-best-practices、mastg-privacy-testing、quick-commands、quick-start-guide、workflow-diagram、cross-platform-testing-setup、play-integrity-api-testing、burp-mobsf-integration-guide |
脚本:
scripts/01-cross-platform/— 特定框架的分析(Cordova、Flutter、React Native、Unity)scripts/02-rasp/— 运行时防御分析(RDA)scripts/03-static-analysis/— semgrep 扫描 + 合并发现项scripts/04-android-15-16/— Android 15/16 专用 APIscripts/05-scoring/— MASVS v2 合规评分scripts/06-setup/— preflight-check + 验证。更改后验证技能本身:bash scripts/06-setup/validate-frida-scripts.sh(所有assets/frida-scripts/*.js+ RASP 检测器)以及bash scripts/06-setup/validate-shell-scripts.sh(所有*.sh)。scripts/07-tools/— 核心工具(frida-exploit-helper、generate-report、correlate-findings、mobsf-api-scan、burp-findings-export、rop-helper)auto-audit-static.sh— 主协调脚本audit-android-components.sh— 组件审计 漏洞利用:exploitation-guide、heap-exploitation、exploitation-decisions、android-binder-cve-2023-20938RASP 绕过:scripts/02-rasp/rasp-bypass-runner.sh使用scripts/02-rasp/bypass-profiles.json组合可复用的 Frida 绕过栈。请参阅references/rasp-bypass-workflow.md。 资源:Frida 脚本位于assets/frida-scripts/(请参阅references/frida-scripts-index.md);完整文件清单位于references/project-manifest.md
加载策略:仅在遇到相关技术难题时加载对应的参考文件。不要一次性加载所有参考资料。
平台特定说明
有关 Windows(PowerShell)、macOS 和 Linux 的详细设置,请参阅
references/environment-setup.md。在 macOS 上,请使用rg(ripgrep)代替grep -P——BSD grep 不支持 PCRE。
已知实现差距(截至 2026 年 4 月的整改检查)
在全面审查代码和声明期间,发现并部分缓解了以下差距:
- Semgrep 集成(阶段 2.5):此前完全无法运行(未传入
--json标志)。现已在semgrep-scan.py中修复。 - Agent 上下文中的预检:交互式安全/范围提示在
--json/非 TTY 环境下会卡住或失败。现在由 Agent/CI 运行时会自动跳过,并提供明确说明。 - Frida 绕过覆盖范围声明:有几处“STABLE”/“30+ implementations”声明(尤其是
ssl-pinning-bypass.js)夸大了实际代码的能力。已对脚本头部和关键文档中的相关表述加以限定;脚本本身现在也会如实说明其适用范围。 - Shell 错误处理:存在多个一概使用
&>/dev/null的情况和未加引号的循环(尤其是在audit-android-components.sh中)。关键解码流程现在使用run_logged辅助函数,可实际捕获日志并设置超时。其他耗时工具调用仍需进一步处理。 - DRY/共享库:由于导入方式存在问题,
scripts/lib/(发现项架构、规范化工具、MASVS 辅助工具)大多是未使用的代码。已开始进行部分接入;将 5–6 个重复的load_findings实现完全集中起来仍待完成。 - 已提交的构建产物:存在许多
__pycache__/和*.pyc文件。已扩充.gitignore。
这些问题已纳入本次更改的整改计划。在新环境中进行完整审计之前,务必先运行预检和验证器。
此技能优先考虑诚实、可复现的结果,而非听起来令人印象深刻的声明。如有疑问,请标记为“Needs Dynamic Confirmation”,并明确指出覆盖范围的不足。