Skip to main content

android-app-pentesting

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

معلومات المصدر

المستودع
wgpsec/AboutSecurity
آخر نشاط في المصدر
٢١ مايو ٢٠٢٦ في ٠٨:٥٣
لغة SKILL.md المكتشفة
الصينية
النجوم
١٬٧٧٨
التفرعات
٢٤٦

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
4 ملفات

عرض SKILL.md

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/)
عرض على GitHub