Detect-It-Easy 文件类型识别与加壳检测指南
【免费下载链接】Detect-It-EasyProgram for determining types of files for Windows, Linux and MacOS.项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy
拿到一个来路不明的样本时,你通常最先想确认三件事:它是什么格式、有没有被加壳、用什么工具链构建的。Detect-It-Easy(下称 DiE)是一个跨 Windows、Linux、macOS 的文件识别与静态检查工具,它不执行文件,靠签名数据库和启发式分析引擎完成第一轮分诊,面向恶意软件分析、逆向工程和安全审计场景。
定位速览:它到底能干哪些事
一句话:DiE 是一个离线、不运行目标文件的文件格式识别 + 加壳器/保护器识别工具,且规则体系可自行扩展。
核心能力清单:
- 格式覆盖面:PE、ELF、Mach-O、APK、IPA、JAR、ZIP、DEX、ISO9660、MS-DOS、COM、LE/LX、NPM、Amiga 等,未识别内容归入 Binary 兜底类
- 三个前端:
die(完整 GUI)、diec(命令行,适合批量)、diel(轻量版,仅扫描器) - 一个 GUI 内四个引擎:DiE 主引擎、Nauz File Detector、YARA、PEiD,各自独立输出,可交叉参考
- 可解释的启发式:启发式结论一律标记
(Heur),与签名匹配分开显示,并附带结构证据 - 边界明确:它不是杀毒软件,不提供实时防护和查杀,只产出静态证据
🚀 三分钟上手:从安装到第一次扫描
三种获取方式(详见 docs/RUN.md 与 docs/BUILD.md):
- 包管理器:Windows 用 Chocolatey 或 Microsoft Store;Linux 上 Parrot OS 提供
detect-it-easy包,Arch 有 AUR 包detect-it-easy-git,REMnux、openSUSE OBS 也有 - Docker:
git clone --recursive https://gitcode.com/gh_mirrors/de/Detect-It-Easy后docker build . -t horsicq:diec,日常扫描直接用仓库里的 docker/diec.sh 挂载目录执行 - 源码构建:装好 Qt5 依赖后按 docs/BUILD.md 分发行版走
第一条可运行命令:
diec sample.exe # 基础扫描 diec -r ./samples # 递归扫描整个目录 diec -U -b sample.exe # 开启发式 + 详细证据任务一:一条命令完成文件类型与加壳识别
目标:在终端里拿到快速分诊结论,不打开 GUI。
步骤:
- 运行
diec [FileName],输出格式类别、编译器、链接器以及命中的加壳器 - 需要进流水线时加
-j(JSON)或-x(XML)输出,-e追加熵值,-i追加文件信息 - 用
-D <path>指向另一份签名数据库,可对同一批样本做对照扫描
你会看到什么:对一个 ASPack 加壳的 PE,输出直接给出Packer: ASPack(2.12-2.42)、Compiler: MinGW、Linker: GNU linker ld (GNU Binutils)(2.28)[GUI32]三行结论,无需人工翻十六进制。
任务二:开启启发式,看证据而不只是结论
目标:当样本被修改过、签名库没有精确命中时,让启发式层补上判断。
步骤:
diec -U -b打开启发式扫描和 verbose 模式,报告会逐行列出证据:高熵、节区 RWX、入口点异常、IAT 目录为空等- 注意
(Heur)前缀:带它的是启发式推断,不带的才是签名精确匹配 - 在证据足够强时,启发式还能推翻签名层的误判——比如某签名指向 C/C++,但结构证据指向 Rust,最终输出就是
(Heur) Language: Rust
PE 启发式引擎的主体在 db/PE/__GenericHeuristicAnalysis_By_DosX.7.sg,覆盖反分析、加壳器、格式完整性、工具链溯源、许可证/DRM 等类别的检查;JavaScript、文件扩展名、批处理脚本另有小型启发式模块,文件在 db/Binary/ 下,文件名带__Mini前缀。
任务三:在 GUI 里深挖单个文件
目标:对可疑区域做交互式检查,并让多个引擎互相印证。
步骤:
- 启动
die打开文件,下方视图自动列出 PE 的链接器、编译器、运行时库、保护器信息 - 顶部按钮区切换 Memory map、Disasm、Hex、Strings、Entropy、Extractor、YARA 等入口
- 左侧引擎列表可依次运行 NFD、YARA、PEiD,把三份独立结论对照主引擎结果
你会看到什么:签名命中与启发式结论分列展示,启发式行内嵌证据串;Entropy 视图对加密或压缩区域一眼可辨,Strings 与 Hex 窗口可并排摆放。
它是怎么做到的
DiE 的检测分两层。底层是原生格式解析器,负责解析 PE、ELF、Mach-O 等结构,并提供有界读取、地址翻译、搜索和反汇编这些原语;上层是 DiE-JS 脚本层,db/ 下按格式分目录存放的.sg文件就是检测规则,从一条紧凑的字节签名到多阶段状态机算法都在这个语言里。签名本身是一种嵌入在 JS 字符串里的小型模式语言:??匹配任意单字节,$$与####分别匹配相对跳转和地址值,单引号包裹的文本按字面匹配,完整语法规格见 help/Signatures.md。启发式引擎作为独立的高层引擎跑在同一套原语之上:它选择候选区域、遍历有界控制流、交叉关联多源证据,再显式排除良性解释,每一条结论都可见、可追溯;完全无法归类的文件落入 Binary 类,由启发式兜底。
🧩 进阶:给自己的格式写一条检测规则
需要识别私有格式时,加一个 DiE-JS 规则即可。规则放进对应格式目录——PE 的规则去 db/PE/,通用兜底才放 db/Binary/。最小模板如下:
meta("compiler", "Example Compiler"); function detect() { if (PE.isSectionNamePresent(".lz-algo")) { sVersion = "1.0"; sOptions = "LZMA"; bDetected = true; } sLang = "C/C++"; return result(); }bDetected、sName、sVersion、sOptions等结果变量由引擎提供,直接赋值、不要重新声明。提交前对照 CODE-FORMATTING.md 的代码规范和 CONTRIBUTING.md 对可复现样本、误报材料的要求;db_extra/ 是未通过审核规则的候补区,官方明确不建议把它当质量参考。写规则前建议先读 help/Global.md、help/Binary.md 和 help/Signatures.md,再按目标格式翻对应类参考(help/PE.md、help/ELF.md、help/MACH.md 等)。
横向对比:DiE、NFD、PEiD 怎么选
DiE 的 GUI 内集成了三个独立引擎,README 对它们的分工有明确说法,差异如下:
| 维度 | Detect-It-Easy | Nauz File Detector | PEiD |
|---|---|---|---|
| 规则模型 | DiE-JS 脚本 + PE 启发式引擎 | 逻辑更简单的启发式 | 经典 userdb 规则生态 |
| 用户规则工作流 | 完整支持 | 没有 | 兼容旧 userdb |
| 数据库维护 | 主库 db/ 持续更新 | 更新相对不频繁 | 大量历史导入内容 |
| 误报控制 | 独立证据、架构门控、显式反模式 | — | 按现代标准看较多噪声签名 |
| 定位 | 主扫描器 | 第二意见 | 复现传统检测,结果作次要证据 |
YARA 同样内置,仓库自带 yara_rules/ 下的基础与增强版启发式规则,用作对可疑 PE 特征的轻量交叉检查。需要记住的是:三个引擎的输出是互补而非投票——三个引擎重复一个弱签名,并不会把它变成证据。
写在最后
DiE 的分工很清楚:在样本运行之前,回答"它是什么格式、谁加的壳、结构是否完好、用什么工具链构建",并把带证据的结论交给后续动态分析和人工逆向。它不承诺查杀恶意软件,干净的报告只代表已启用的规则没有找到它认识的静态证据。进一步阅读:使用方式见 docs/RUN.md,构建指南见 docs/BUILD.md,签名语法见 help/Signatures.md。
【免费下载链接】Detect-It-EasyProgram for determining types of files for Windows, Linux and MacOS.项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考