mcpField
A
Android-Pentesting-Skill

Android-Pentesting-Skill

github.com/dragonjar安全41048 次安装4 周前更新
代码仓库

关于 Android-Pentesting-Skill

Android-Pentesting-Skill 是面向 Android APK 审计与逆向分析的安全 skill,采用分阶段静态分析,并可按需进行动态验证。它强调限定应用自身代码范围、追踪漏洞上下文,并要求报告包含验证状态和具体 PoC。

主要功能

  1. 01分模式执行 APK 安全审计
  2. 02映射组件、深链接等攻击面
  3. 03追踪数据流并筛查漏洞
  4. 04支持 Semgrep 与专项静态检测
  5. 05生成带 PoC 的审计发现

适用场景

  1. 01审查 APK 或反编译源码
  2. 02测试导出组件与深链接安全
  3. 03分析移动应用漏洞或恶意软件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dragonjar/android-pentesting-skill --skill android-pentesting-skill

安装后在 Claude Code 中输入/android-pentesting-skill确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitattributes
.gitignore
CONTRIBUTING.md
LICENSE
README.es.md
README.md
assets/frida-scripts/
README.md
android-constructors-hook.js
android-anti-frida-countermeasures.js
android-argument-manipulation.js
android-early-instrumentation.js
dexdump.js
android-native-wrapper.js
biometric-bypass.js
anti-frida-bypass.js
comprehensive-tracer.js
android-file-access-monitor.js
crypto-intercept.js
flag-secure-bypass.js
flutter-channel-hook.js
intent-logger.js
jni-tracer.js
mediaprojection-bypass.js
ipc-abuse-helper.js
method-tracer.js
native-heap-tracer.js
mem-layout-viewer.js
keystore-inspector.js
jwt-token-monitor.js
native-hook.js

详细介绍

Android APK 安全审计

概述

确定性的 6 阶段静态分析 + 可选的动态确认工作流。尽早去除噪声,严格限定软件包范围。只有在理解了漏洞的来源、传播路径和接收点,或明确标记为需要动态确认时,才报告漏洞。

适用场景

  • 用户提供 APK 文件进行安全审查
  • 用户要求分析反编译后的 Android 源代码
  • 用户需要修改或重新打包 APK 进行测试
  • 用户需要移动安全测试或漏洞评估
  • 用户需要帮助测试导出的组件、深层链接或 Intent 注入
  • 用户提到 Android 逆向工程或恶意软件分析

关键规则

  1. 绝不报告缺乏追踪上下文的 grep 命中结果
  2. 始终将搜索范围限制在应用命名空间内(避免库代码噪声)
  3. 如果解码失败,立即停止并报告
  4. 发现问题时,始终使用祈使语气
  5. 绝不跳过验证——如有疑问,请标记为“需要动态确认”
  6. 始终提供具体的 PoC(adb 命令、Frida hook 或恶意 Intent)
  7. 绝不针对同一根本原因重复报告

质量提示:请花时间进行彻底分析。质量比速度更重要。不要跳过验证步骤——误报比漏报更糟糕。

执行模型

使用的工具: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 版本(frida Python 软件包)匹配,而不是 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
  1. 分析特定代码片段:不要让 AI 查找所有漏洞——应针对具体的可疑代码
  2. 提供上下文:包含完整的函数或类,而不只是代码片段
  3. 要求进行 CVSS 评分:请求使用 CVSS 4.0 评估严重性
  4. 验证发现结果:始终结合代码和 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
网络/TLSTrustManager、X509TrustManagerSSL 验证绕过
原生桥接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 参数
WebViewJavascriptInterface不受信任的 JS 调用
网络HttpResponseAPI 响应
存储SharedPreferences已存储的用户输入
外部Environment.getExternalStorageDirectory()文件系统数据
常见汇
汇方法影响
命令执行Runtime.exec()、ProcessBuilderRCE
WebView 加载loadUrl()、loadData()XSS、网络钓鱼
文件操作FileWriter、FileOutputStream路径遍历、LFI
IPC 广播sendBroadcast()Intent 注入
反射Class.forName()、getMethod()代码执行
原生调用JNI原生代码执行
SQLSQLiteDatabase.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.js Split 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 补充信息:

  1. 关联包名、应用标签、第一方域名、端点和脱敏后的密钥指纹。
  2. 除非明确授权主动探测,否则仅搜索被动公开来源。
  3. 在报告前,将域名分类为第一方、可能为第一方、第三方 SDK 或未知。
  4. 仅当 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.json0工具版本、可用性、预检结果
app-profile.json0框架、混淆情况、架构
attack-surface.json1导出组件、深层链接、权限
findings.json2-4按标准架构记录的所有发现
evidence/2-4截图、日志、PoC 命令
coverage-matrix.json5MASVS 控制项覆盖状态
final-report.html5执行摘要 + 技术发现
停止条件 — 立即停止并报告
条件操作
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 进行动态分析
证据标准

每项发现都必须包含:

  1. 文件 + 行号引用(动态分析则提供 Frida 跟踪)
  2. 证据片段(相关代码/数据)
  3. 攻击场景(攻击者如何利用)
  4. 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 }
}

参考索引

阶段文件阶段文件
0environment-setup、opencode-tooling、static-analysis-patterns、hybrid-webview-frameworks、kotlin-patterns、kotlin-async-security、kotlin-compose-security、kotlin-multiplatform-security、malware-analysis、tool-installation3attack-patterns、intent-injection、pendingintent-security、firebase-security、deep-link-exploitation、real-world-android-vulnerabilities
1android-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-auditing4dynamic-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
2dependency-analysis、supply-chain-security5cvss-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
Modapk-modification-guide、modern-android-coverageFWreact-native-security、react-native-new-arch、flutter-security、flutter-blutter-analysis、jetpack-compose-security-deep-dive、fuzzing-guide、passkey-fido2-security、mobsf-integration
CIautomation-scripts、ci-cd-integrationAIai-pentesting-guide、ai-prompts/java-security-analyzer、ai-prompts/native-binary-analyzer、ai-prompts/exploit-generator、ai-prompts/report-enhancer
Platscripts/04-android-15-16/android15-apis.js、scripts/04-android-15-16/passkey-test.js、scripts/04-android-15-16/privacy-sandbox-test.shKerandroid-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 专用 API
  • scripts/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-20938 RASP 绕过: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”,并明确指出覆盖范围的不足。

评论

支持 Markdown