Detect It Easy
2026/5/29工具工具逆向工程DIE查壳大约 3 分钟
Detect It Easy
链接
是什么
Detect It Easy,简称 DIE,是文件类型、编译器、壳和保护识别工具。
逆向题中它常用于第一轮判断:
- PE / ELF / Mach-O
- 32 位 / 64 位
- 编译器和语言特征
- UPX 等壳
- .NET / Go / Rust / Delphi 等特征
安装与配置
从官方仓库或 Releases 下载:
https://github.com/horsicq/Detect-It-EasyWindows 可使用图形界面,Linux 可使用命令行版本。
基本用法
图形界面
打开 DIE,拖入目标文件,查看识别结果。
命令行
diec ./challenge更多功能
命令行选项
# 基本使用
diec ./challenge
# 详细输出
diec -v ./challenge
# 输出为 JSON
diec -j ./challenge
# 指定数据库路径
diec -d /path/to/db ./challenge
# 扫描目录
diec -r ./directory/图形界面功能
主界面:
- 文件信息
- 编译器识别
- 壳检测
- 语言识别
- 保护检测
菜单:
- File: 打开文件
- View: 查看详情
- Options: 设置选项
- Help: 帮助信息识别结果
编译器:
- GCC
- MSVC
- Clang
- MinGW
- Borland
语言:
- C/C++
- Delphi
- Go
- Rust
- .NET
- Java
- Python
壳:
- UPX
- ASPack
- Themida
- VMProtect
- Enigma脚本系统
DIE 支持自定义脚本来识别新的文件类型。
// 示例脚本
function detect(file) {
if (file.compare(0, 4, "\x7FELF")) {
return {
name: "ELF",
type: "executable"
};
}
return null;
}脚本目录
db/pe/ — PE 文件脚本
db/elf/ — ELF 文件脚本
db/mach/ — Mach-O 文件脚本
db/text/ — 文本文件脚本创建自定义脚本
// db/pe/mydetect.sig
function detect(file) {
// 检查特定字节
if (file.compare(0, 4, "\x4D\x5A\x90\x00")) {
// 检查特定字符串
if (file.findString("MyApp")) {
return {
name: "My Application",
type: "application"
};
}
}
return null;
}CTF常用技巧
查壳
如果识别为 UPX:
upx -d packed脱壳后再用 IDA/Ghidra 分析。
判断语言
Go/Rust: 符号和运行时噪音多
.NET: 优先 dnSpy
Java/Android: 优先 JADX
C/C++: IDA/Ghidra/GDB和 file 交叉验证
先 file,再 DIE。两个结果不一致时,继续看文件头和字符串。
分析流程
1. 用 file 判断基本类型
2. 用 DIE 检查编译器和壳
3. 根据语言选择工具
4. 脱壳(如果有壳)
5. 开始逆向分析壳检测
常见壳:
UPX: 最常见的压缩壳
ASPack: 压缩壳
Themida: 强保护壳
VMProtect: 虚拟机保护
Enigma: 加密壳
检测方法:
1. DIE 自动识别
2. 查看入口点
3. 查看节区名称
4. 分析熵值脱壳方法
UPX:
upx -d packed
通用方法:
1. 运行程序
2. dump 内存
3. 修复导入表
4. 重建 PE/ELF
工具:
- OllyDbg/x64dbg
- GDB
- Scylla
- Import REConstructorPE 分析
重要信息:
- 入口点地址
- 节区信息
- 导入表
- 导出表
- 资源
- 时间戳ELF 分析
重要信息:
- 架构 (x86/x64/ARM)
- 链接方式 (static/dynamic)
- 解释器
- 段信息
- 符号表常见问题
识别结果不准确
DIE 基于签名和特征,不是绝对结论。混淆、加壳、修改头部都可能影响识别。
看到 packed 就一定有壳吗
不一定。要结合入口点、节区、熵、字符串数量判断。
DIE 能脱壳吗
DIE 主要识别,不负责完整脱壳。脱壳要用 UPX、调试器、dump 或专项工具。
命令行版本不可用
# 确保在 PATH 中
export PATH=$PATH:/path/to/die
# 或使用完整路径
/path/to/diec ./challenge无法识别新格式
1. 查看文件头
2. 使用字符串分析
3. 创建自定义脚本
4. 使用其他工具性能问题
1. 限制扫描深度
2. 只扫描特定类型
3. 使用命令行版本
4. 批量处理时使用脚本关联
- 壳与脱壳基础
- Go与Rust逆向特征
- DotNET逆向基础
- IDA Pro
- Ghidra
- file