☰
二进制文件分析与文件类型识别实战:Detect-It-Easy 文件格式检测完整指南
2026/11/4 11:23:14 网站建设 项目流程

二进制文件分析与文件类型识别实战: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

今天有人往共享盘丢了一个文件,后缀 .dll,开头却是 MZ——拿它加载进系统?先别急着上调试器。第一步该问的是:它到底是什么、谁编译的、上没上壳。Detect-It-Easy(下称 DiE)干的就是这件事:跨平台的文件类型识别与二进制文件分析工具,把"这个文件是什么"拆成签名匹配和启发式分析两条线,PE32/PE32+ 还能深入到节区、导入表、资源层。

📋 DiE 和 file 命令到底差在哪

DiE 定位是"文件识别 + 静态检查",主要用户群是恶意软件分析师、安全审计和逆向工程师。它和file命令的本质区别在于:file基本靠 magic number 表给出一个猜测;DiE 是"格式解析器 + 可编程检测规则库"的组合——每个格式(PE、ELF、MACH、APK、DEX……)有原生解析器,规则用 DiE-JS(JavaScript 方言)写成脚本存在db/下,能读结构、做有界搜索、跑多阶段状态机。仓库db/目录按格式分了 20 多个子目录,签名覆盖从 Windows 可执行文件到 Amiga 老游戏资源。

项目内容
名称Detect-It-Easy (DiE)
定位文件类型识别 + 二进制静态分析
平台Windows / Linux / macOS
版本仓库die_version.txt标记 4.0.0
入口形态die(全功能 GUI)/diec(命令行)/diel(轻量扫描 GUI)

🚀 两条最短路径把 DiE 跑起来

图形入口:die打开全功能界面,左侧树列出 DiE、Nauz File Detector(NFD)、YARA、PEiD 几个独立分析引擎,右侧是 Hex、Strings、Memory map、Entropy、Import Header 等面板,适合交互式深看。命令行入口:diec,装好发行版后直接带文件路径即可,Linux 发行包、Chocolatey、MS Store 或从源码构建(docs/BUILD.md)。

批量处理和脚本化用diec最有价值,下面这四个参数先记住:

diec -r 样本目录 # -r:递归扫描整个目录 diec -U 可疑文件.exe # -U:启用启发式扫描 diec -b 可疑文件.exe # -b:verbose,输出更完整的证据 diec -j 可疑文件.exe # -j:JSON 输出,方便脚本消费

这段说明了什么:一个参数一个开关,-r管范围、-U管引擎、-j管对接自动化,批量分诊基本不用再加别的。完整参数表直接敲diec -h看,别背。

🔁 签名引擎和启发式引擎怎么分工

DiE 的架构是"原生核心 + DiE-JS 分析层"。原生核心负责格式解析,向上暴露有界读取、地址翻译、搜索、反汇编等原语;检测逻辑则全部写在 DiE-JS 脚本(.sg文件)里,形态从一条字节模式到多阶段状态机不等。

两层引擎的分工值得说清楚:签名引擎回答"像什么",启发式引擎回答"哪里不对劲"。关键点是启发式不是签名的兜底——启用后它是一个独立的更高层分析引擎,可以佐证、修正甚至替换签名层的结论。README 举的例子:编译器签名说 C/C++,但结构和运行时证据指向 Rust,启发式层会顶掉这个判断。所有启发式结论永远带(Heur)标记,-bverbose 模式下进一步分成[HEUR/Any]、[HEUR/.NET]、[HEUR/EMU]三类,哪条来自精确规则、哪条是推出来的,报告里永远分得开。PE 侧的主力是 __GenericHeuristicAnalysis_By_DosX.7.sg;另有 JavaScript 启发式、文件扩展名启发式、批处理脚本启发式 处理日常文件。

🔎 签名语法速查表

签名是嵌在 JS 字符串里的小模式语言,不是正则。help/Signatures.md 里的高频符号就这几类:

类别写法含义
通配符??/../..../........任意 1 / 1 / 2 / 4 字节
相对跳转$$/$$$$/$$$$$$$$1 / 2 / 4 字节跳转距离
绝对地址####/########2 / 4 字节地址
条件通配**!!__非空 / 非 ASCII / 两者都不是
文本匹配'PE'0000单引号包 ASCII,可与十六进制拼接

比如'SQLite format 3'00认数据库、'7z'BCAF271C认 7z 压缩包、'PK'0304认 ZIP;FFD8FFE?里那个?就是通配任意 JPEG 应用标记。

if (Binary.compare("4D5A") && Binary.compare("'PE'0000", Binary.read_uint32(0x3C))) { sName = "PE executable"; }

这段说明了什么:先比对文件头 2 字节 MZ,再用偏移 0x3C 处的 32 位整数当偏移二次定位 PE 签名——说明签名不仅能"按位置比字节",还能把文件本身的内容当地址用。

🕵️ 加壳检测:高熵不一定等于加密

单看熵值判加壳基本没意义:加密、压缩、正常的大块二进制都能跑出 7+ 的熵。DiE 的思路是把一堆弱信号拼成强结论,help/PE.md 和启发式规则库里常见的维度包括:

  • 节区特征:.upx0/.upx1这类命名、异常大小、RWX 权限组合;
  • 入口点行为:EP 附近的rdtsc、pushal、自修改 stub、Call/Pop 取址(来自有界反汇编的遍历,不是沙箱);
  • 导入表指纹:导入极少甚至为空、按位置哈希解析 API——典型加壳器特征;
  • 熵与结构联动:最后一个节区高熵 + 声明大小与实际不符,指向压缩存根。

一次真实输出的样子(README 示例):(Heur) Packer: Generic [EntryPoint + Pushal at EP + Last section EP + Imports like UPX (v0.59-0.93) + Sections like fake UPX + Section #0 ("") compressed + High entropy]——每条证据都列在括号里,你可以逐条复核,也可以据此判定某条是误报。注意官方态度:启发式结果是"线索",不是恶意证明,DiE 也反复声明自己不是杀毒软件。

🦠 恶意软件分诊:三条命令定优先级

  1. diec -r -U -b 样本根目录:全量启发式扫一遍,输出里每条(Heur)都是一个待验证线索;
  2. 按证据强度分优先级:带具体家族名(如 RAT、Stealer、ransomware 标记)的排前,Generic 打包类排后;
  3. 对进队列的样本看调试残留(Embedded PDB、构建路径)、签名状态和版本资源,提取 IoC;
  4. -j转 JSON 落盘进流水线,哈希去重后再上动态环境。

🛡️ 供应链审计:构建产物过一遍体检

  1. diec -r -j 构建产物目录批量扫,JSON 直接喂给审计脚本;
  2. 核对"声称的工具链"与"检测到的工具链":编译器、链接器、运行时版本是否和 CI 配置一致;
  3. 查签名与身份一致性——启发式层会把版本资源、Authenticode 状态、Rich 构建记录关联起来,冒名顶替在这里会露馅;
  4. 检查扩展名异常(如.dll后缀却装着 EXE 镜像),这类问题在签名分发的组件里并不罕见。

🧩 逆向前置分析:先读结构再进调试器

  1. diec 目标文件先拿架构、子系统、节区布局三行结论,10 秒内;
  2. 用die打开,翻 Memory map、Hex、Import Header 面板,确认入口点和可疑节区位置;
  3. 看 PDB 残留和编译器信息,决定静态拆还是动态跑;
  4. 发现加壳/保护标记后,先判断是商业保护、反调试还是真威胁,再决定要不要动调试器。这一步省掉的是"打开 IDA 发现入口是个 2KB 解包 stub"的浪费。

🧩 自定义签名编写规范

私有规则放db_custom/,别动主库db/。最小规则骨架:

meta("compiler", "Example Compiler"); function detect() { if (PE.isSectionNamePresent(".lz-algo")) { bDetected = true; sOptions = "LZMA"; } return result(); }

这段说明了什么:meta()声明结果类别和名称,detect()里条件命中后置bDetected = true并填sVersion/sOptions等字段,引擎替你组装结果——你只写判断,不造轮子。写规则前读 help/Binary.md(通用原语)、help/Global.md(全局函数)和对应格式文档;提交 PR 前看 CODE-FORMATTING.md。性能上有条硬规矩:条件从左到右求值,必须先用廉价的结构性检查(节区数、入口点、头信息)砍掉无关文件,再做字节模式搜索,且搜索范围限定到最小区域——CONTRIBUTING.md 明确说"一上来就全文件扫"的规则会被打回。

⚡ 四级数据库怎么摆,批量扫描怎么开

库路径用途
主库db/审核过的正式规则,按格式分目录,info.ini带更新日期
扩展库db_extra/未通过审核的规则,官方不推荐作为质量参考
自定义库db_custom/你的私有规则
精简库dbs_min/自动生成的产物(dbs_min_generate.sh驱动),禁止手改

diec -D <路径>可整体替换数据库;-r递归扫目录,-a扫所有类型,-e附带熵值,-i输出文件信息。批量任务在 shell 层并行即可,DiE 本身单进程处理。

⚖️ 横向对比:DiE 站在哪

维度filePEiDYARADiE
平台覆盖Unix 系基本 Windows 场景全平台Windows/Linux/macOS
引擎类型magic number 表静态签名可编程规则签名 + 启发式双引擎
PE 分析深度浅中(历史规则,误报偏多)取决于规则节区/导入/资源/调试记录多层解析
可扩展性低规则库导入高高(DiE-JS 脚本层)
开源程度开源规则库可移植开源开源

一句话定位:DiE 不追求给一个"恶意分",它给你的是可复核的证据链——谁构建的、镜像是原始的还是 dump 的、哪层保护能解释这个结构、下一步该看什么。每条(Heur)都带着出处,这在给 SOC 出报告时比黑盒评分实用。

🤝 三条参与路径 + 一句话收尾

  • 签名贡献:往db/提交规则,PR 必须附可复现样本、预期输出、独立来源和误报素材(CONTRIBUTING.md);
  • 启发式改进:完善__GenericHeuristicAnalysis_By_DosX.7.sg这类引擎的多维检查;
  • 文档与翻译:help/下的 API 文档随引擎演进,翻译走 XTranslation 项目。

Detect-It-Easy 的价值不在"识别得多",而在"每条结论都拿得出来对质"——从diec -r一条命令的初筛,到自定义签名写进db_custom/的深度定制,证据链始终完整。

【免费下载链接】Detect-It-EasyProgram for determining types of files for Windows, Linux and MacOS.项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询