performing-dynamic-analysis-of-android-app
使用 Frida、Objection 和 Android Debug Bridge 对 Android 应用进行运行时动态分析, 在执行过程中观察应用行为、拦截函数调用、修改运行时值,并识别静态分析遗漏的漏洞。 适用于测试 Android 应用的运行时安全缺陷、Hook 敏感方法、绕过客户端保护措施 或分析混淆应用。适合 Android 动态分析、运行时 Hook、Frida Android 插桩或实时应用行为分析相关请求。
Best use case
performing-dynamic-analysis-of-android-app is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
使用 Frida、Objection 和 Android Debug Bridge 对 Android 应用进行运行时动态分析, 在执行过程中观察应用行为、拦截函数调用、修改运行时值,并识别静态分析遗漏的漏洞。 适用于测试 Android 应用的运行时安全缺陷、Hook 敏感方法、绕过客户端保护措施 或分析混淆应用。适合 Android 动态分析、运行时 Hook、Frida Android 插桩或实时应用行为分析相关请求。
Teams using performing-dynamic-analysis-of-android-app should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/performing-dynamic-analysis-of-android-app/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How performing-dynamic-analysis-of-android-app Compares
| Feature / Agent | performing-dynamic-analysis-of-android-app | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
使用 Frida、Objection 和 Android Debug Bridge 对 Android 应用进行运行时动态分析, 在执行过程中观察应用行为、拦截函数调用、修改运行时值,并识别静态分析遗漏的漏洞。 适用于测试 Android 应用的运行时安全缺陷、Hook 敏感方法、绕过客户端保护措施 或分析混淆应用。适合 Android 动态分析、运行时 Hook、Frida Android 插桩或实时应用行为分析相关请求。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 执行 Android 应用动态分析
## 适用场景
适用于以下情况:
- 静态分析结果需要在实际 Android 设备上进行运行时验证
- 目标应用使用了混淆技术(DexGuard、自定义打包器)导致静态分析效果有限
- 测试需要观察实际 API 调用、解密数据或运行时生成的值
- 评估 Root 检测、防篡改检测或反调试实现
**不适用场景**:未经授权不得在生产环境中使用——动态插桩可能改变应用行为并触发安全告警。
## 前置条件
- 已 root 的 Android 设备或模拟器(Genymotion、带可写系统的 Android Studio AVD)
- 设备上安装了与架构匹配的 Frida 服务端(arm64、x86_64)
- Python 3.10+ 及 `frida-tools` 和 `objection` 包
- 已配置 ADB 且设备已连接
- 目标 APK 已安装在设备上
## 工作流程
### 步骤 1:在 Android 设备上设置 Frida 服务端
```bash
# 检查设备架构
adb shell getprop ro.product.cpu.abi
# 输出:arm64-v8a
# 从 GitHub releases 下载匹配的 Frida 服务端
# https://github.com/frida/frida/releases
# 推送到设备
adb push frida-server-16.x.x-android-arm64 /data/local/tmp/frida-server
adb shell chmod 755 /data/local/tmp/frida-server
adb shell /data/local/tmp/frida-server &
# 验证 Frida 连接
frida-ps -U
```
### 步骤 2:枚举应用攻击面
```bash
# 列出所有包
frida-ps -U -a
# 附加 Objection 进行高级别探测
objection --gadget com.target.app explore
# 列出活动、服务、广播接收器
android hooking list activities
android hooking list services
android hooking list receivers
# 列出已加载的类
android hooking list classes
android hooking search classes com.target.app
```
### 步骤 3:Hook 敏感方法
```bash
# Hook 类的所有方法
android hooking watch class com.target.app.auth.LoginManager
# Hook 特定方法并转储参数
android hooking watch class_method com.target.app.auth.LoginManager.authenticate --dump-args --dump-return
# Hook 加密操作
android hooking watch class javax.crypto.Cipher --dump-args
android hooking watch class java.security.MessageDigest --dump-args
# Hook 网络调用
android hooking watch class okhttp3.OkHttpClient --dump-args
android hooking watch class java.net.URL --dump-args
```
### 步骤 4:编写自定义 Frida 脚本进行深度分析
```javascript
// hook_crypto.js - 拦截加密/解密操作
Java.perform(function() {
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.doFinal.overload("[B").implementation = function(input) {
var mode = this.getAlgorithm();
console.log("[Cipher] 算法: " + mode);
console.log("[Cipher] 输入: " + bytesToHex(input));
var result = this.doFinal(input);
console.log("[Cipher] 输出: " + bytesToHex(result));
return result;
};
function bytesToHex(bytes) {
var hex = [];
for (var i = 0; i < bytes.length; i++) {
hex.push(("0" + (bytes[i] & 0xFF).toString(16)).slice(-2));
}
return hex.join("");
}
});
```
```bash
# 执行自定义 Frida 脚本
frida -U -f com.target.app -l hook_crypto.js --no-pause
```
### 步骤 5:绕过 Root 检测
```javascript
// root_bypass.js - 常见 Root 检测绕过
Java.perform(function() {
// 绕过 RootBeer 库
var RootBeer = Java.use("com.scottyab.rootbeer.RootBeer");
RootBeer.isRooted.implementation = function() {
console.log("[RootBeer] isRooted() 已绕过");
return false;
};
// 绕过基于文件的通用 Root 检测
var File = Java.use("java.io.File");
var originalExists = File.exists;
File.exists.implementation = function() {
var path = this.getAbsolutePath();
var rootPaths = ["/system/app/Superuser.apk", "/system/xbin/su",
"/sbin/su", "/system/bin/su", "/data/local/bin/su"];
if (rootPaths.indexOf(path) >= 0) {
console.log("[Root] 已阻断检测: " + path);
return false;
}
return originalExists.call(this);
};
// 绕过 SafetyNet/Play Integrity
try {
var SafetyNet = Java.use("com.google.android.gms.safetynet.SafetyNetApi");
console.log("[SafetyNet] 发现该类 - 可能需要额外绕过");
} catch(e) {}
});
```
### 步骤 6:运行时分析网络通信
```javascript
// network_monitor.js - 监控所有 HTTP 请求
Java.perform(function() {
// Hook OkHttp3
try {
var OkHttpClient = Java.use("okhttp3.OkHttpClient");
var Interceptor = Java.use("okhttp3.Interceptor");
var Chain = Java.use("okhttp3.Interceptor$Chain");
console.log("[OkHttp] 正在监控网络请求...");
var Request = Java.use("okhttp3.Request");
Request.url.implementation = function() {
var url = this.url();
console.log("[OkHttp] URL: " + url.toString());
return url;
};
} catch(e) {
console.log("[OkHttp] 未找到,尝试 HttpURLConnection");
}
// Hook HttpURLConnection
var URL = Java.use("java.net.URL");
URL.openConnection.overload().implementation = function() {
console.log("[URL] 打开: " + this.toString());
return this.openConnection();
};
});
```
### 步骤 7:提取解密数据和机密
```bash
# 使用 Objection 快速提取
objection --gadget com.target.app explore
# 转储 Android Keystore 条目
android keystore list
android keystore dump
# 在堆中搜索敏感对象
android heap search instances com.target.app.model.User
android heap evaluate <handle> "JSON.stringify(clazz)"
# 内存字符串搜索
memory search "password" --string
memory search "api_key" --string
```
## 核心概念
| 术语 | 定义 |
|------|------|
| **动态插桩** | 通过向运行中的进程注入代码,在运行时修改应用行为 |
| **方法 Hook** | 替换或包装函数实现,以拦截参数和返回值 |
| **Frida 服务端** | 运行在目标设备上的守护进程,接收来自主机的插桩命令 |
| **Dalvik/ART 运行时** | Android 运行时环境;Frida 在 ART 级别 Hook Java/Kotlin 方法 |
| **堆检查** | 检查应用内存堆中的活跃对象,以提取运行时数据 |
## 工具与系统
- **Frida**:动态插桩工具包,用于向原生 Android 进程注入 JavaScript
- **Objection**:高级 Frida 封装,提供预置的 Android 和 iOS 安全测试命令
- **frida-trace**:自动化方法追踪工具,用于快速侦察应用行为
- **Drozer**:Android 安全评估框架,用于测试 IPC 和导出组件
- **Android Studio Profiler**:CPU、内存和网络活动的运行时监控
## 常见问题
- **Frida 版本不匹配**:设备上的 Frida 服务端必须与主机上的 frida-tools 版本匹配,版本不匹配会导致连接失败。
- **反 Frida 检测**:某些应用通过检查 Frida 服务端进程、扫描内存中的 Frida 特征或监控 `/proc/self/maps` 来检测 Frida。使用 Frida Gadget 注入或自定义服务端构建版本。
- **混淆类名**:应用 ProGuard/R8 后,类名和方法名会被缩短(如 `a.b.c.d()`)。使用 `android hooking search classes` 发现实际运行时名称。
- **多 DEX 应用**:跨多个 DEX 文件的大型应用可能在启动时未加载所有类。在应用完全初始化后,Hook 类加载器或使用 `Java.enumerateLoadedClasses()`。Related Skills
testing-android-intents-for-vulnerabilities
测试 Android 进程间通信(IPC)中 Intent 的安全漏洞,包括 Intent 注入、未授权组件访问、 广播嗅探、PendingIntent 劫持和 ContentProvider 数据泄露。适用于评估 Android 应用导出组件 攻击面、测试 Intent 数据流或评估 IPC 安全性的场景。适合涉及 Android Intent 安全、IPC 测试、 导出组件分析或 Drozer 评估的相关请求。
reverse-engineering-android-malware-with-jadx
使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 Android 威胁分析等请求。
performing-yara-rule-development-for-detection
通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。
performing-wireless-security-assessment-with-kismet
使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。
performing-wireless-network-penetration-test
执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。
performing-windows-artifact-analysis-with-eric-zimmerman-tools
使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。
performing-wifi-password-cracking-with-aircrack
在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。
performing-web-cache-poisoning-attack
在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。
performing-web-cache-deception-attack
通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。
performing-web-application-vulnerability-triage
使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。
performing-web-application-scanning-with-nikto
Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。
performing-web-application-penetration-test
遵循 OWASP Web 安全测试指南(WSTG)方法论,对 Web 应用程序执行系统化安全测试,识别认证、授权、 输入验证、会话管理和业务逻辑中的漏洞。测试人员以 Burp Suite 作为主要拦截代理,结合手动测试技术 发现自动化扫描器遗漏的缺陷。适用于 Web 应用渗透测试、OWASP 测试、应用安全评估或 Web 漏洞测试等请求场景。