Reverse engineers Android malware APKs using JADX: analyzes decompiled Java/Kotlin code, Manifest permissions, Receivers/Services for data theft, C2 comms, overlays. For mobile threat analysis.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cybersecurity-skills-zh:reverse-engineering-android-malware-with-jadxThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- 可疑 Android APK 被报告为恶意软件或被移动威胁检测标记时
请勿使用:分析 APK 中混淆的原生 .so 库;请改用 Ghidra 或 IDA 进行原生 ARM 二进制分析。
aapt2 和 adb 工具的 Android SDK,用于 APK 检查androguard 库用于自动化 APK 分析检查 APK 结构和 AndroidManifest.xml:
# 获取 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
在 JADX 中打开 APK 进行 Java/Kotlin 源代码分析:
# 在 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/
在反编译的源代码中搜索可疑代码模式:
# 搜索网络通信
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/
追踪网络通信逻辑:
# 从反编译代码中自动提取 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
检查可能包含额外恶意逻辑的原生代码:
# 列出 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 架构
整理完整的 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) | 恶意软件请求设备管理员权限,以阻止卸载并进行设备擦除威胁 |
背景:某银行木马 APK 通过短信钓鱼(SMS Phishing)传播,目标为特定银行的客户。需要分析以识别目标银行、C2 基础设施和数据窃取机制。
分析方法:
常见陷阱:
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...
npx claudepluginhub killvxk/cybersecurity-skills-zhReverse engineers Android APK malware using JADX to decompile Java/Kotlin code, identify data theft, C2 communication, privilege escalation, overlay attacks, and examine permissions/services.
Reverse engineers malicious Android APK files using JADX to analyze Java/Kotlin code, identify data theft, C2 communication, and overlay attacks.
Reverse engineers malicious Android APK files using JADX to analyze Java/Kotlin code, identify data theft, C2 communication, and overlay attacks.