文章总结: 该文档分析了一枚伪装成合法Zstandard压缩库的特种木马,其恶意代码嵌入CRT初始化链,早于DllMain执行。攻击者使用AVX2加密配置、反沙箱延迟、哈希API解析和RC4加密注入第二阶段payload。奇安信威胁分析数字专家通过静态二进制分析成功识别恶意行为,而常规工具和闭源大模型均未能检测。建议使用专业工具进行深度分析。 综合评分: 90 文章分类: 威胁情报,恶意软件,漏洞分析,红队,安全工具
撕开”合法压缩库”的伪装深挖藏在 CRT 初始化链里的特种木马
原创
威胁情报中心 威胁情报中心
奇安信威胁情报中心
2026年7月30日 10:39 北京
在小说阅读器读本章
去阅读
奇安信威胁情报中心 · 实战案例
撕开”合法压缩库”的伪装 深挖藏在 CRT 初始化链里的特种木马
一枚把开源 Zstandard 压缩库重新编译、外观”百分百合法”的特种木马,为什么连顶尖闭源大模型都看穿不了?奇安信威胁分析数字专家给出了答案。
· 威胁分析数字专家 · 样本分析 · 静态 + 动态 · 2026
软件供应链劫持,正变得越来越”讲究”。攻击者不再满足于简单粗暴地投递一个可疑 exe,而是把恶意代码缝进一个被全世界广泛信任的开源库里——功能照常工作,导出函数一个不少,谁会怀疑?
近期,我们追踪到一起真实攻击事件的链路中最终落地的特种木马,经分析判定,与此前我们已披露的 GGbond 木马高度同源。而真正让这起案例值得拿出来说的,是这枚”最终特马”的伪装之精巧,以及奇安信威胁分析数字专家撕开它的过程。
一句话概括这枚样本的狡猾之处:它把开源压缩库原样保留,让一切合法功能正常运行,却把完整的恶意启动链,悄悄焊进了程序的”出生第一秒”。
01 合法外衣:它就是货真价实的 Zstandard
样本是一个 691 KB 的 64 位 DLL。把它丢进任何一款常规分析工具,你大概率会得到一个让人放心的结论:”这是 Meta(Facebook)开源的 Zstandard(Zstd)压缩库 v1.6.0,一切正常。”
事实也确实如此——它的”表”是真的:
| | | | — | — | | 属性 | 取值 | | 文件类型 | PE32+ DLL (x64) | | 编译器 | MSVC 19.42(VS 2022 17.12,LTCG/POGO 优化) | | 加壳 | 否(熵值仅 4.07,无加壳器) | | ZSTD 版本 | v1.6.0(ZSTD_versionNumber 返回 10600) | | 导出函数 | 260+ 个 ZSTD_* / ZDICT_* 合法函数 |
熵值低、没有加壳、导出表整整齐齐全是合规的压缩 API——所有压缩、解压功能完全正常可用。如果有应用依赖 Zstd 做数据压缩,加载这个 DLL 后,业务功能不会有任何异常。这正是攻击者想要的:一个不会引起任何怀疑的”合法住客”。
02 致命伪装:恶意代码藏在 CRT 初始化链(_initterm)
问题在于,攻击者从 GitHub 拿到 Zstd v1.6.0 源码重新编译时,在保留全部合法导出的前提下,往里”焊”进了完整的恶意启动链。而这条链并不写在普通的 DllMain 主体逻辑里,而是嵌入了 MSVC CRT 的初始化序列——C++ 全局构造器 / _initterm 链。
在 Windows DLL 加载时,CRT 会先经过 _DllMainCRTStartup,调用 _initterm 执行全局对象的构造函数,这一步早于 DllMain 主体。把恶意代码塞进这条初始化链,意味着它在程序”出生的第一秒”就已执行——而绝大多数分析工具的视线,只停留在 DllMain 的表层反编译上,根本触及不到这条路径。
顺着 CRT 初始化链往下追,真正的恶意入口 FUN_180076520 在 DLL 加载瞬间(DLL_PROCESS_ATTACH)被自动唤醒,随后串起一条完整的攻击链路:
1AVX2 解密配置 —— 用 vpxor 指令解密内置配置块,strings 命令什么都看不见
2反沙箱延迟 —— Sleep(3000),熬过多数沙箱的默认超时阈值
3哈希 API 解析 —— 遍历 PEB + ROR13 哈希动态获取 API,静态导入表里查不到任何恶意 API
4命名管道 C2 初始化 —— 加载 Wtsapi32/Advapi32,枚举终端会话、抢占交互桌面
5RC4 解密并注入第二阶段 —— 从自身 PE 中扫描 0xFEEDFACE 标记,用密钥 1agsxoPlIK2i 解密内嵌 PE,VirtualAlloc(RWX) + CreateThread 执行
也就是说,真正的第二阶段后门,是被 RC4 加密后藏在这枚”合法 Zstd 库”内部的。不把这条初始化链完整追出来,你看到的永远只是一个老老实实的压缩库。
03 工具集体翻车:连顶尖闭源大模型也看不出来
正因为它伪装得太”真”,这枚样本成了各类分析工具的噩梦。问题不止是漏报——找不到藏在初始化链里的真凶;还有误报——被海量合法 Zstd 代码带偏方向。
一个典型的翻车现场:Zstd 库里有一个把错误码映射成错误字符串的函数 ZSTD_getErrorString,内部恰好是一个 36 个 case 的 switch 分支。常规工具一看”36 个 case 的分发逻辑”,兴奋地判定为”C2 命令分发表”——可它压根不是,它只是个压缩库的错误码查表函数。
常规工具 / 闭源大模型
两个方向都栽了
漏报:只看 DllMain 表层,追不到 CRT 初始化链里的真凶
误报:把 ZSTD_getErrorString 当成 C2 命令分发表
网络 API 检测全部误报(Zstd 结构体字段偏移与 Winsock API 名字撞车)
结论:看不出恶意,或越看越乱
威胁分析数字专家
去伪存真,一击命中
沿 CRT 初始化链精准定位 4 个 Zstd 源码中不存在的恶意函数
识破 36-case 是错误码查表,纠正”命令分发表”误判
排除全部网络 API 误报,还原真实命名管道 C2 架构
结论:恶意判定 + 完整攻击链 + 可执行 IOC
在这场”找茬”较量中,即便是当前顶尖的强闭源大模型,也无法直接分析出这枚样本的恶意行为——面对一个功能完全正常的合法压缩库,它同样会被表象蒙蔽,给出”判定为白”的结论。
图 | 顶尖闭源大模型对该样本的分析结论——未能识别出恶意行为,判定为白
图 | 另一闭源大模型的分析结论——同样判定为白
04 破局者:奇安信威胁分析数字专家凭什么看穿
奇安信威胁分析数字专家之所以能撕开这层伪装,靠的不是”运气”,而是内置的静态二进制分析技能。它不依赖样本”看起来像不像恶意”,而是直接下到二进制层面,把反编译、控制流、CRT 运行时初始化序列一条条理清楚。
在这枚样本上,专家做的事情非常”硬核”:
🔍 专家的破局路径
A逆向 CRT 初始化链 —— 从入口 0x18007cfd0 追到 dllmain_crt_dispatch,揪出藏在全局构造器阶段的恶意主入口 FUN_180076520
B识别”外来”函数 —— 在 260+ 个合法 Zstd 函数中,精准圈出 4 个 Zstd 源码里根本不存在的函数(反射加载器、C2 初始化、哈希解析器等)
C还原 RC4 反射注入 —— 定位 0xFEEDFACE 标记,复现 KSA+PRGA 解密,还原密钥 1agsxoPlIK2i 与第二阶段 PE 注入执行全过程
D去伪存真 —— 排除网络 API 全部误报,纠正”命令分发表”误判,给出 behavior_score=25 的明确恶意判定
以最核心的 PE 反射加载器为例,专家直接还原出了”扫描标记 → RC4 解密 → 分配可执行内存 → 写入 → 创建线程执行”的完整证据链:
// 专家还原:从自身 PE 提取并执行加密的第二阶段 payload
// Step 1: 校验 MZ 魔数,确认为有效 PE
if (*psVar6 == 0x5a4d) {
// Step 2: 在 Section 数据中扫描 0xFE 0xED 0xFA 0xCE 标记
while (uVar15 > uVar11) {
if (pcVar13[-2]==-2 && pcVar13[-1]==-0x13
&& *pcVar13==-6 && pcVar13[1]==-0x32) {
payload = (int)uVar11 + 8; // 标记后 +8 字节
break;
}
}
// Step 3: RC4 解密(密钥 “1agsxoPlIK2i”)
do { S[i]=(char)i; key_material[i]=param_2[i % key_len]; i++; } while (i<0x100);
// KSA 混洗 + PRGA 逐字节 XOR 解密 …
// Step 4: 注入执行
mem = VirtualAlloc(0, size, MEM_COMMIT|MEM_RESERVE, 0x40 /*RWX*/);
WriteProcessMemory(GetCurrentProcess(), mem, decrypted_pe, size);
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)mem, NULL, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
}
这不是”猜”出来的,而是把二进制逐层拆解、逐函数比对、逐指令还原出来的。也正因如此,专家给出的不是一句含糊的”疑似恶意”,而是每一处恶意行为都附带代码地址、函数签名与可复现证据的硬结论。
05 不止静态:动静结合的真正”样本分析专家”
静态二进制分析只是奇安信威胁分析数字专家的能力之一。面对一个恶意样本,它能快速完成动态分析 + 静态分析的组合拳——从代码层面读到运行层面,从”它长什么样”看到”它真正干了什么”。
🧬
静态分析
反编译、控制流还原、CRT 初始化链追踪、加密算法识别(RC4/AVX2)、哈希 API 解析、嵌入 payload 提取——看穿样本的”本来面目”。
⚡
动态分析
沙箱行为捕获、API 调用链时序、内存行为、进程/网络痕迹——还原样本”真正在干什么”,验证静态推断的触发路径。
🧩
去伪存真
在海量合法代码中排除误报,不被表象迷惑;既揪出藏起来的恶意,也识破伪装成恶意的正常逻辑。
📄
专业报告
自动输出覆盖样本信息、行为流程、关键函数证据、IOC、处置建议的完整分析报告,可读、可用、可追溯。
在本案例中,专家最终输出了一份结构完整的静态样本分析报告:从样本基础信息、分类判定、行为流程图,到关键函数代码证据、落地系统痕迹、网络 C2 架构、反分析技术、IOC 清单,再到处置建议——每一个维度都有据可查。
图 | 奇安信威胁分析数字专家:精准判定为恶意,并给出完整攻击链与证据
图 | 云沙箱对该样本的动态行为判定结果
报告节选 · 反分析技术清单 时序延迟 Sleep(3000) · 调试器检测 IsDebuggerPresent · API 哈希解析(PEB+ROR13)· AVX2 配置加密 · RC4 payload 加密 · API 缓存页保护切换防 EDR Hook …… 每一项都标注了具体函数地址与对抗手段。
06 结语:看穿伪装,才是真正的”专家”
这起真实攻击中的案例,最终木马与 GGbond 同源,本不是新闻。真正值得记住的是:当攻击者学会把恶意代码缝进开源库的 CRT 初始化链、用合法功能做幌子时,“能不能分析出恶意行为”已经成了检验分析能力的试金石。
在这块试金石面前,常规工具漏报误报、顶尖闭源大模型也束手无策。而奇安信威胁分析数字专家,凭借内置的静态二进制分析技能,沿着 CRT 初始化链一路深挖,把这枚”百分百合法”的特种木马扒了个干干净净。
图 | 威胁分析数字专家深挖分析过程(一)
图 | 威胁分析数字专家深挖分析过程(二)
它不靠样本”看起来像不像”,而靠把二进制逐层拆开看个明白。静态 + 动态、代码层 + 运行层,快速给出真正专业的样本分析报告——这正是奇安信威胁分析数字专家想成为的样子:你的样本分析专家。
| | | — | | 点击查看 · 完整分析会话(专家完整交互过程) expert.qianxin.com/shared/uFuXBKdEm9AMUaQSyydGbg |
| | | — | | 点击查看 · GGbond分析报告 “猪猪侠”的阴影:疑似某虚拟手机服务商官网安装包被供应链攻击 https://ti.qianxin.com/blog/articles/supply-chain-attack-on-official-installer-of-a-virtual-mobile-service-provider-cn/ |
奇安信威胁分析数字专家
静态 + 动态 双引擎 · 内置静态二进制分析技能 从代码到运行,把每一个恶意样本看透 专业样本分析报告,即问即得
扫码体验 · 奇安信威胁分析数字专家
本文案例基于真实样本静态分析报告整理。 样本 SHA256: f0c5019fedef6270ba0528ce93cc647f12db606e72e4a4a6b3e111f2cbc9c101 完整分析会话: expert.qianxin.com/shared/uFuXBKdEm9AMUaQSyydGbg 技术细节仅供安全研究与防御参考。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:奇安信威胁情报中心 威胁情报中心 威胁情报中心《撕开”合法压缩库”的伪装深挖藏在 CRT 初始化链里的特种木马》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论