资讯动态

DIE查壳工具实战指南:识别加壳程序与批量扫描

发布时间:2026/9/23 11:14:32 来源:尧图企业网站定制
简介DIEDetect It Easy是一款专业查壳工具主要面向安全分析、逆向工程与恶意代码检测场景可快速识别程序加壳类型、编译语言及打包器特征并支持超大文件读取相比PEID在复杂程序检测上更具优势。资源包共收录1362个文件以sg签名库、html说明文档、dll动态库和exe主程序为主还包含qm语言包、qss样式文件以及zip/rar等压缩样本整体仅13.55MB轻巧便携且目录结构清晰便于按需查阅。该工具绿色免费无需安装支持文件拖放、右键菜单、多国语言含简体中文和多种皮肤可跨Windows、Mac、Linux平台使用同时支持自定义插件、脚本编写与16进制编辑方便安全人员按需定制检测逻辑适配不同分析需求。目前已有4145人学习下载适合安全工程师、CTF玩家以及软件分析爱好者将其作为日常查壳与分析的主力工具。1. 查壳工具DIE一次查到底比PEID更值得装进工具箱做逆向和样本分析的人几乎都遇到过这种场面拿到一个不明程序习惯性点开PEID结果要么扫不出任何信息要么报一个含糊其辞的“Microsoft Visual C”换DIE一拖进去壳名、编译器、区段信息直接列得明明白白。这不是说PEID不行而是签名库太老对新壳和变种几乎失明。DIEDetect It Easy强就强在它同时用签名匹配和内容特征去判断能一次查到底甚至PEID读不了的大文件它也能正常打开。这个工具适合三类人做样本分析的、搞逆向调试的以及平时需要快速判断一个程序有没有被加壳的运维和开发。它最直观的优势就是绿色免安装、支持文件拖放、自带简体中文还内置了十六进制编辑器一套下来基本够用。下面从实际使用的角度把DIE的界面操作、命令行批处理、常见误报和插件扩展一次性讲清楚。2. DIE核心用法拖放扫描、右侧信息区与三种扫描策略2.1 界面启动与多语言切换第一次打开先做这三件事解压出来的DIE是一个可执行文件双击就能跑不需要安装环境也不写注册表。我第一次用的时候直接拖了个样本进去界面响应很快但默认界面是英文的对习惯中文提示的人不算友好。设置方法是打开主界面后进入Options菜单找到Language子菜单选Chinese界面就会切换成简体中文这个切换是即时生效的。建议拿到手先做三件小事第一确认版本号老版本的签名库对这两年新出现的壳识别率差很多第二在设置里开启“附加信息”显示这样右侧会额外列出入口点、文件偏移、区段数量这些逆向常用的关键数据第三把“加载时自动检查更新”打开DIE的签名库更新频率不算高但每次更新都能补上一批新壳特征。2.2 三种扫描策略快速、深度和启发式分别什么时候用DIE的扫描策略是进入工具后最需要先搞明白的部分它直接决定你点击扫描按钮后要等多久、结果准不准。很多人拿到手直接点扫描结果发现某些文件卡了很久其实是没有按文件性质选择正确的扫描模式。主界面左侧选择文件后右侧会显示“扫描”按钮旁边就是模式选择下拉框默认是快速扫描。快速扫描只匹配已知签名库的头部特征通常一两秒就能出结果适合大部分常规样本深度扫描会把整个文件按区段逐个做特征匹配速度慢很多但能识别出修改过头部特征、把壳的特征藏在文件中部的混淆样本启发式扫描不是靠已知特征而是根据文件的熵值和结构做猜测适合快速扫描和深度扫描都查不出结果的新壳或未知壳。三种模式我最常用的组合是先跑一遍快速扫描如果结果里没有任何加壳提示、但文件体积和功能明显不符再切深度扫描确认最后才上启发式。直接从深度扫描开始是最浪费时间的方式。扫描策略耗时误报率适用场景快速扫描秒级低常规PE、ELF文件识别深度扫描数秒到数十秒中修改过文件头的样本启发式扫描视文件大小而定最高新壳、未知壳、加密保护补充一个经验对大文件做深度扫描时如果长时间没反应先别急着关进程DIE的状态栏会显示当前正在扫描的区段偏移量等偏移量走到文件末尾说明快完成了。如果连状态栏都卡住才考虑是文件本身有问题。2.3 右侧信息区怎么读编译器、加壳器、打包器和保护器的判定逻辑DIE识别出一个文件后右侧信息区从上到下依次会显示文件类型、检测结果、编译器/加壳器提示、入口点、区段表和熵值。这里最容易被误读的是“检测结果”和“编译器/加壳器”两行它们的含义完全不同。检测结果那一行如果显示“UPX”说明确认识别出了壳如果显示“Microsoft Visual C”这通常是编译器的信息不是加壳器。很多人看到DIE显示VC就以为文件没加壳这是不对的很多壳加的其实就是编译器的特征字段。判断有没有加壳重点看两个地方一是检测结果里有没有出现壳名、打包器名或保护器名二是区段表里有没有出现UPX0、UPX1、.aspack、.packman这种典型壳区段名。正常编译出来的程序区段名一般是.text、.data、.rdata。DIE还能识别非PE格式的文件。输入的项目资料里提到它能处理ACE archive、ARJ这类压缩存档以及Borland编译器的产物这在分析老程序时很实用。老版本Borland Delphi编译出的程序在PEID里经常被误报成未知或者干脆不识别DIE能准确列出是Borland系编译器对定位加壳逻辑有很大帮助。另外DIE对ELF和Mach-O格式也做了支持虽然日常用得少但做跨平台样本分析时不用再切工具。3. 命令行与批处理用diec把查壳变成流水线3.1 diec参数拆解从图形界面到命令行的关键一步DIE自带命令行工具diec路径一般在安装目录或解压目录下的diec.exeWindows或diecLinux/macOS。图形界面适合单文件检查批量扫描几百个文件时还是命令行高效得多。diec的核心参数不多但组合起来能完成很完整的自动化扫描流程。# 基本用法扫描单个文件并输出简洁结果 diec -d sample.exe # 深度扫描并输出JSON格式结果 diec -d -j sample.exe # 递归扫描目录下所有文件 diec -d -r ./samples/ # 只显示检测到的壳或编译器信息节省输出量 diec -d -s sample.exe-d表示深度扫描-j输出JSON格式方便脚本解析-r递归扫描目录-s只显示检测结果。单独跑diec不加参数会打印完整帮助信息里面有全部可用参数建议先看一遍再写批处理。JSON格式是自动化场景里最常用的输出格式字段含义稳定省去解析字符串的麻烦。输出内容包括检测到的壳名、编译器信息、格式类型和熵值字段命名和图形界面的展示是对应的。3.2 Windows批处理批量扫描把结果汇总到文本文件实际做样本收集时经常拿到一个文件夹下有几百个待检查的程序手动拖进图形界面不现实。我一般会在Windows下写一个批处理脚本把结果统一输出到一个文本文件里。echo off setlocal enabledelayedexpansion set TARGET_DIRD:\samples set OUTPUTscan_result.txt if exist %OUTPUT% del %OUTPUT% for /r %TARGET_DIR% %%f in (*.exe *.dll *.sys) do ( echo [FILE] %%f %OUTPUT% diec.exe -d -s %%f %OUTPUT% 21 echo. %OUTPUT% ) echo Scan complete. pause这段脚本的逻辑很简单用for /r递归遍历目标目录匹配exe、dll、sys三类常见可执行文件逐个调用diec进行深度扫描把文件路径和扫描结果顺序写入同一个文本文件。加了enabledelayedexpansion是防止文件名包含特殊字符时变量展开出错这是个容易被忽略的细节。21把错误输出也重定向到同一个文件这样diec因为文件损坏或其他原因报错时也能在结果里看到不会静默丢失信息。小文件多的目录跑起来很快大文件建议先做一次快速扫描筛掉普通的再单独对剩余文件做深度扫描。3.3 Linux下的批量结果整合用退出码做快速分类diec在Linux下的用法和Windows基本一致如果你在收集跨平台的可执行文件样本可以在Linux下用一个简单的bash脚本把扫描结果按“检测到壳”和“未检测到壳”分开存放。#!/bin/bash SCAN_DIR$1 OUT_OKclean_list.txt OUT_PACKEDpacked_list.txt : $OUT_OK : $OUT_PACKED while IFS read -r -d f; do if diec -s $f | grep -qiE UPX|ASPack|MPRESS; then echo $f $OUT_PACKED else echo $f $OUT_OK fi done (find $SCAN_DIR -type f -name *.exe -print0)这段脚本用find -print0配合while read -d 逐行读取文件路径避免文件名带空格时被错误拆分。每条路径交给diec扫描然后通过grep匹配已知壳名关键字命中就归入packed_list.txt否则归入clean_list.txt。这样一趟跑下来几百个样本的分类结果一目了然再用图形界面单独查带壳的即可。脚本里的grep关键字可以根据实际样本特征补充扩展比如加VMProtect、Themida。注意改用grep区分大小写因为不同壳的输出格式里大小写规则不一致。3.4 diec返回码脚本判断壳有无的另一个入口diec执行结束后会返回一个数字这个返回码在写自动化脚本时很关键。返回码0通常表示没有检测到已知壳信息1表示检测到加壳或保护特征8一般代表文件读取失败或格式无法识别。不同版本可能在具体值上有差异建议在脚本里先跑一次echo $?确认返回码。我一般这样用返回码先跑快速扫描拿返回码为0的文件直接归入未加壳集合为1的再做深度扫描确认具体壳类型为8的单独列出来人工检查。这样分三级过滤能大幅减少深度扫描的文件数量处理大批量文件时省不少时间。diec -s target.exe /dev/null 21 case $? in 0) echo clean ;; 1) echo packed: $(diec -s target.exe) ;; 8) echo unreadable or unknown format ;; esac这段代码用case语句封装了返回码的三种分支处理逻辑awk或sed解析JSON输出可以拿到更详细的字段。需要注意返回码含义在不同系统上可能有细微差异换环境后先跑几个已知文件验证一下是值得的。4. 避坑与常见问题误报、假壳与死等六条实战记录4.1 大文件扫描卡到“假死”现象是拖入一个数百MB的文件后DIE界面卡住鼠标转圈或状态栏长时间不动。原因是DIE默认对文件做深度扫描时会逐区段读取并计算特征大文件意味着更多的区段和更大的计算量而界面上没有明显的进度百分比看起来就像死掉了。解决方法是先等10到15秒看状态栏有没有偏移量变化没有变化再切换成快速扫描模式快速模式对大文件基本是瞬间完成的如果必须要深度扫描结果用命令行diec -d跑退出码和输出结果会更可控。4.2 壳名识别成编译器名被误判为“无壳无保护”现象是一个文件在DIE里显示“Microsoft Visual C”就认为没加壳但运行后发现行为异常。原因是用DIE查壳时没有区分“编译器信息”和“加壳器信息”两个独立概念的差异不少壳会伪造编译器字段干扰判断。解决方法是不要只看进程名重点确认右侧检测结果里有没有壳名再看区段表里有没有UPX0、.aspack这类特征区段最后用工具的内存加载后的区段对比功能复核运行前后区段差异大基本说明存在加壳或自解密逻辑。4.3 启发式扫描误报普通程序被判成“加壳保护”现象是一个自己用Visual Studio正常编译的exe用启发式扫描被提示“可能被加壳”换快速扫描却一切正常。原因是快速扫描模式拿出的结论本身更可靠它是基于准确的签名匹配而启发式是基于熵值、结构做一些概率猜测。高熵区段不一定就是壳正常运行程序的代码区段也可能有较高熵值。解决方法是先用快速扫描验证快速扫描结果干净就以快速扫描为准如果只靠启发式疑似就把文件丢进沙箱跑一遍对比入口点和内存特征。4.4 DIE只扫了第一个区段就出结果漏掉中后部夹带的壳现象是快速扫描显示无壳但实际运行起来有内存修改行为用深度扫描才能查到检测结果。原因是快速扫描模式默认只匹配文件头部和少量关键偏移处的特征部分混淆壳会把特征字段写在文件偏移较深处快速扫描根本碰不到那个位置。解决方法是对于可疑文件一律做深度扫描同时用-j参数输出JSON结果后用文本搜索关键字文件体积不大但运行特征明显可疑的直接上十六进制手工看。4.5 拖放文件没反应界面无任何输出现象是把.exe文件拖进DIE窗口界面没有任何变化。原因一般是权限问题加拖放源程序以管理员身份运行的情况比如DIE窗口权限级别低于拖放源进程文件句柄无法正常传入。解决方法是直接通过文件 - 打开手动选择路径或者用命令行传参打开目标。平时用命令行跑批量扫描基本用不上拖放功能。4.6 同一文件两次扫描结果不一致怀疑是DIE的问题现象是同一个文件先跑一次快速扫描显示“Nothing found”再跑一次深度扫描却显示有壳。原因不是DIE抽风而是快速和深度两种模式下读取文件内容的范围和特征匹配策略不同结果不一定是冲突而是覆盖了不同层次的信息。解决方法是把深度扫描结果作为准确结果快速扫描结果仅作初筛如果深度扫描拿到的结果还是不确定再用Peid或在线查壳平台交叉验证一次。5. 进阶用法自己写查壳规则把DIE从查壳器变成验壳器DIE的查壳逻辑本身是脚本化的它的特征签名目录下放了一堆可以用文本编辑器直接改写的规则文件这些文件规定了每个壳的特征字节、偏移位置和判定条件。找到安装目录下的db文件夹里面能看到很多以壳命名的json或db文件打开后你会发现它们本身是一段结构清晰的文本描述。{ name: MyCustomProtoct, type: PE, pattern: 55 8B EC 83 EC ?? E9 ?? ?? ?? ??, offset: ep, entropy: 0.7 - 1.0 }name是自定义壳名type指定文件格式PE/ELF/Mach-Opattern是十六进制特征字节序列??表示模糊匹配offset填ep就表示从入口点开始匹配也可以填具体的文件偏移entropy是可选字段用于按熵值辅助过滤误报。保存后回到DIE界面对该文件重新扫描就能在结果里看到自定义壳名而不是“未知”。这个能力的价值在于你可以对内部的私有壳做定向识别。之前接触过一个加了自定义壳的老程序DIE和PEID都查不出具体名字后来我在db目录里建了一个规则文件把从入口点偏移处截到的特征字节填进去从此同源样本一拖进DIE就秒识别。建议把这个规则文件单独复制一份备份DIE更新签名库时不会覆盖你自己加的文件。十六进制编辑器在这种场景下也顺手用DIE内置的十六进制查看器定位到入口点附近把特征字节直接复制到规则文件里省去单独开一个Hex编辑器来回切换的过程。整个过程不需要写代码但能把DIE从“识别已知壳”升级成“识别你自己想识别的壳”实用性提升一大截。另外建议每新增一条规则后用几个已知加壳样本验证一下会不会被误匹配规则的特征字节不要太短至少4到6个字节起步否则很容易把普通程序也测出壳来。我在项目里加过一条只有2字节的规则结果一批正常编译的程序全被误报成加壳排查了一下午才发现是特征太短导致的。从那以后我每次写完规则都强制用干净的exe和带壳的exe各跑一遍确认无误才会纳入正式使用。希望这两条经验能帮你少走点弯路工具链本身并不复杂关键是把它用在自己实际场景里。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价