Detect It Easy 完整指南:如何 5 分钟识别文件的格式、加壳与编译器

📅 2026/8/24 21:14:47
Detect It Easy 完整指南:如何 5 分钟识别文件的格式、加壳与编译器
Detect It Easy 完整指南:如何 5 分钟识别文件的格式、加壳与编译器【免费下载链接】Detect-It-EasyProgram for determining types of files for Windows, Linux and MacOS.项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy你刚接手一个目录,里面全是名不副实的文件:.dat其实是数据库,.bin其实是 Windows 程序,打开十六进制编辑器只有一串4D 5A 90...,完全看不出所以然。Detect It Easy(下文简称 DIE)是一款跨 Windows、Linux、macOS 的免费文件类型识别工具:把文件指给它,几秒内报出文件格式、编译器、是否加壳,甚至保护手法。它的核心是签名库与启发式引擎两套机制,而且规则完全开放,你可以自己改。第一次上手:用 diec 给文件做身份普查最快的路径是命令行版diec。Windows 上可用 Chocolatey 或 Microsoft Store 安装;Linux 上各发行版基本都有包(Parrot OS、Arch AUR、openSUSE 等),各平台的具体安装方式见官方文档 docs/RUN.md。装好之后,要跑的只有这一行:diec target.exetarget.exe换成你要分析的文件。它会在终端直接输出文件格式、编译器、链接器,以及加壳/保护工具的检测结果,全程不需要打开图形界面。如果你想对可疑样本查得更细,再带上-r和-d两个参数:diec -rd clear32.exe参数含义:-r递归扫描,传目录时会把子目录一起扫;-d深度扫描,在基础检测之上再跑一轮更深的检查。实际输出长这样:三行输出,结论全齐:这是一个PE32(32 位 Windows 可执行文件),被ASPack加壳,用MinGW编译、GNU 链接器链接。想让结果直接喂给脚本,加-j输出 JSON;CSV、TSV、XML 等更多输出选项,直接敲diec不加参数就能看到完整选项表。DIE 识别原理:签名库管已知,启发式管没见过的你可能会想:凭什么一个工具敢断言它被 ASPack 加壳了?答案是有两套检测方式,分工明确。第一套是签名检测,可以理解为按标准答案批改作业。db/ 目录里存着一大套标准答案,按格式分目录存放,比如 db/PE/ 下有 800 多个 Windows 可执行文件相关的规则。每个加壳器、每种编译器都有自己的标准答案(.sg签名脚本),内容本质是字节模式匹配:UPX 的规则会先找 UPX 特征字符串,找不到再比对入口点的机器码。PE、ELF、Mach-O(macOS 可执行格式)、APK、JAR、ZIP、ISO9660、DEX 这些格式都有覆盖。但标准答案追不上新样本,这就是第二套机制——启发式分析登场:它像老师傅的看货,不看答案,看文件的结构、熵值(衡量内容混乱度的指标,越高越可能被加密或压缩)、操作码分布这些特征,给出判断:没见过,但这个样子很可疑。启发式结论会带(Heur)前缀,方便你和签名结论区分开。下图是图形界面里的分析结果:上方橙色框是签名检测的结论(链接器、编译器、保护),下方红色框是启发式分析的结论(反调试、混淆等):图形界面还内置了YARA(一种基于规则模式的扫描引擎)扫描,配套规则放在 yara_rules/ 目录,涵盖加壳器、编译器与常见恶意软件家族的启发式规则,扫描时直接勾选即可。die、diec、diel 三个入口,分别用在什么场合DIE 提供三个可执行程序,大致相当于三种就餐方式:版本类比适合场合die正餐餐厅单文件交互式分析,多面板交叉验证,反汇编、十六进制查看diec外带窗口批量处理、自动化脚本、CI 流水线diel便利店只要它是什么的快速场景,轻量只含扫描要交互式分析,用die:把文件拖进窗口就自动开始,左侧列出全部检测结论,中部一排功能按钮(Hex、Disasm、Strings、Hash、Entropy、YARA、Entropy 等),字符串、熵值、导入表可以从不同角度交叉验证。要批量或写进脚本,用diec,完整选项长这样:高频的就三个:-r递归、-d深度扫描、-jJSON 输出。diel只保留扫描功能,适合只看一眼的场景。完整排查流程:从可疑样本到脱壳方向拿clear32.exe走一遍完整流程,假设你怀疑它被加壳。第一步,确认格式。diec clear32.exe首行输出PE32,确定是 32 位 Windows 程序,而不是 ELF 或伪装扩展名的压缩包。第二步,查壳。加-rd深度扫描后,输出直接给出Packer: ASPack(2.12-2.42)。注意这里是版本区间而非精确版本号,这是模式匹配的天然局限,日常够用,不必纠结。第三步,记下编译链。同一次输出还报了Compiler: MinGW与 GNU 链接器版本。这决定了你后续反汇编工具链的选择——MinGW 和 MSVC 编译出的程序,反汇编视图和字符串风格都不同。第四步,决定下一步动作。拿到ASPack 版本区间后,可以直接去找该壳对应的脱壳工具或调试技巧定位真实入口点,而不必自己硬读壳的引导代码。想继续目测验证,就在die里打开同一文件,用十六进制、字符串、熵值、反汇编面板从不同角度复核结论。写一条自己的 DiE-JS 签名规则:语法与步骤DIE 的检测规则是用DiE-JS(一种类 JavaScript 的脚本语言)写的脚本,这套体系完全开放:官方规则可以看、可以改、可以加你自己的。规则的核心是十六进制模式匹配,语法很友好:??表示任意单字节,也支持直接写 ASCII 文本。例如这个模式:4D 5A 90 ?? ?? 00 00匹配的就是典型的 DOS/PE 文件头——4D 5A正是 MZ 两个字母的十六进制写法。完整语法(跳转匹配、地址通配、条件通配等)在官方参考 help/Signatures.md 里。写第一条规则,三步就够:翻 db/PE/ 下的packer_*规则,看它如何先用Binary.compare匹配特征字节,再赋名和版本抄一条规则做模板,把字节模式换成你的检测目标在 DIE 里重新加载数据库,用样本验证是否命中调试规则时,图形界面里的反汇编视图和签名匹配对话框能帮你核对字节偏移:各格式的结构细节(PE、ELF、JAR 等分别怎么解析),help/ 目录下有分格式的深度参考文档。用 Docker 构建 diec 镜像并接入 CI想在沙箱或 CI 流水线上跑 DIE,官方有现成方案:git clone --recursive https://gitcode.com/gh_mirrors/de/Detect-It-Easy cd Detect-It-Easy docker build . -t horsicq:diec--recursive用于拉取包含签名库的子模块,别漏掉。构建完成后,分析只需一条命令:./docker/diec.sh target_filedocker/diec.sh 会自动把目标文件所在目录以只读方式挂进容器再执行 diec,用完即走、不留痕迹。如果你想从源码自行构建打包,各平台(Debian、Fedora、Arch、Windows、macOS、nixOS 等)的完整步骤在 docs/BUILD.md。新手最容易踩的三个坑版本区间别当真。2.12-2.42 是模式能覆盖的范围,不是精确版本号,用来定脱壳方向即可未知不等于安全。启发式只能告诉你它像什么,不能保证它无害,关键样本务必结合动态行为等证据综合判断签名库要常更新。新格式、新壳层出不穷,DIE 迭代很快,检测不到某个东西时,先查数据库是不是旧了,版本记录见 changelog.txt收尾:把 diec 用起来只需要四步装好 DIE(包管理器或 Microsoft Store 均可),对电脑上任意一个现成程序跑一次diec,读出它的编译器和链接器找一个 UPX 加壳的样本跑一遍,看它如何直接报出壳名与版本区间打开 help/Signatures.md,照4D 5A这类模式写下你的第一条检测规则用-j的 JSON 输出把diec接进你的文件处理脚本,体验批量分析的效率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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考