reverse-engineering-android-malware-with-jadx

使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 Android 威胁分析等请求。

9 stars

Best use case

reverse-engineering-android-malware-with-jadx is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 Android 威胁分析等请求。

Teams using reverse-engineering-android-malware-with-jadx 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

$curl -o ~/.claude/skills/reverse-engineering-android-malware-with-jadx/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/reverse-engineering-android-malware-with-jadx/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/reverse-engineering-android-malware-with-jadx/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How reverse-engineering-android-malware-with-jadx Compares

Feature / Agentreverse-engineering-android-malware-with-jadxStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 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

# 使用 JADX 对 Android 恶意软件进行逆向工程

## 适用场景

- 可疑 Android APK 被报告为恶意软件或被移动威胁检测标记时
- 分析 Android 银行木马(Banking Trojan)、间谍软件(Spyware)、短信窃取器(SMS Stealer)或广告软件(Adware)样本时
- 确定应用收集哪些数据、将数据发送到何处以及滥用了哪些权限时
- 从 Android 恶意软件中提取 C2(Command & Control)服务器地址、加密密钥和配置数据时
- 了解银行木马使用的覆盖攻击(Overlay Attack)机制时

**请勿使用**:分析 APK 中混淆的原生 .so 库;请改用 Ghidra 或 IDA 进行原生 ARM 二进制分析。

## 前置条件

- JADX 1.5+(从 https://github.com/skylot/jadx/releases 下载)
- 安装了 `aapt2` 和 `adb` 工具的 Android SDK,用于 APK 检查
- apktool,用于完整的 APK 反汇编(包括 smali 代码和资源)
- Python 3.8+,安装 `androguard` 库用于自动化 APK 分析
- Frida,用于动态插桩(可选,用于运行时分析)
- 不含 Google 服务的隔离 Android 模拟器(Genymotion 或 Android Studio AVD)

## 工作流程

### 步骤 1:提取 APK 元数据和权限

检查 APK 结构和 AndroidManifest.xml:

```bash
# 获取 APK 基本信息
aapt2 dump badging malware.apk

# 提取 AndroidManifest.xml
apktool d malware.apk -o apk_extracted/ -f

# 使用 androguard 分析权限
python3 << 'PYEOF'
from androguard.core.apk import APK

apk = APK("malware.apk")

print(f"包名:      {apk.get_package()}")
print(f"应用名称:  {apk.get_app_name()}")
print(f"版本:      {apk.get_androidversion_name()}")
print(f"最低 SDK:  {apk.get_min_sdk_version()}")
print(f"目标 SDK:  {apk.get_target_sdk_version()}")

# 危险权限
dangerous_perms = {
    "android.permission.READ_SMS": "短信窃取",
    "android.permission.RECEIVE_SMS": "短信拦截",
    "android.permission.SEND_SMS": "高额短信欺诈",
    "android.permission.READ_CONTACTS": "通讯录采集",
    "android.permission.READ_CALL_LOG": "通话记录窃取",
    "android.permission.RECORD_AUDIO": "音频监控",
    "android.permission.CAMERA": "摄像头监控",
    "android.permission.ACCESS_FINE_LOCATION": "位置追踪",
    "android.permission.READ_PHONE_STATE": "设备指纹采集",
    "android.permission.SYSTEM_ALERT_WINDOW": "覆盖攻击",
    "android.permission.BIND_ACCESSIBILITY_SERVICE": "完全设备控制",
    "android.permission.REQUEST_INSTALL_PACKAGES": "旁加载应用",
    "android.permission.BIND_DEVICE_ADMIN": "设备管理员滥用",
}

print("\n危险权限:")
for perm in apk.get_permissions():
    if perm in dangerous_perms:
        print(f"  [!] {perm}")
        print(f"      风险: {dangerous_perms[perm]}")
    elif "android.permission" in perm:
        print(f"  [*] {perm}")

# 组件
print("\nActivity:")
for act in apk.get_activities():
    print(f"  {act}")

print("\nService:")
for svc in apk.get_services():
    print(f"  {svc}")

print("\nReceiver:")
for rcv in apk.get_receivers():
    print(f"  {rcv}")
PYEOF
```

### 步骤 2:使用 JADX 反编译

在 JADX 中打开 APK 进行 Java/Kotlin 源代码分析:

```bash
# 在 JADX GUI 中打开
jadx-gui malware.apk

# 命令行反编译(用于脚本化分析)
jadx -d jadx_output/ malware.apk --show-bad-code

# 使用所有选项反编译
jadx -d jadx_output/ malware.apk \
  --deobf \
  --deobf-min 3 \
  --deobf-max 64 \
  --show-bad-code \
  --threads-count 4

# 输出目录结构:
# jadx_output/
#   sources/           <- 反编译的 Java 源代码
#     com/malware/app/
#       MainActivity.java
#       C2Service.java
#       SMSReceiver.java
#   resources/         <- 解码后的资源(布局、字符串、assets)
#     AndroidManifest.xml
#     res/
#     assets/
```

### 步骤 3:识别恶意功能

在反编译的源代码中搜索可疑代码模式:

```bash
# 搜索网络通信
grep -rn "HttpURLConnection\|OkHttpClient\|Retrofit\|Volley\|URL(" jadx_output/sources/

# 搜索短信操作
grep -rn "SmsManager\|getDefault().sendTextMessage\|SMS_RECEIVED" jadx_output/sources/

# 搜索覆盖攻击代码
grep -rn "SYSTEM_ALERT_WINDOW\|TYPE_APPLICATION_OVERLAY\|WindowManager.LayoutParams" jadx_output/sources/

# 搜索无障碍服务(Accessibility Service)滥用
grep -rn "AccessibilityService\|onAccessibilityEvent\|performAction" jadx_output/sources/

# 搜索数据外泄
grep -rn "getDeviceId\|getSubscriberId\|getSimSerialNumber\|getLine1Number" jadx_output/sources/

# 搜索加密操作(密钥存储、加密)
grep -rn "SecretKeySpec\|Cipher.getInstance\|AES\|DES\|RSA" jadx_output/sources/

# 搜索动态代码加载
grep -rn "DexClassLoader\|PathClassLoader\|loadDex\|loadClass" jadx_output/sources/

# 搜索混淆字符串和解密函数
grep -rn "Base64.decode\|decrypt\|decipher\|xor" jadx_output/sources/
```

### 步骤 4:分析 C2 通信

追踪网络通信逻辑:

```python
# 从反编译代码中自动提取 C2
import os
import re

jadx_dir = "jadx_output/sources"

# C2 URL 和 IP 的匹配模式
url_pattern = re.compile(r'https?://[^\s"\'<>]+')
ip_pattern = re.compile(r'"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"')
base64_pattern = re.compile(r'"([A-Za-z0-9+/]{20,}={0,2})"')

urls = set()
ips = set()
b64_strings = set()

for root, dirs, files in os.walk(jadx_dir):
    for fname in files:
        if fname.endswith('.java'):
            filepath = os.path.join(root, fname)
            with open(filepath, 'r', errors='ignore') as f:
                content = f.read()

            for match in url_pattern.finditer(content):
                urls.add(match.group())
            for match in ip_pattern.finditer(content):
                ips.add(match.group(1))
            for match in base64_pattern.finditer(content):
                b64_strings.add(match.group(1))

print("发现的 URL:")
for u in urls:
    print(f"  {u}")

print("\nIP 地址:")
for ip in ips:
    print(f"  {ip}")

# 解码 Base64 字符串
import base64
print("\n解码的 Base64 字符串:")
for b64 in b64_strings:
    try:
        decoded = base64.b64decode(b64).decode('utf-8', errors='ignore')
        if any(c.isprintable() for c in decoded) and len(decoded) > 3:
            print(f"  {b64[:30]}... -> {decoded[:100]}")
    except:
        pass
```

### 步骤 5:检查原生库

检查可能包含额外恶意逻辑的原生代码:

```bash
# 列出 APK 中的原生库
unzip -l malware.apk | grep "\.so$"

# 提取原生库
unzip malware.apk "lib/*" -d apk_native/

# 检查原生库属性
file apk_native/lib/armeabi-v7a/*.so
readelf -d apk_native/lib/armeabi-v7a/*.so | grep NEEDED

# 从原生库中提取字符串
strings apk_native/lib/armeabi-v7a/libpayload.so | grep -iE "(http|url|key|encrypt|password)"

# 如需深入分析原生代码,导入 Ghidra:
# File -> Import -> 选择 .so 文件 -> 选择 ARM 架构
```

### 步骤 6:记录分析结果并提取 IOC

整理完整的 Android 恶意软件分析报告:

```
分析文档应包含:
- APK 元数据(包名、版本、签名证书)
- 权限分析及风险评估
- 组件分析(Activity、Service、Receiver、Provider)
- 恶意函数的反编译代码逐步说明
- C2 通信协议和端点
- 数据外泄方式和目标数据类型
- 持久化机制(设备管理员、无障碍服务)
- 规避技术(模拟器检测、Root 检测)
- 提取的 IOC(C2 URL、域名、IP、签名证书哈希)
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **APK(Android Package)** | Android 应用包格式,包含编译后的 DEX 字节码、资源、Manifest 和原生库 |
| **DEX 字节码** | Dalvik 可执行格式,包含编译后的 Java/Kotlin 代码;JADX 可将其还原为可读的 Java 源代码 |
| **覆盖攻击(Overlay Attack)** | 银行木马技术,利用 SYSTEM_ALERT_WINDOW 权限在合法银行应用上显示假 UI 层以窃取凭证 |
| **无障碍服务滥用(Accessibility Service Abuse)** | 恶意软件注册为无障碍服务,以捕获屏幕内容、执行操作并阻止卸载 |
| **Smali** | DEX 字节码的可读表示形式;apktool 使用的字节码与 Java 之间的中间表示 |
| **动态代码加载(Dynamic Code Loading)** | 运行时使用 DexClassLoader 加载额外 DEX 代码,以对静态分析隐藏恶意功能 |
| **设备管理员滥用(Device Admin Abuse)** | 恶意软件请求设备管理员权限,以阻止卸载并进行设备擦除威胁 |

## 工具与系统

- **JADX**:开源 DEX 到 Java 反编译器,支持 GUI 和 CLI,用于 Android APK 分析,具备反混淆功能
- **apktool**:用于将 Android APK 文件逆向工程为 smali 代码和解码资源
- **androguard**:用于自动化 Android APK 分析的 Python 框架,涵盖权限、组件和代码分析
- **Frida**:动态插桩工具包,用于在 Android 上运行时 hook Java 方法和原生函数
- **MobSF(Mobile Security Framework)**:针对静态和动态分析的自动化移动应用安全测试框架

## 常见场景

### 场景:分析 Android 银行木马

**背景**:某银行木马 APK 通过短信钓鱼(SMS Phishing)传播,目标为特定银行的客户。需要分析以识别目标银行、C2 基础设施和数据窃取机制。

**分析方法**:
1. 提取 APK 元数据,识别请求的权限(短信、无障碍服务、覆盖攻击、设备管理员)
2. 使用 JADX 反编译,搜索模拟银行应用 UI 的覆盖 Activity 类
3. 通过搜索代码中的包名列表,识别目标银行应用
4. 追踪短信拦截 Receiver,了解如何窃取双因素认证(2FA)验证码
5. 跟踪 C2 通信代码,提取服务器 URL 和命令协议
6. 检查 assets/ 目录中的 Web 注入配置文件
7. 提取所有 IOC,记录完整攻击链

**常见陷阱**:
- 分析前未对类名和方法名进行反混淆(应使用 JADX --deobf 标志)
- 遗漏安装后下载的动态加载 DEX 文件
- 忽略可能包含实际 C2 逻辑或加密例程的原生 .so 库
- 遗漏 assets/ 目录(可能包含加密配置或 Web 注入内容)

## 输出格式

```
Android 恶意软件分析报告
==================================
APK 文件:      update_bank.apk
包名:          com.android.systemupdate
SHA-256:       e3b0c44298fc1c149afbf4c8996fb924...
版本:          1.2.3
最低 SDK:      21 (Android 5.0)
签名证书:      SHA-256: abc123...(自签名)

分类结果
家族:  Anubis 银行木马
类型:  银行木马 / 短信窃取器 / 键盘记录器

危险权限
[!] RECEIVE_SMS          - 拦截传入短信(2FA 窃取)
[!] READ_SMS             - 读取短信消息
[!] SEND_SMS             - 发送高额短信
[!] SYSTEM_ALERT_WINDOW  - 针对银行应用的覆盖攻击
[!] BIND_ACCESSIBILITY   - 完全设备控制
[!] BIND_DEVICE_ADMIN    - 阻止卸载

恶意组件
Service:    com.android.systemupdate.C2Service(C2 通信)
Receiver:   com.android.systemupdate.SmsReceiver(短信拦截)
Activity:   com.android.systemupdate.OverlayActivity(凭证覆盖)

目标应用(共 23 款银行应用)
com.bank.example1, com.bank.example2, ...

C2 基础设施
主要服务器: hxxps://c2-server[.]com/api/bot
备用服务器: hxxps://backup-c2[.]net/api/bot
协议:       HTTPS POST,请求体为 JSON
Bot ID:     MD5(IMEI + Build.SERIAL)

提取的 IOC
域名: c2-server[.]com, backup-c2[.]net
IP:   185.220.101[.]42
URL:  hxxps://c2-server[.]com/api/bot
      hxxps://c2-server[.]com/api/injects
证书哈希: abc123def456...
```

Related Skills

testing-android-intents-for-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 Android 进程间通信(IPC)中 Intent 的安全漏洞,包括 Intent 注入、未授权组件访问、 广播嗅探、PendingIntent 劫持和 ContentProvider 数据泄露。适用于评估 Android 应用导出组件 攻击面、测试 Intent 数据流或评估 IPC 安全性的场景。适合涉及 Android Intent 安全、IPC 测试、 导出组件分析或 Drozer 评估的相关请求。

reverse-engineering-rust-malware

9
from killvxk/cybersecurity-skills-zh

使用 IDA Pro 和 Ghidra 对 Rust 编译的恶意软件进行逆向工程,掌握处理非空终止字符串、提取 crate 依赖项和 Rust 特有控制流分析的专项技术。

reverse-engineering-ransomware-encryption-routine

9
from killvxk/cybersecurity-skills-zh

对勒索软件加密例程进行逆向工程,以识别密码学算法、密钥生成缺陷,以及通过静态和动态分析挖掘潜在的解密机会。

reverse-engineering-malware-with-ghidra

9
from killvxk/cybersecurity-skills-zh

使用 NSA 的 Ghidra 反汇编器和反编译器对恶意软件二进制文件进行逆向工程,在汇编和伪 C 代码层面理解其内部逻辑、密码学例程、C2 协议和规避技术。适用于恶意软件逆向工程、反汇编分析、反编译、二进制分析或理解恶意软件内部机制等请求。

reverse-engineering-ios-app-with-frida

9
from killvxk/cybersecurity-skills-zh

使用 Frida 动态插桩对 iOS 应用进行逆向工程,在无源代码的情况下理解内部逻辑、 提取加密密钥、绕过安全控制并发现隐藏功能。适用于授权 iOS 渗透测试、分析专有协议、 理解混淆逻辑或从 iOS 二进制文件中提取运行时机密。适合 iOS 逆向工程、Frida iOS Hook、 Objective-C/Swift 方法追踪或 iOS 二进制分析相关请求。

reverse-engineering-dotnet-malware-with-dnspy

9
from killvxk/cybersecurity-skills-zh

使用 dnSpy 反编译器和调试器对 .NET 恶意软件进行逆向工程,分析 C#/VB.NET 源代码,识别混淆技术,提取配置信息,理解包括信息窃取器、远程访问木马(RAT)和加载器在内的恶意功能。适用于 .NET 恶意软件分析、C# 恶意软件反编译、托管代码逆向工程或 .NET 混淆分析等请求。

performing-static-malware-analysis-with-pe-studio

9
from killvxk/cybersecurity-skills-zh

使用 PEStudio 对 Windows PE(可移植可执行文件)恶意软件样本进行静态分析, 检查文件头、导入表、字符串、资源和指标,无需执行二进制文件。 识别可疑特征,包括加壳、反分析技术和恶意导入。适用于静态恶意软件分析、 PE 文件检查、Windows 可执行文件分析或执行前恶意软件分级等请求场景。

performing-malware-triage-with-yara

9
from killvxk/cybersecurity-skills-zh

使用 YARA 规则对文件模式、字符串、字节序列和结构特征进行匹配,快速分级和分类恶意软件样本, 识别已知恶意软件家族及可疑指标。涵盖规则编写、扫描和与分析流程的集成。适用于 YARA 规则创建、 恶意软件分类、模式匹配、样本分级或基于签名的检测等请求场景。

performing-malware-persistence-investigation

9
from killvxk/cybersecurity-skills-zh

系统性地调查 Windows 和 Linux 系统上的所有持久化机制,以识别恶意软件如何在重启后存活并维持访问。

performing-malware-ioc-extraction

9
from killvxk/cybersecurity-skills-zh

恶意软件 IOC(失陷指标)提取是指通过分析恶意软件,识别可操作的失陷指标,包括文件哈希、网络指标(C2 域名、IP 地址、URL)、注册表修改、互斥体名称、嵌入字符串和行为产物。

performing-malware-hash-enrichment-with-virustotal

9
from killvxk/cybersecurity-skills-zh

使用 VirusTotal API 富化恶意软件文件哈希,获取检测率、行为分析、YARA 匹配和上下文威胁情报,用于事件分类和 IOC 验证。

performing-firmware-malware-analysis

9
from killvxk/cybersecurity-skills-zh

分析固件镜像中嵌入的恶意软件、后门和未授权修改,目标包括路由器、IoT 设备、UEFI/BIOS 和嵌入式系统。涵盖固件提取、文件系统分析、二进制逆向工程和 Bootkit 检测。适用于固件安全 分析、IoT 恶意软件调查、UEFI Rootkit 检测或嵌入式设备入侵评估等请求场景。