应用安全 --- 识别壳
免责声明
本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。
一、什么是"壳"
text
原始程序 加壳后的程序
┌──────────────┐ ┌──────────────────────┐
│ .text 代码 │ │ 加壳stub(解压/解密) │ ← 新入口点
│ .data 数据 │ ──加壳──▶ ├──────────────────────┤
│ .rsrc 资源 │ │ 被压缩/加密的原始代码 │ ← 高熵值
│ 导入表 │ │ 被压缩/加密的原始数据 │
└──────────────┘ │ 被混淆的导入表 │
└──────────────────────┘
运行时:
stub 先执行 → 解压/解密原始代码 → 跳转到 OEP(原始入口点)
二、壳的完整分类体系
大分类
text
壳(Shell/Packer/Protector)
├── 1. 压缩壳(Compressor) → 减小体积,轻度保护
├── 2. 加密壳(Crypter) → 加密代码,防静态分析
├── 3. 保护壳(Protector) → 综合反调试/反逆向
├── 4. 虚拟机壳(VM Protector) → 代码虚拟化,最强保护
├── 5. 捆绑壳(Binder/Joiner) → 捆绑多个文件
├── 6. 混淆器(Obfuscator) → 代码变形,非传统壳
├── 7. Android/移动端壳 → APK/DEX 保护
├── 8. .NET/Java 壳 → 托管代码保护
├── 9. macOS/Linux ELF 壳 → *nix 平台保护
└── 10. 自定义/私有壳 → 恶意软件自用
三、所有壳的详细列表
1. 压缩壳(Compressor)
主要目的是减小文件体积,保护强度低。
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 平台 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ UPX │ PE/ELF/Mach-O│ 最常见,开源,节名 UPX0/UPX1 │
│ ASPack │ PE │ 节名 .aspack,入口特征 pushad │
│ FSG │ PE │ 极小stub,节合并为一个 │
│ MEW │ PE │ 极高压缩率,节名 MEW │
│ MPRESS │ PE/Mach-O │ 类似UPX,节名 .MPRESS1/.MPRESS2 │
│ PECompact │ PE │ 节名 .pec1/.pec2,支持插件 │
│ Petite │ PE │ 节名 .petite,入口 pushad/popad │
│ PackMan │ PE │ 早期压缩壳 │
│ UPack │ PE │ 扭曲PE头部,压缩率高 │
│ WinUpack │ PE │ UPack 的GUI版 │
│ kkrunchy │ PE │ 64KB intro 场景专用 │
│ RLPack │ PE │ 节名 .packed,简单压缩 │
│ nPack │ PE │ 国产压缩壳 │
│ NSPack │ PE │ 北斗压缩壳,节名 .nsp0/.nsp1 │
│ JDPack │ PE │ 简单压缩壳 │
│ WWPack32 │ PE │ 节名 .WWP32 │
│ Neolite │ PE │ 透明压缩壳 │
│ PKLite32 │ PE │ DOS时代 PKLite 的32位版 │
│ Diet │ DOS/PE │ 古老的压缩工具 │
│ LZEXE │ DOS │ DOS 时代经典 │
│ UPX (Android) │ ELF/SO │ Android native lib 的 UPX 压缩 │
└──────────────────┴─────────────┴───────────────────────────────────────┘
2. 加密壳(Crypter)
主要目的是加密代码,防止静态分析。
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 平台 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ PELock │ PE │ 多层加密,反调试 │
│ PESpin │ PE │ 强加密+自修改代码 │
│ PCGuard │ PE │ 代码加密+CRC校验 │
│ PE-Armor │ PE │ 商业加密壳 │
│ RCryptor │ PE │ 多态加密 │
│ tElock │ PE │ 加密+反调试+CRC │
│ SVK Protector │ PE │ 俄罗斯加密壳 │
│ EXECryptor │ PE │ 商业级,代码变换+加密 │
│ PE-Crypt32 │ PE │ 简单 XOR 加密 │
│ Shrinker │ PE │ 压缩+加密 │
│ YodaCrypter │ PE │ 开源加密壳 │
│ AntiCrack Protector│PE │ 加密+反调试 │
│ BangCle (梆梆) │ Android │ DEX 加密 │
│ Ijiami (爱加密) │ Android │ DEX 加密+SO保护 │
│ Nagapt (娜迦) │ Android │ DEX 加密+虚拟化 │
└──────────────────┴─────────────┴───────────────────────────────────────┘
3. 保护壳(Protector)
综合性保护:加密 + 反调试 + 反转储 + 完整性校验。
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 平台 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ Themida │ PE │ Oreans出品,节名 .themida,VM+加密 │
│ WinLicense │ PE │ Themida 的授权版,License 绑定 │
│ VMProtect (VMP) │ PE │ 最强VM壳之一,节名 .vmp0/.vmp1 │
│ Obsidium │ PE │ 强反调试+代码虚拟化 │
│ Armadillo │ PE │ 经典保护壳,CopyMem/Debug-Blocker │
│ ASProtect │ PE │ 强壳,多态代码+反调试 │
│ Enigma Protector │ PE │ 虚拟文件系统+注册系统 │
│ SafeEngine │ PE │ 国产,SE壳,代码虚拟化 │
│ ACProtect │ PE │ 代码变换+反调试+压缩 │
│ ZProtect │ PE │ 国产保护壳 │
│ Morphine │ PE │ 多态引擎+加密 │
│ yoda Protector │ PE │ 反调试+加密+多态 │
│ RLProtect │ PE │ RLPack 的保护版 │
│ StarForce │ PE │ 驱动级保护(游戏常用) │
│ SecuROM │ PE │ Sony 游戏保护 │
│ SafeDisc │ PE │ Macrovision 游戏保护 │
│ Denuvo │ PE │ 现代游戏保护,VM+服务器验证 │
│ EasyAntiCheat │ PE │ 游戏反作弊(Epic) │
│ BattlEye │ PE │ 游戏反作弊 │
│ nProtect GameGuard│PE │ 韩国游戏保护 │
│ HyperTech Crackproof│PE │ 防破解壳 │
│ Krypton │ PE │ 小众保护壳 │
│ PEBundle │ PE │ DLL捆绑+保护 │
│ DotFix NiceProtect│PE │ .NET+native 保护 │
│ BoxedApp Packer │ PE │ 虚拟化运行环境 │
└──────────────────┴─────────────┴───────────────────────────────────────┘
4. 虚拟机壳(VM Protector)★ 最强保护
将原始指令转换为自定义字节码,用虚拟机解释执行。
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 平台 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ VMProtect (VMP) │ PE │ 最知名,多种VM架构,节名 .vmp │
│ Themida/WinLic │ PE │ Tiger/Fish/Dolphin 等多种VM引擎 │
│ Code Virtualizer │ PE │ Oreans出品(Themida 同家族) │
│ SafeEngine Shielden│PE │ 国产VM壳 │
│ Enigma VirtualBox│ PE │ 虚拟化执行环境 │
│ ReWolf x86 virt │ PE │ 开源 x86 虚拟化 │
│ MASM VM │ PE │ 自定义VM demo │
│ Alcatraz │ PE │ 开源 VM obfuscator │
│ Tigress │ C source │ 学术级 C 源码虚拟化混淆 │
└──────────────────┴─────────────┴───────────────────────────────────────┘
text
VM 壳原理:
原始 x86 指令:
mov eax, [ebp+8]
add eax, ecx
push eax
call func
↓ 虚拟化转换
自定义字节码:
0x7A 0x03 0x08 ; VM_LOAD_LOCAL 3, offset 8
0x4F 0x03 0x02 ; VM_ADD reg3, reg2
0x9C 0x03 ; VM_PUSH reg3
0xB1 0x00 0x42 ; VM_CALL handler_66
↓ 运行时
VM 解释器(dispatcher loop):
while (1) {
opcode = *vm_ip++;
handlers[opcode](); // 查表执行
}
每次编译/保护生成不同的 opcode 映射 → 无通用脱壳方案
5. .NET / Java 保护壳
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 平台 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ .NET Reactor │ .NET │ 混淆+加密+反调试,NecroBit 加密 │
│ ConfuserEx │ .NET │ 开源混淆器,常量/控制流/引用混淆 │
│ Dotfuscator │ .NET │ VS 自带,名称混淆 │
│ Eazfuscator.NET │ .NET │ 商业混淆器 │
│ SmartAssembly │ .NET │ Redgate 出品,混淆+压缩 │
│ Babel Obfuscator │ .NET │ 强混淆 │
│ Crypto Obfuscator│ .NET │ 加密+混淆+反调试 │
│ Agile.NET (CliSecure)│.NET │ 代码虚拟化 │
│ KoiVM │ .NET │ 开源 .NET VM 虚拟化 │
│ de4dot 可识别的 │ .NET │ 数十种 .NET 壳 │
│ ProGuard │ Java/Android│ 官方混淆器,名称混淆 │
│ DexGuard │ Android │ ProGuard 商业版,加密+混淆 │
│ Allatori │ Java │ 商业混淆器 │
│ Zelix KlassMaster│ Java │ 强 Java 混淆器 │
│ Stringer │ Java │ 字符串加密 │
└──────────────────┴─────────────┴───────────────────────────────────────┘
6. Android/移动端专用壳 ★
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 类型 │ 特征与保护方式 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ │ │ │
│ ── 一代壳(整体加固)──────────────────────────────────────────────── │
│ 梆梆加固 (BangCle)│ DEX加密 │ 整体DEX加密,运行时解密加载 │
│ 爱加密 (Ijiami) │ DEX加密 │ 整体DEX加密+反调试 │
│ 360加固 │ DEX加密 │ 整体加固+SO保护 │
│ 腾讯乐固 (Legu) │ DEX加密 │ 整体DEX加密 │
│ 百度加固 │ DEX加密 │ 整体加密 │
│ 阿里聚安全 │ DEX加密 │ 整体加密+环境检测 │
│ 娜迦 (Nagapt) │ DEX加密 │ 整体加密+SO虚拟化 │
│ APKProtect │ DEX加密 │ 整体加密 │
│ │ │ │
│ ── 二代壳(函数级加固)────────────────────────────────────────────── │
│ 梆梆(二代) │ 函数抽取 │ DEX中函数体被抽空,运行时还原 │
│ 爱加密(二代) │ 函数抽取 │ 函数指令动态加载 │
│ 360(二代) │ 函数抽取 │ 函数粒度保护 │
│ │ │ │
│ ── 三代壳(VMP/虚拟化)────────────────────────────────────────────── │
│ 梆梆(三代) │ DEX VMP │ Dalvik/ART 指令虚拟化 │
│ 爱加密(三代) │ DEX VMP │ 自定义虚拟机执行 │
│ 数字壳 (DexVMP) │ DEX VMP │ 开源 DEX 虚拟化方案 │
│ │ │ │
│ ── SO 保护 ──────────────────────────────────────────────────────── │
│ OLLVM │ SO混淆 │ 控制流平坦化/指令替换/虚假控制流 │
│ Hikari │ SO混淆 │ OLLVM 增强版 │
│ 梆梆 SO Shield │ SO加固 │ SO 加密+混淆 │
│ 360 SO加固 │ SO加固 │ SO 段加密 │
│ UPX (Android) │ SO压缩 │ native lib UPX 压缩 │
│ │ │ │
│ ── iOS ──────────────────────────────────────────────────────────── │
│ FairPlay DRM │ Mach-O加密 │ Apple 官方加密,__TEXT 段加密 │
│ iXGuard │ 混淆 │ Guardsquare 出品 │
└──────────────────┴─────────────┴───────────────────────────────────────┘
7. Linux/macOS ELF 壳
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 平台 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ UPX │ ELF/Mach-O │ 最常见,节名 UPX! │
│ Burneye │ ELF │ Linux 加密壳 │
│ ELFCrypt │ ELF │ ELF 加密 │
│ Shiva │ ELF │ 学术 ELF 保护器 │
│ Midgetpack │ ELF │ 小型 ELF 加壳器 │
│ MPRESS │ ELF/Mach-O │ 跨平台压缩 │
│ ezuri │ ELF(Go) │ Go 编写的 ELF crypter │
│ Amber │ PE/ELF │ 反射加载,绕过杀软 │
│ Limelighter │ ELF │ 红队工具 │
│ Pakkero │ ELF │ Go 编写 │
│ oxide │ ELF │ Rust 编写的 ELF 壳 │
│ sstrip │ ELF │ 极简 ELF(不算壳,但改变结构) │
└──────────────────┴─────────────┴───────────────────────────────────────┘
8. 恶意软件常用壳/Crypter
text
┌──────────────────┬─────────────┬───────────────────────────────────────┐
│ 壳名称 │ 类型 │ 特征 │
├──────────────────┼─────────────┼───────────────────────────────────────┤
│ 自定义 XOR 壳 │ 加密 │ 简单异或加密,stub 解密后跳转 │
│ 自定义 RC4 壳 │ 加密 │ RC4/AES 加密 payload │
│ Veil-Evasion │ 框架 │ 红队 payload 加密框架 │
│ Shikata Ga Nai │ 多态编码 │ MSF 多态 XOR 编码器 │
│ Hyperion │ 加密 │ AES 加密 PE,运行时暴力解密 │
│ Shellter │ 注入 │ 向合法 PE 注入 shellcode │
│ Avet │ 免杀框架 │ 多种加密+编码 │
│ pe_to_shellcode │ 转换 │ PE 转 shellcode(反射加载) │
│ Donut │ shellcode化 │ .NET/PE/VBS 转 shellcode │
│ ScareCrow │ 免杀 │ EDR 绕过加载器 │
│ Artifact Kit │ CS 定制 │ CobaltStrike payload 定制 │
│ 各种私有 crypter │ 加密 │ 地下论坛售卖,FUD(Fully Undetected) │
└──────────────────┴─────────────┴───────────────────────────────────────┘
四、壳识别方法大全
方法1:签名特征匹配(最常用)
text
原理:每种壳在文件中留下特定的字节序列/字符串/结构特征
┌─────────────────┬──────────────────────────────────────────────┐
│ 工具 │ 说明 │
├─────────────────┼──────────────────────────────────────────────┤
│ DIE │ Detect It Easy,签名库最全,持续更新 │
│ (Detect It Easy) │ 支持 PE/ELF/Mach-O/APK/DEX/COM │
│ │ 开源,Heuristic + Signature 双引擎 │
├─────────────────┼──────────────────────────────────────────────┤
│ ExeinfoPE │ Windows 下最流行的查壳工具之一 │
│ │ 签名库庞大,支持脚本签名 │
├─────────────────┼──────────────────────────────────────────────┤
│ PEiD │ 经典工具(已停止更新) │
│ │ userdb.txt 签名库可扩展 │
│ │ 支持插件(Krypto ANALyzer 等) │
├─────────────────┼──────────────────────────────────────────────┤
│ Nauz File Detector│ 类似DIE的新工具 │
│ (NFD) │ 开源,签名库持续更新 │
├─────────────────┼──────────────────────────────────────────────┤
│ YARA │ 自定义规则匹配 │
│ │ packer_rules.yar 社区规则 │
├─────────────────┼──────────────────────────────────────────────┤
│ PortEx │ Java PE 分析库,内含壳签名 │
├─────────────────┼──────────────────────────────────────────────┤
│ MT管理器 │ Android 平台,APK 查壳 │
│ (MT Manager) │ 识别主流国内加固厂商 │
├─────────────────┼──────────────────────────────────────────────┤
│ APKiD │ Android APK/DEX 专用识别工具 │
│ │ 识别编译器/混淆器/加固壳 │
└─────────────────┴──────────────────────────────────────────────┘
方法2:熵值分析 ★★★
text
原理:压缩或加密后的数据接近随机分布,信息熵接近 8.0(最大值)
熵值范围:
0.0 ─── 完全规律(如全零)
4.0-5.0 ─ 正常代码/数据
6.0-7.0 ─ 可能压缩/加密
7.0-8.0 ─ 高度可能压缩/加密 ★
8.0 ─── 完全随机(理想加密/压缩)
┌──────────────────────────────────────────────────────────────┐
│ 熵值可视化示意 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 正常程序: │
│ 8 ┤ │
│ 7 ┤ ▄▄ │
│ 6 ┤ ▄▄▄▄██▄▄ │
│ 5 ┤ ▄▄▄████████▄▄ │
│ 4 ┤████████████████▄ │
│ 3 ┤ │
│ └─────────────────── 文件偏移 │
│ .text .rdata .data .rsrc │
│ │
│ 加壳程序: │
│ 8 ┤ ██████████████████ │
│ 7 ┤ ██████████████████ │
│ 6 ┤ ██████████████████ │
│ 5 ┤ ▄▄▄ │
│ 4 ┤ │
│ 3 ┤ │
│ └─────────────────── 文件偏移 │
│ 加密数据 stub │
│ (高熵) (低熵) │
│ │
└──────────────────────────────────────────────────────────────┘
Bash
# 工具使用
# DIE 熵值图(GUI)
die --entropy binary.exe
# binwalk 熵值分析
binwalk -E binary.exe
# 输出熵值图,高于 0.9(对应熵值约7.2+)的区域可能被加密/压缩
# rabin2(radare2 套件)
rabin2 -S binary.exe
# 显示每个节的大小,可配合 rahash2 计算熵
# rahash2 计算特定区域熵
rahash2 -a entropy -s 0x1000-0x5000 binary.exe
# Python 手动计算
python3 -c "
import math, collections
data = open('binary.exe','rb').read()
freq = collections.Counter(data)
entropy = -sum((c/len(data)) * math.log2(c/len(data)) for c in freq.values())
print(f'Entropy: {entropy:.4f}')
"
方法3:PE 结构异常分析
text
加壳程序的 PE 结构通常存在以下异常:
┌───────────────────────┬──────────────────────────────────────┐
│ 异常特征 │ 说明 │
├───────────────────────┼──────────────────────────────────────┤
│ 节名称异常 │ UPX0/UPX1、.vmp0、.themida 等 │
│ │ 或节名为空、不可打印字符 │
├───────────────────────┼──────────────────────────────────────┤
│ 入口点在非.text节 │ 入口点在最后一个节或异常节 │
├───────────────────────┼──────────────────────────────────────┤
│ 节的 RawSize=0 │ .text 的原始大小为0(运行时才展开) │
│ 但 VirtualSize 很大 │ 预留了大量虚拟空间用于解压 │
├───────────────────────┼──────────────────────────────────────┤
│ 导入表极小 │ 只有 LoadLibrary/GetProcAddress │
│ │ 运行时动态解析所有其他 API │
├───────────────────────┼──────────────────────────────────────┤
│ 节权限异常 │ .text 同时具有 RWX 权限 │
│ │ 正常程序 .text 只有 R+X │
├───────────────────────┼──────────────────────────────────────┤
│ SizeOfImage 异常 │ 远大于文件实际大小 │
├───────────────────────┼──────────────────────────────────────┤
│ 资源节被加密 │ .rsrc 熵值异常高 │
├───────────────────────┼──────────────────────────────────────┤
│ 覆盖数据(Overlay) │ PE 文件末尾有大量附加数据 │
├───────────────────────┼──────────────────────────────────────┤
│ TLS 回调函数 │ 入口点前执行代码(反调试常用) │
├───────────────────────┼──────────────────────────────────────┤
│ 头部被扭曲 │ Optional Header 字段异常 │
│ │ 如 UPack 的 PE 头部重叠技巧 │
└───────────────────────┴──────────────────────────────────────┘
Bash
# 检查 PE 结构
readpe binary.exe # pev 工具套件
pestudio binary.exe # PE 静态分析(GUI)
rabin2 -I binary.exe # radare2 基本信息
rabin2 -S binary.exe # 节信息
rabin2 -i binary.exe # 导入表(加壳后通常极小)
dumpbin /headers binary.exe # MSVC 工具
方法4:导入表分析
text
正常程序 vs 加壳程序的导入表对比:
正常程序导入表(通常几十到几百个 API):
KERNEL32.dll
CreateFileA
ReadFile
WriteFile
CloseHandle
VirtualAlloc
...
USER32.dll
MessageBoxA
CreateWindowExA
...
GDI32.dll
...
(更多 DLL 和 API)
加壳程序导入表(通常只有2-5个 API):
KERNEL32.dll
LoadLibraryA ← ★ 动态加载 DLL
GetProcAddress ← ★ 动态获取函数地址
VirtualAlloc ← 分配内存(解压用)
VirtualProtect ← 修改内存权限
ExitProcess
(仅此而已)
如果导入表只有这几个函数 → 几乎可以确定加壳
Bash
# 查看导入表
rabin2 -i binary.exe | wc -l # 导入数量
# 正常程序:50-500+
# 加壳程序:2-10
objdump -p binary.exe | grep "DLL Name"
# 加壳程序通常只导入 KERNEL32.dll
方法5:节名称特征匹配
text
常见壳的标志性节名:
┌──────────────────┬──────────────────────────────────┐
│ 节名 │ 对应壳 │
├──────────────────┼──────────────────────────────────┤
│ UPX0, UPX1, UPX! │ UPX │
│ .aspack │ ASPack │
│ .adata │ ASPack │
│ .ASPack │ ASPack │
│ .pec1, .pec2 │ PECompact │
│ pec1, pec2 │ PECompact │
│ .petite │ Petite │
│ .MPRESS1, .MPRESS2│ MPRESS │
│ .vmp0, .vmp1 │ VMProtect │
│ .themida │ Themida/WinLicense │
│ .enigma1, .enigma2│ Enigma Protector │
│ .perplex │ Perplex PE Protector │
│ .sforce │ StarForce │
│ .nsp0, .nsp1 │ NSPack/北斗 │
│ .packed │ RLPack │
│ .RLPack │ RLPack │
│ .WWP32 │ WWPack32 │
│ .yP, .y0da │ yoda Protector │
│ .tElock │ tElock │
│ .svkp │ SVK Protector │
│ .MaskPE │ MaskPE │
│ .shrink │ Shrinker │
│ MEW │ MEW │
│ .neolit │ Neolite │
│ .seau │ SeauSFX │
│ 空/乱码/不可打印 │ 自定义壳或特意修改 │
└──────────────────┴──────────────────────────────────┘
方法6:入口点特征分析
asm
;; UPX 入口特征
pushad ; 60
mov esi, [addr] ; 保存压缩数据地址
lea edi, [addr] ; 目标解压地址
...
popad
jmp OEP
;; ASPack 入口特征
pushad ; 60
call $+5 ; E8 00 00 00 00(自定位技巧)
pop ebp
...
;; PECompact 入口特征
mov esi, [addr]
lea edi, [esi + offset]
push edi
...
;; Themida 入口特征
push imm32 ; 大量 push 立即数
push imm32
...
call addr ; 跳入 VM 或解密引擎
;; VMProtect 入口特征
push reg ; 保存上下文
push reg
...
jmp vm_entry ; 进入 VM dispatcher
Bash
# 查看入口点附近的指令
radare2 -c "s entry0; pd 20" binary.exe
objdump -d --start-address=0x入口点 binary.exe | head -30
方法7:字符串特征
Bash
strings binary.exe | grep -iE "upx|aspack|themida|vmp|armadillo|obsidium"
# 常见字符串标识
"UPX!" # UPX 魔数
"This file is packed with the UPX" # UPX
"PEC2" # PECompact
"Themida" # Themida
"WinLicense" # WinLicense
".vmp0" # VMProtect
"ASPack" # ASPack
"tElock" # tElock
"Obsidium" # Obsidium
方法8:Android 专用识别
Bash
# APKiD — 最强 APK 识别工具
pip install apkid
apkid app.apk
# 输出示例:
# [+] app.apk!classes.dex
# |-- compiler : dx
# |-- packer : BangCle (梆梆加固)
# [+] app.apk!lib/armeabi-v7a/libshell.so
# |-- packer : UPX (3.91)
# |-- anti_debug : Debug.isDebuggerConnected()
# MT管理器(Android 上直接使用)
# 打开 APK → 自动显示加固信息
# 手动检查加固特征
unzip app.apk -d extracted
ls extracted/lib/*/
# 特征文件:
# libsecexe.so / libDexHelper.so → 梆梆
# libexec.so / libexecmain.so → 爱加密
# libjiagu.so → 360加固
# libshell.so / libtup.so → 腾讯乐固
# libbaiduprotect.so → 百度加固
# libsgmainso-x.x.x.so → 阿里聚安全
# libchaosvmp.so → 娜迦
# 检查 Application 类名
grep -r "android:name" extracted/AndroidManifest.xml
# 加固壳通常替换 Application 入口类:
# com.secneo.apkwrapper.ApplicationWrapper → 梆梆
# s.h.e.l.l.S → 爱加密
# com.qihoo.util.StubApplication → 360加固
# com.tencent.StubShell.TxAppEntry → 腾讯乐固
方法9:.NET 专用识别
Bash
# de4dot — .NET 脱壳/识别工具
de4dot --detect binary.exe
# 输出示例:
# Detected .NET Reactor 6.x
# Detected ConfuserEx v1.0.0
# Detected Dotfuscator
# dnSpy / ILSpy 打开 .NET 程序
# 如果看到大量不可读的类名/方法名 → 混淆
# 如果无法反编译 → 加密/虚拟化
# 特征识别
# ConfuserEx: 模块名带 "Confuser" 字样,资源名 "Cos.."
# .NET Reactor: DLL 中含 "ReactorHelper"
# SmartAssembly: 含 "SmartAssembly.Attributes"
方法10:运行时行为分析
text
动态分析(当静态方法都失效时):
┌─────────────────────────────────────────────────────────────┐
│ │
│ 1. API 监控 │
│ 监控 VirtualAlloc/VirtualProtect/WriteProcessMemory │
│ 壳运行时会分配内存 → 解密/解压 → 修改权限为可执行 │
│ │
│ 2. 内存转储 │
│ 在 OEP 处中断 → 转储已解压的进程镜像 │
│ 工具:OllyDump / Scylla / Process Dump │
│ │
│ 3. 调试器跟踪 │
│ 跟踪入口点代码 → 观察解压/解密流程 │
│ 找到 jmp/call OEP 的位置 │
│ │
│ 4. 系统调用追踪 │
│ Linux: strace / ltrace │
│ Windows: API Monitor / Procmon │
│ │
│ 5. 沙箱分析 │
│ Cuckoo Sandbox / Any.Run / Joe Sandbox │
│ 自动记录行为,部分可识别壳 │
│ │
└─────────────────────────────────────────────────────────────┘
五、综合识别流程
text
拿到未知二进制文件
│
┌─────────┴─────────┐
▼ ▼
PE/ELF? APK/DEX?
│ │
┌───────┴───────┐ ┌──────┴───────┐
▼ ▼ ▼ ▼
DIE/ExeinfoPE .NET? APKiD MT管理器
签名识别 de4dot 签名识别 快速查壳
│ │ │ │
▼ ▼ ▼ ▼
识别成功? 识别成功? 识别成功? 识别成功?
YES → 完成 YES → 完成 YES → 完成 YES → 完成
NO ↓ NO ↓ NO ↓
│ │ │
▼ ▼ ▼
┌────────────────────────────────────┐
│ 熵值分析 │
│ DIE 熵值图 / binwalk -E │
│ 高熵(>7.0) → 确认加壳/加密 │
│ 正常熵(4-6) → 可能未加壳或轻混淆 │
└────────────┬───────────────────────┘
│
▼
┌────────────────────────────────────┐
│ 结构异常分析 │
│ ● 节名是否异常 │
│ ● 导入表是否极小 │
│ ● 入口点是否在异常位置 │
│ ● RawSize vs VirtualSize │
│ ● 是否有 RWX 节 │
└────────────┬───────────────────────┘
│
▼
┌────────────────────────────────────┐
│ 入口点反汇编分析 │
│ pushad/popad 模式 │
│ 自定位代码 (call $+5; pop) │
│ 大量跳转/循环解密 │
└────────────┬───────────────────────┘
│
▼
┌────────────────────────────────────┐
│ 动态分析 │
│ 调试器跟踪解压过程 │
│ API 监控 │
│ 内存转储 │
└────────────────────────────────────┘
六、各工具速查表
text
┌───────────────┬─────────┬────────┬───────┬──────┬────────────────────┐
│ 工具 │ PE │ ELF │ Mach-O│ APK │ 识别方式 │
├───────────────┼─────────┼────────┼───────┼──────┼────────────────────┤
│ DIE │ ✅ │ ✅ │ ✅ │ ✅ │ 签名+启发+脚本 │
│ ExeinfoPE │ ✅ │ ❌ │ ❌ │ ❌ │ 签名匹配 │
│ PEiD │ ✅ │ ❌ │ ❌ │ ❌ │ 签名匹配(已停更) │
│ Nauz(NFD) │ ✅ │ ✅ │ ✅ │ ❌ │ 签名匹配 │
│ rabin2 │ ✅ │ ✅ │ ✅ │ ❌ │ 结构分析 │
│ YARA │ ✅ │ ✅ │ ✅ │ ✅ │ 自定义规则 │
│ binwalk -E │ ✅ │ ✅ │ ✅ │ ✅ │ 熵值分析 │
│ APKiD │ ❌ │ ✅(so) │ ❌ │ ✅ │ 签名+启发 │
│ MT管理器 │ ❌ │ ❌ │ ❌ │ ✅ │ 签名匹配 │
│ de4dot │ .NET │ ❌ │ ❌ │ ❌ │ .NET 专用签名 │
│ pestudio │ ✅ │ ❌ │ ❌ │ ❌ │ 结构+签名+指标 │
│ strings │ ✅ │ ✅ │ ✅ │ ✅ │ 字符串特征 │
└───────────────┴─────────┴────────┴───────┴──────┴────────────────────┘
七、核心总结
text
┌─────────────────────────────────────────────────────────────────┐
│ │
│ 壳识别没有银弹(No Silver Bullet) │
│ │
│ ● 已知壳 → 签名工具(DIE/ExeinfoPE/APKiD)一键识别 │
│ ● 变种壳 → 签名失效,需要熵值 + 结构异常辅助判断 │
│ ● 私有壳 → 所有签名失效,只能通过: │
│ - 熵值分析:确认"是否加壳" │
│ - 结构分析:判断壳的类型(压缩/加密/VM) │
│ - 动态分析:理解解压/解密流程 │
│ │
│ 判断是否加壳的黄金三角: │
│ │
│ 熵值 ≥ 7.0 │
│ ╱ ╲ │
│ ╱ ╲ │
│ 导入表极小 节权限/大小异常 │
│ (≤5个API) (RWX / Raw=0) │
│ │
│ 三者同时满足 → 几乎100%加壳 │
│ │
└─────────────────────────────────────────────────────────────────┘
免责声明
本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。
浙公网安备 33010602011771号