Skip to content
Back to skills

Android App Pentesting

BSecurity

Android 应用渗透测试方法论。涵盖 APK 静态分析(反编译/代码审计/Manifest分析)、动态分析(Frida Hook/SSL Pinning绕过/流量抓取)、数据存储安全、组件安全(Activity/Service/Provider/Receiver)、WebView 安全、Root 检测绕过。当 Agent 需要测试 Android 应用安全、分析 APK 文件、或绕过应用保护机制时触发。

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 17, 2026
developmentjavascriptpythonrustgojavashellbashsqlreactdocker

Works with

  • cli
  • api

Security analysis

B76/100
  • mediumUses curl or wget to download content
  • criticalAccesses sensitive system or user directories
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 4 files and shows the line behind each finding

Scanned October 17, 2026

npx -y skills add NetVar1337/agent-skill-canon --skill android-app-pentesting --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Android App Pentesting?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Android App Pentesting
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/netvar1337-android-app-pentesting/badge)](https://www.skillsdirectory.com/skills/netvar1337-android-app-pentesting)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: android-app-pentesting
description: |
  Android 应用渗透测试方法论。涵盖 APK 静态分析(反编译/代码审计/Manifest分析)、动态分析(Frida Hook/SSL Pinning绕过/流量抓取)、数据存储安全、组件安全(Activity/Service/Provider/Receiver)、WebView 安全、Root 检测绕过。当 Agent 需要测试 Android 应用安全、分析 APK 文件、或绕过应用保护机制时触发。
metadata:
  tags: [android, apk, frida, jadx, 移动安全, ssl-pinning, adb, 组件安全]
  category: mobile
---

# Android 应用渗透测试方法论

> **阶段流**: 环境准备 → APK静态分析 → 动态分析(Frida) → 组件安全测试 → 数据存储安全 → 网络通信安全 → 保护机制绕过

## 深入参考

- APK 静态分析详细命令与 Manifest 审计要点 → [references/android-static-analysis.md](references/android-static-analysis.md)
- Frida Hook 脚本与 SSL Pinning 绕过实战 → [references/android-frida-dynamic.md](references/android-frida-dynamic.md)
- React Native / Flutter / native so / RMS / Appium 运行时分析 → [references/android-frameworks-and-runtime.md](references/android-frameworks-and-runtime.md)

---

## Phase 0: 环境准备

### 设备/模拟器选择

```
测试设备选择?
├─ 真机(推荐 Pixel 系列)
│   ├─ Magisk 刷入 → systemless root
│   ├─ 启用 Zygisk + DenyList → Root 隐藏
│   └─ 保留原始 boot.img → OTA 恢复
├─ Android Studio 模拟器
│   ├─ x86 镜像 + ARM 翻译层(速度优先)
│   └─ Google APIs 镜像(需 Play Store 测试时)
└─ Genymotion(免费个人版 + VirtualBox)
    └─ Bridge 网络模式 → 方便从其他 VM 连接
```

### 核心工具链

| 工具 | 用途 | 安装 |
|------|------|------|
| adb | 设备通信/安装/调试 | Android SDK Platform Tools |
| jadx / jadx-gui | APK 反编译为 Java | `brew install jadx` |
| apktool | 反编译为 Smali / 资源提取 | `brew install apktool` |
| Frida + frida-tools | 动态 Hook / 运行时分析 | `pip install frida-tools` |
| objection | Frida 自动化封装 | `pip install objection` |
| Drozer | 组件安全测试 | GitHub Release |
| Burp Suite | 流量拦截 | PortSwigger |
| MobSF | 自动化静态+动态分析 | Docker 部署 |
| APKiD | 识别编译器/加壳/混淆 | `pip install apkid` |

### APK 获取

```bash
# 从设备提取
adb shell pm list packages | grep target
adb shell pm path com.target.app
adb pull /data/app/com.target.app-.../base.apk

# 多 Split APK 合并
mkdir splits
adb shell pm path com.target.app | cut -d ':' -f 2 | xargs -n1 -I{} adb pull {} splits/
java -jar APKEditor.jar m -i splits/ -o merged.apk
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

# 在线下载
# APKPure / APKMirror / APKCombo / apkd (GitHub)
# justapk: pip install justapk
justapk download com.target.app
justapk convert app.xapk -o output/
```

---

## Phase 1: APK 静态分析

### 反编译与代码审计

```
反编译路径选择?
├─ 需要 Java 源码审计 → jadx -d output/ target.apk
├─ 需要修改并重打包 → apktool d target.apk -o decoded/
├─ React Native 应用 → 解压 assets/index.android.bundle
├─ Xamarin 应用 → 解压 assemblies/ → dnSpy / ILSpy
└─ 加壳应用 → APKiD 识别壳类型 → 对应脱壳方案
```

```bash
# jadx 反编译
jadx -d jadx_output/ target.apk
# 搜索敏感信息
grep -rn "password\|api_key\|secret\|token\|firebase" jadx_output/

# apktool 反编译(Smali 级别)
apktool d target.apk -o apktool_output/

# APKiD 识别保护方案
apkid target.apk
```

### Manifest.xml 审计要点

```bash
# 提取 Manifest
aapt dump xmltree target.apk AndroidManifest.xml
```

关键检查项:

| 属性 | 风险 | 影响 |
|------|------|------|
| `android:debuggable="true"` | 高 | 可附加调试器/读取应用数据 |
| `android:allowBackup="true"` | 中 | adb backup 可提取应用数据 |
| `android:exported="true"` | 高 | 组件可被外部调用 |
| `android:usesCleartextTraffic="true"` | 中 | 允许明文 HTTP |
| `targetSdkVersion < 24` | 低 | 默认信任用户安装的 CA;>=24 时默认仅信任系统 CA,需检查 Network Security Config |

### 字符串与密钥搜索

```bash
# APK 中的 URL
apkurlgrep -a target.apk

# 泄露的密钥/凭据
apkleaks -f target.apk

# Firebase 数据库检测
grep -rn "firebaseio.com" jadx_output/
# 尝试访问: curl https://xxx.firebaseio.com/.json
```

### 自动化静态分析

```bash
# MobSF 静态分析
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
# 上传 APK → 自动生成报告

# mariana-trench (Facebook)
# 基于 source-sink 规则的漏洞扫描
mariana-trench --apk-path target.apk --output results/
```

---

## Phase 2: 动态分析 (Frida)

### Frida 基础操作

```bash
# 查看运行中的应用
frida-ps -Uai

# 附加到进程
frida -U -f com.target.app

# 使用脚本注入
frida -U -f com.target.app -l hook.js
```

### 常用 Hook 场景

```
动态分析目标?
├─ SSL Pinning 绕过 → Phase 6 详述
├─ Root 检测绕过 → Phase 7 详述
├─ 加密算法监控 → Hook javax.crypto.Cipher
├─ 敏感 API 监控 → Hook 文件/网络/短信/位置 API
├─ 生物认证绕过 → Hook BiometricPrompt
└─ 内存中搜索敏感数据 → Fridump
```

### 内存 Dump 与搜索

```bash
# Fridump 内存提取
python3 fridump3.py -u com.target.app
# 搜索敏感数据
strings dump/* | grep -E "password|token|Bearer"
# 搜索助记词
strings dump/* | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
```

### Keystore 审计

```bash
# Hook Keystore 操作
frida -U -f com.target.app -l tracer-cipher.js
# 脚本来源: github.com/WithSecureLabs/android-keystore-audit
```

---

## Phase 3: 组件安全测试

### 组件暴露面枚举

```bash
# Drozer 枚举
dz> run app.package.attacksurface com.target.app
# 输出: X activities exported, Y services exported, ...
```

### Activity 安全

```
Exported Activity 测试?
├─ 直接启动 → adb shell am start -n com.target.app/.SensitiveActivity
├─ 是否绕过认证直接访问敏感页面?
│   ├─ 是 → 认证绕过漏洞
│   └─ 否 → 检查 Intent 参数注入
├─ Activity 是否返回敏感数据? → setResult() 泄露
└─ Tapjacking 测试 → filterTouchesWhenObscured / onFilterTouchEventForSecurity / overlay 遮挡触摸处理
```

### Content Provider 安全

```bash
# 枚举 Provider
dz> run app.provider.info -a com.target.app

# SQL 注入测试
dz> run app.provider.query content://com.target.app.provider/users --projection "* FROM sqlite_master--"

# 路径穿越测试
dz> run app.provider.read content://com.target.app.provider/../../../../etc/hosts

# 文件 Provider 检查
dz> run scanner.provider.traversal -a com.target.app
```

### Service / Broadcast Receiver

```bash
# Service 枚举与交互
dz> run app.service.info -a com.target.app
dz> run app.service.start --action com.target.app.ACTION --component com.target.app/.MyService

# Broadcast 测试
dz> run app.broadcast.info -a com.target.app
dz> run app.broadcast.send --action com.target.app.CUSTOM_ACTION --extra string data "test"
```

### Deep Link / URL Scheme

```bash
# 枚举 scheme
grep -rn "android:scheme" apktool_output/AndroidManifest.xml

# 触发 deep link
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value"

# 检查点:
# 1. 参数是否接受路径穿越 → ../../unwanted-endpoint
# 2. 是否传递敏感数据(密码/token)通过 URL 参数
# 3. 是否存在 Open Redirect
```

---

## Phase 4: 数据存储安全

### 检查清单

```
数据存储位置?
├─ SharedPreferences → /data/data/pkg/shared_prefs/*.xml
│   └─ 是否存储明文密码/token?
├─ SQLite 数据库 → /data/data/pkg/databases/*.db
│   └─ 是否加密? 密钥是否硬编码?
├─ 内部存储 → /data/data/pkg/files/
│   └─ MODE_WORLD_READABLE/WRITABLE?
├─ 外部存储 → /sdcard/ (全局可读写)
│   └─ 是否存储敏感数据?
├─ Keystore → Android Keystore System
│   └─ 密钥是否绑定设备? 是否需要认证?
└─ 后台截图 → /data/system_ce/0/snapshots/
    └─ FLAG_SECURE 是否设置?
```

```bash
# 检查 SharedPreferences
adb shell run-as com.target.app cat /data/data/com.target.app/shared_prefs/*.xml

# 检查数据库
adb shell run-as com.target.app ls /data/data/com.target.app/databases/
# 拉取并用 sqlite3 检查
adb pull /data/data/com.target.app/databases/app.db
sqlite3 app.db ".tables"
sqlite3 app.db ".schema users"
sqlite3 app.db "SELECT * FROM users;"

# 检查文件权限
adb shell run-as com.target.app ls -la /data/data/com.target.app/files/
```

---

## Phase 5: 网络通信安全

### 流量抓取配置

```
流量抓取方案?
├─ 应用 targetSdkVersion < 24 → 默认信任用户安装的 CA,可直接设置 WiFi 代理到 Burp
├─ 应用 targetSdkVersion >= 24 → 默认不信任用户 CA,需检查/修改 Network Security Config
│   ├─ 修改 network_security_config.xml 信任 user certificates
│   └─ 重打包签名安装,或把 Burp CA 装入系统证书区(需 root)
├─ Flutter 应用 → 可能使用独立 TLS/CA 逻辑,需额外处理
│   └─ 参考 flutter SSL pinning bypass
└─ 非 HTTP 流量 → tcpdump / iptables 转发
```

```bash
# 安装 Burp CA 到系统(需 root)
# 导出 Burp CA → DER 格式 → 转 PEM
openssl x509 -inform DER -in cacert.der -out cacert.pem
# 计算 hash
HASH=$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1)
cp cacert.pem /system/etc/security/cacerts/${HASH}.0
chmod 644 /system/etc/security/cacerts/${HASH}.0

# 修改 network_security_config.xml(targetSdkVersion >= 24 时常见)
# 在 res/xml/network_security_config.xml 中添加:
# <trust-anchors><certificates src="user" /></trust-anchors>
```

### SSL Pinning 检测与绕过

```
SSL Pinning 类型?
├─ OkHttp CertificatePinner → Frida Hook
├─ 自定义 TrustManager → Frida Hook
├─ Network Security Config → 修改 XML 重打包
├─ WebView SSL 处理 → Hook WebViewClient
└─ 未知实现 → SSLPinDetect 静态扫描定位
```

```bash
# 静态检测 Pinning 实现
python sslpindetect.py -f target.apk -a apktool.jar

# apk-mitm 自动绕过(无需 root)
npx apk-mitm target.apk

# objection 绕过
objection --gadget com.target.app explore --startup-command "android sslpinning disable"

# Frida 绕过(通用脚本)
frida -U -f com.target.app -l ssl-pinning-bypass.js
```

---

## Phase 6: 保护机制绕过

### Root 检测绕过

```
Root 检测机制?
├─ 文件检查 (/su, /system/xbin/su, Cydia 等)
│   └─ Magisk DenyList 隐藏
├─ SafetyNet / Play Integrity
│   └─ 硬件级别 attestation 难以绕过
│   └─ 基本 attestation → Play Integrity Fix (Zygisk 模块)
├─ RootBeer / 自定义检测库
│   └─ Frida Hook 返回值
└─ 系统属性检查 (ro.debuggable, ro.secure)
    └─ MagiskHide Props Config
```

```bash
# objection 绕过 root 检测
objection --gadget com.target.app explore --startup-command "android root disable"

# Frida Hook 通用 root 检测绕过
frida -U -f com.target.app -l anti-root.js
```

### 模拟器检测绕过

```bash
# 检测点: Build.FINGERPRINT, Build.MODEL, CPU_ABI, /dev/qemu_pipe
# Frida Hook Build 类属性
```

### 反调试/反 Frida 绕过

```
反 Frida 检测方式?
├─ 检查 frida-server 端口 (27042)
│   └─ 更改监听端口: frida-server -l 0.0.0.0:1234
├─ 检查 /proc/self/maps 中的 frida 库
│   └─ 使用 linjector 注入(无 ptrace)
├─ 检查 D-Bus 协议特征
│   └─ 使用自编译 Frida gadget
└─ 自杀式 kill(getpid()) 反分析
    └─ Hook Process.killProcess / exit
```

### 截图/录屏保护绕过

```bash
# 关闭 FLAG_SECURE,便于截图、录屏和动态分析记录
objection --gadget com.target.app explore -s "android ui FLAG_SECURE false"
```

### 生物认证绕过

```bash
# Frida 绕过指纹
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f com.target.app
```

---

## Phase 7: 客户端注入漏洞

### WebView 安全

```
WebView 配置检查?
├─ JavaScript 启用 → setJavaScriptEnabled(true) → XSS 风险
├─ File 协议访问 → setAllowFileAccess(true) → LFI 风险
├─ addJavascriptInterface → RCE(API < 17)
└─ WebViewClient 证书处理 → 忽略 SSL 错误?
```

### SQL 注入

- Content Provider 的 query/insert/update/delete 方法
- 自定义数据库操作是否参数化

### Intent 注入

- 代理 Activity/Service 接收 Intent 后直接调用 `startActivity()`
- WebView URL 通过 `Intent.parseUri()` 解析 → 恶意 Intent 构造

---

## 自动化分析工具速查

| 工具 | 类型 | 用法 |
|------|------|------|
| MobSF | 静态+动态 | Docker 部署,Web UI |
| Qark | 静态 | `qark --apk target.apk` |
| AndroBugs | 静态 | `python androbugs.py -f target.apk` |
| SUPER | 静态 | `super-analyzer target.apk` |
| Androwarn | 静态(行为) | `python androwarn.py -i target.apk -r html` |
| mariana-trench | 静态(数据流) | `mariana-trench --apk-path target.apk` |
| ReverseAPK | 静态 | `reverse-apk target.apk` |

---

## 恶意软件分析要点

当分析可疑 APK 而非渗透测试时,额外关注:

- 原生 so 库加载链: `System.loadLibrary` → 解密第二层 ELF → `InMemoryDexClassLoader` 无文件 DEX
- `InMemoryDexClassLoader` 使用 → 内存级 DEX 加载(Frida Hook dump)
- `AccessibilityService` 滥用 → 覆盖层攻击 / ACTION_SET_TEXT 劫持
- FCM 作为 C2 通道 → 检查 Firebase 消息触发条件
- 前台 Service + MediaPlayer 持久化 → 进程保活

---

## 参考资源

- [OWASP Mobile Application Security](https://owasp.org/www-project-mobile-app-security/)
- [OWASP MASTG - Android Testing Guide](https://mas.owasp.org/MASTG/)
- [HackTricks - Android App Pentesting](https://book.hacktricks.wiki/mobile-pentesting/android-app-pentesting/)
- [Frida CodeShare](https://codeshare.frida.re/)

Files in this skill

  • SKILL.md14 KB
  • references/android-frameworks-and-runtime.md4.3 KB
  • references/android-frida-dynamic.md6.6 KB
  • references/android-static-analysis.md5.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.