android-app-pentesting
$
npx mdskill add wgpsec/AboutSecurity/android-app-pentestingExecute Android pentesting via static and dynamic analysis.
- Reveal APK vulnerabilities and bypass security mechanisms.
- Integrates Frida, jadx, apktool, Drozer, and Burp Suite.
- Triggers when analyzing APKs or testing mobile app security.
- Outputs structured reports with actionable security findings.
SKILL.md
.github/skills/android-app-pentestingView on GitHub ↗
---
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)
---
## 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 |
| `minSdkVersion < 24` | 低 | 不支持网络安全配置默认限制 |
### 字符串与密钥搜索
```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 测试 → FLAG_SECURE 是否设置
```
### 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: 网络通信安全
### 流量抓取配置
```
流量抓取方案?
├─ API Level < 24 → 直接设置 WiFi 代理到 Burp
├─ API Level >= 24 → 需修改网络安全配置
│ ├─ 修改 network_security_config.xml 信任用户 CA
│ └─ 重打包签名安装
├─ Flutter 应用 → 独立 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(API >= 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
# objection 绕过
objection --gadget com.target.app explore -s "android ui FLAG_SECURE false"
# 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/)
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|