# Detecting Mobile Malware Behavior

> 通过行为分析、权限滥用检测、网络流量监控和动态插桩，检测并分析移动应用中的恶意行为。 适用于分析可疑移动应用的数据泄露、C2 通信、凭据窃取、SMS 拦截或其他恶意软件指标。 适合移动恶意软件分析、应用行为监控、木马检测或可疑应用调查相关请求。

- Skill: `killvxk/detecting-mobile-malware-behavior` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/detecting-mobile-malware-behavior`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/detecting-mobile-malware-behavior/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/detecting-mobile-malware-behavior

---

# 检测移动恶意软件行为

## 适用场景

适用于以下情况：
- 分析用户提交或在事件响应中发现的可疑移动应用
- 监控企业移动设备中的恶意应用指标
- 对 APK/IPA 样本进行恶意软件分类
- 调查移动应用导致的数据泄露或未授权设备访问

**不适用场景**：不得使用本 skill 创建、增强或传播恶意软件。本 skill 仅用于防御性分析。

## 前置条件

- 隔离的分析环境（专用设备或模拟器，不连接生产网络）
- MobSF，用于自动化静态+动态分析
- Frida/Objection，用于运行时行为监控
- Wireshark/tcpdump，用于网络流量捕获
- Android 模拟器（AVD）或 Genymotion，用于安全执行
- VirusTotal API 密钥，用于哈希查询

## 工作流程

### 步骤 1：静态指标分析

```bash
# 计算样本哈希值
sha256sum suspicious.apk

# 查询 VirusTotal
curl -s "https://www.virustotal.com/api/v3/files/<SHA256>" \
  -H "x-apikey: <VT_API_KEY>" | jq '.data.attributes.last_analysis_stats'

# 从 AndroidManifest.xml 提取权限
aapt dump permissions suspicious.apk

# 高风险权限组合：
# READ_SMS + INTERNET = SMS 窃取器
# RECEIVE_SMS + SEND_SMS = SMS 拦截器/银行木马
# ACCESSIBILITY_SERVICE + INTERNET = 覆盖攻击能力
# CAMERA + RECORD_AUDIO + INTERNET = 间谍软件
# DEVICE_ADMIN + INTERNET = 勒索软件能力
# READ_CONTACTS + INTERNET = 联系人泄露
```

### 步骤 2：MobSF 自动化恶意软件扫描

```bash
# 上传到 MobSF
curl -F "file=@suspicious.apk" http://localhost:8000/api/v1/upload \
  -H "Authorization: <API_KEY>"

# 查看报告中的恶意软件指标：
# - 硬编码的 C2 服务器地址
# - 动态代码加载（DexClassLoader）
# - 基于反射的 API 调用（逃避静态分析）
# - 加密/混淆的有效载荷
# - Root 检测（恶意软件通常检查 root 权限）
# - 反模拟器检测（恶意软件逃避沙箱）
```

### 步骤 3：网络行为监控

```bash
# 在模拟器上启动数据包捕获
tcpdump -i any -w malware_traffic.pcap

# 或使用 mitmproxy 处理 HTTP/HTTPS
mitmproxy --mode transparent

# 监控以下行为：
# - 查询可疑/新注册域名的 DNS 请求
# - 连接已知的 C2 基础设施
# - 数据泄露模式（大型 POST 请求）
# - 信标行为（固定间隔的连接）
# - 非标准端口和协议
# - 域名生成算法（DGA）模式
```

### 步骤 4：使用 Frida 进行运行时行为监控

```javascript
// monitor_malware.js - 综合行为监控
Java.perform(function() {
    // 监控 SMS 访问
    var SmsManager = Java.use("android.telephony.SmsManager");
    SmsManager.sendTextMessage.overload("java.lang.String", "java.lang.String",
        "java.lang.String", "android.app.PendingIntent", "android.app.PendingIntent")
        .implementation = function(dest, sc, text, sent, delivery) {
            console.log("[SMS] 发送至: " + dest + " 内容: " + text);
            // 根据分析需求决定允许或阻断
            return this.sendTextMessage(dest, sc, text, sent, delivery);
        };

    // 监控文件操作
    var FileOutputStream = Java.use("java.io.FileOutputStream");
    FileOutputStream.$init.overload("java.lang.String").implementation = function(path) {
        console.log("[FILE-WRITE] " + path);
        return this.$init(path);
    };

    // 监控网络连接
    var URL = Java.use("java.net.URL");
    URL.openConnection.overload().implementation = function() {
        console.log("[NET] " + this.toString());
        return this.openConnection();
    };

    // 监控动态代码加载
    var DexClassLoader = Java.use("dalvik.system.DexClassLoader");
    DexClassLoader.$init.implementation = function(dexPath, optDir, libPath, parent) {
        console.log("[DEX-LOAD] 加载: " + dexPath);
        return this.$init(dexPath, optDir, libPath, parent);
    };

    // 监控命令执行
    var Runtime = Java.use("java.lang.Runtime");
    Runtime.exec.overload("java.lang.String").implementation = function(cmd) {
        console.log("[EXEC] " + cmd);
        return this.exec(cmd);
    };

    // 监控摄像头/麦克风访问
    var Camera = Java.use("android.hardware.Camera");
    Camera.open.overload("int").implementation = function(id) {
        console.log("[CAMERA] 摄像头已打开: " + id);
        return this.open(id);
    };

    // 监控内容提供者访问（联系人、通话记录）
    var ContentResolver = Java.use("android.content.ContentResolver");
    ContentResolver.query.overload("android.net.Uri", "[Ljava.lang.String;",
        "java.lang.String", "[Ljava.lang.String;", "java.lang.String")
        .implementation = function(uri, proj, sel, selArgs, sort) {
            console.log("[QUERY] " + uri.toString());
            return this.query(uri, proj, sel, selArgs, sort);
        };

    console.log("[*] 恶意软件行为监控已激活");
});
```

### 步骤 5：恶意软件类型分类

根据观察到的行为对样本进行分类：

| 行为模式 | 恶意软件类型 |
|----------|------------|
| SMS 拦截 + C2 通信 | 银行木马 |
| 摄像头/麦克风访问 + 数据上传 | 间谍软件/跟踪软件 |
| 文件加密 + 勒索信展示 | 移动勒索软件 |
| 广告注入 + 点击欺诈流量 | 广告软件 |
| Root 漏洞利用 + 持久化 | Rootkit |
| 联系人采集 + SMS 垃圾邮件 | 蠕虫/SMS 垃圾发送器 |
| 覆盖攻击 + 凭据捕获 | 凭据窃取器 |
| 加密货币挖矿网络活动 | 挖矿劫持软件 |

## 核心概念

| 术语 | 定义 |
|------|------|
| **动态代码加载** | 在运行时从外部源加载可执行代码，恶意软件常用此技术逃避静态分析 |
| **C2 信标** | 恶意软件定期向命令控制服务器发送的网络签入，可通过周期性时序模式识别 |
| **DGA** | 域名生成算法（Domain Generation Algorithm），为弹性 C2 基础设施创建伪随机域名 |
| **覆盖攻击** | 在合法应用上绘制虚假 UI 以捕获凭据，需要 SYSTEM_ALERT_WINDOW 权限 |
| **反模拟器** | 恶意软件用于检测沙箱/模拟器环境并抑制恶意行为的技术 |

## 工具与系统

- **MobSF**：用于初步恶意软件分类的自动化静态和动态分析工具
- **VirusTotal**：多引擎恶意软件扫描和哈希信誉查询
- **Frida**：通过方法 Hook 进行运行时行为监控
- **Wireshark**：用于 C2 通信模式的网络流量分析
- **Cuckoo Sandbox / CuckooDroid**：Android 样本的自动化恶意软件分析沙箱

## 常见问题

- **反分析规避**：复杂恶意软件会检测模拟器、调试器和 Frida。使用硬件设备和隐蔽 Frida 配置以获得准确分析结果。
- **时延触发载荷**：某些恶意软件仅在延迟后或特定触发条件下激活。需要长时间监控并模拟各种条件。
- **加密 C2**：使用加密通信的恶意软件需要 TLS 拦截或内存检查才能观察到载荷内容。
- **多阶段载荷**：初始 APK 可能是良性的，恶意载荷在后续下载。监控动态代码加载和文件下载行为。

