📌 免责声明:本系列文章仅供网络安全研究人员在合法授权下学习与研究使用,严禁用于任何非法目的。违者后果自负。
本专题第一篇文章 破解迷雾:红队视角下的 C2 对抗与绕检艺术 里提到 C2 绕检涉及的三个核心层面,这最后一个层面就是 EXE 层面,通过对成品 EXE 文件处理来实现绕检,本文介绍以下五种处理 EXE 的方式。
方式 | 目标 | 方法 | 效果 |
---|---|---|---|
降熵 |
|
|
|
添加详细信息 |
|
|
|
自定义签名 |
|
signtool.exe 生成并应用自签名证书 |
|
添加花指令 |
|
|
|
加壳脱壳 |
|
|
|
一、降熵
熵(Entropy)是一个来源于热力学和信息论的重要概念,用来度量系统的混乱程度、不确定性或信息量。不同领域对熵的定义略有不同,但核心思想是一致的:熵越大,系统越混乱或不确定。
文件熵值是衡量一个文件中数据“混乱程度”或“信息熵”的指标,常用于判断数据是否加密、压缩或混淆。在免杀中,文件熵值是杀软静态检测时的关键参考指标之一:
|
|
|
---|---|---|
0–4 |
|
.text 、.rdata |
5–6.5 |
|
|
6.5–8 |
|
|
杀毒软件一看到某个节(Section)熵值在 6.8+,马上标红扫描。
熵值分析
使用“仇辉攻防”自主研发的 EXE 工具集 QEToolkit 中的 Hlyzer 模块,可以一键查看 .exe 文件熵值。
QEToolkit 所有模块不仅支持以上交互模式,还支持命令行模式
QEToolkit.exe entropy -t target
QEToolkit.exe reduce -t target -o outdir
QEToolkit.exe junk -t target -o outdir -j 2048
QEToolkit.exe detail -r C:PathResourceHacker.exe -t target -o outdir
QEToolkit.exe sign -s signtool.exe -t target -o outdir
那么如何来降低文件熵值呢?对已编译好的 .exe 文件进行降熵处理,核心目标是让文件看起来更“正常”,以躲避杀软的静态检测。这里介绍两种方法:添加低熵填充、添加合法资源
添加低熵填充即向高熵节(通常是 .text 或含有加密 shellcode 的节)中插入 0x00/空格/常数序列,让高熵节看起来更“正常”。
使用工具集中的 Qducer 模块可以实现一键自动化降熵
把降熵前后的两个 .exe 文件拖到360中检测,原文件被杀,降熵后的文件绕过静态扫描!
砸熵利器——Qducer:将熵值砸到“1”以下!
使用 Restorator2018 类似工具添加合法资源也能达到降熵的效果。
比如,在上面 16.exe 降熵后继续添加光标资源
添加完,再次检查,发现文件熵值又下降了一些(3.78→3.27)
添加“详细信息”(如公司名、版本号、描述等)能提升免杀效果,是因为这些元数据能让你的程序看起来更像“正规软件”,从而绕过杀毒软件在静态分析阶段的启发式规则与白名单过滤,避免因信息缺失或异常而被标记为可疑,进而提高整体免杀成功率。
首先,拿一个未做处理的样本塞到360嘴里,直接秒吞
QEToolkit 工具集中的 Qadder 模块可以实现一键自动化调用 ResourceHacker 工具写入自定义详细信息。
https://www.angusj.com/resourcehacker/
对刚才被杀的 .exe 添加自定义详细信息
效果示例:
再次塞到360嘴里,成功绕过!
1、创建签名资源模板 .rc
1 VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904B0"
{
VALUE "CompanyName", "Security Intelligence"
VALUE "FileDescription", "Entropy Analyzer Tool"
VALUE "FileVersion", "1.0.0.0"
VALUE "InternalName", "entropytool.exe"
VALUE "OriginalFilename", "entropytool.exe"
VALUE "ProductName", "Entropy Toolkit"
VALUE "ProductVersion", "1.0.0.0"
VALUE "LegalCopyright", "Copyright © 2025 Security"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409 0x04B0
}
}
2、编译 .rc
为 .res
(一次性)
ResourceHacker.exe -open version_info.rc -save version_info.res -action compile
3、将所有需要的文件放到同一目录
4、写入签名信息到目标程序
ResourceHacker.exe -open md回调.exe -save md回调_signed.exe -action addoverwrite -res version_info.res -mask VERSIONINFO,
添加数字签名可以增强免杀效果,核心在于它提升了可执行文件的“可信度”,使安全产品更倾向于放行已签名的程序。签名后的文件不仅可绕过部分基于“未知/无签名程序”的初级拦截策略,还能在静态检测中掩盖文件结构异常、避免被直接标记为潜在威胁。即使使用的是自签名证书,也可在本地测试中模拟真实可信文件行为,有助于降低被 AV/EDR 即时阻断的风险。
实现方案和步骤
QEToolkit 工具集中的 Qsigner 模块通过调用微软官方提供的数字签名工具 signtool.exe 实现一键自定义签名。
继续对上文处理过的文件进行自定义签名操作
效果示例:
免杀效果测试
1、准备一批 .exe 样本,全部进行自定义签名处理
2、将原文件和处理过的签名文件全部塞给360检测:原文件全军覆没,自定义签名的文件9个成功免杀
且均可正常运行:
Qsigner 模块实现原理(常规操作流程)
这里介绍使用Powershell全自动生成证书并实现签名的方法:
1、前提工具
|
|
|
---|---|---|
signtool.exe |
.exe 文件 |
C:Program Files (x86)Windows Kits10bin10.0.26100.0x64signtool.exe |
2、生成测试证书脚本(gen_cert.ps1)
3、一键执行证书生成 + 签名操作(run_all.bat)
4、签名 EXE 的脚本(sign_test.bat)
添加花指令(Junk Code)可以增强免杀效果的本质在于:通过插入对程序逻辑无影响的无用指令,打乱原本清晰的指令结构和静态特征,干扰杀毒软件的特征匹配和行为分析,从而降低被识别为可疑程序的概率。这种混淆手段尤其对抗基于签名和静态扫描的检测机制效果显著。
使用工具集中的 Qjector 模块可以实现自动化添加花指令
批量测试9个文件,全部拖到360下测试,还剩4个,可见添加花指令也具有一定的功效!
1、加壳
加壳可以增强免杀效果的根本原因在于:它通过压缩、加密或重构原始可执行文件的内容,隐藏了关键的可疑特征(如 API 调用、字符串、节结构等),从而有效干扰杀毒软件的静态特征识别与行为分析。尤其是使用非公开、定制壳时,更容易绕过依赖特征库或启发式分析的检测机制,提升免杀能力。
这里就拿UPX演示,项目地址: https://github.com/upx/upx
upx shell.exe #加壳
upx -d shell.exe #脱壳
对原先被杀的md回调.exe进行默认加壳
检测,加完壳不杀了。这种有一定的运气成分,最好批量测试
有时加完壳立马再脱壳,也能增强免杀效果。是因为这一过程中会改变原始 EXE 的节区结构、对齐方式、入口点偏移、时间戳等元数据,破坏了杀软依赖的静态特征匹配和哈希指纹,即使最终内容还原,文件在二进制层面已发生变化,从而绕过了基于特征库和静态分析的检测机制,达到意外的免杀效果。
在攻防演练中,EXE 文件处理是一项强有力的绕检手段,尤其对国内部分杀软具有奇效。通过不同的处理手段,如降熵、添加详细信息、自定义签名、花指令、加壳等,可以有效地绕过多种杀软和安全防护措施,提升载荷的隐蔽性和生存时间。
原文始发于微信公众号(仇辉攻防):五种 EXE 处理方式,突破静态查杀
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论