文章总结: DLL空心化技术是一种通过修改合法DLL代码区域注入恶意载荷的隐蔽攻击手段,文章系统解析了其技术原理、PE文件解析基础、完整注入流程以及利用TxF技术实现无痕修改的方法,测试表明该技术能有效绕过国内主流杀毒软件检测,为安全人员提供了攻击技术认知与防御视角。
综合评分: 85
文章分类: 免杀,二进制安全,红队,渗透测试,漏洞分析
【工具】杀软绕麻了?试试DLL镂空这招,轻松规避国内杀软
原创
SharkSec
SharkSec
2025年11月18日 22:13
湖南
🔔 温馨提示:为了防止走散,不错过每一篇干货内容,请记得将公众号设置为星标!🌟
【声明】本文技术、思路及工具仅用于合法安全测试与防御研究,严禁用于非法入侵、攻击他人系统或盈利等违法违规行为,一切后果由操作者自行承担,作者及团队不承担任何连带责任。
引·言
在Windows系统攻防领域,DLL空心化(DLL Hollowing)技术因兼具隐蔽性与实用性,成为恶意代码常用的注入手段之一。本文以一段典型的技术实现为蓝本,剥离具体代码标识,从技术原理、核心流程、关键技术支撑及安全防御等维度,系统解析该技术的内在逻辑与应用风险,为安全从业者提供针对性的分析视角。
检测效果
这里从杀软检测效果来看,国内杀软还是都能过的,此外,我们还用dll镂空demo版本扔到vt上测了一下效果,发现vt上面是以下效果,再次吐槽竟然bitdefender无检出,所以vt检出还是不准确,以实际环境测试为准。
一、DLL空心化-可信载体下的隐蔽执行逻辑
DLL空心化的核心思想是“借壳执行”,即利用系统中已存在的合法DLL作为载体,通过修改其代码区域,将自定义功能代码(Payload)注入其中,借助系统对可信DLL的信任机制,实现Payload的隐蔽加载与执行。相较于传统的代码注入技术,其优势在于载体本身具有系统合法性,可有效规避安全软件对未知代码的拦截与检测。
该技术的实现需解决三个核心问题:一是找到结构完整、适配性强的可信DLL载体;二是精准定位DLL中可修改的空闲代码区域,避免破坏DLL自身的加载逻辑;三是实现对DLL的无痕修改与内存映射,确保Payload能正常执行且不留下明显痕迹。
二、核心技术支撑-PE文件解析与地址映射
DLL本质是遵循PE(Portable Executable)文件格式的可执行文件,对其进行修改与注入的前提,是精准解析PE文件结构并实现地址空间的正确映射。主要包含以下两个关键步骤:
- 节表定位与地址转换
-
遍历PE节表,定位存放可执行代码的.text节头部
-
通过节头部属性完成磁盘物理地址(PA)与内存虚拟地址(RVA)的相互转换
-
对比节的VirtualSize和SizeOfRawData,取较大值作为节的有效范围,
-
确保代码植入操作不会越界
- 重定位表检查
- 全面遍历重定位表,检查是否存在落入目标注入范围的重定位项
- 根据系统架构(32
- 位/64位)筛选对应的重定位项
- 避免覆盖重定位信息,防止因重定位区域被破坏导致的DLL加载失败和注入暴露
三、完整注入流程:从载体选择到Payload执行
基于PE文件解析技术,DLL空心化的完整注入流程可分为载体选择、文件操作、PE校验、Payload写入与内存映射五个核心阶段,各阶段环环相扣,共同实现隐蔽注入的目标。
1. 载体DLL选择:优先选用系统目录下具有合法数字签名、文件结构稳定且系统依赖性强的常用运行时DLL(如C++运行时库)。这类文件天然具备可信属性,能够通过系统完整性校验,且不易被安全软件拦截。
// 核心遍历代码片段PROTECTED_CALL(k32Api.pGetSystemDirectoryW(SearchFilePath, MAX_PATH));wcscat_s(SearchFilePath, MAX_PATH, L"\\*.dll");PROTECTED_CALL(hFind = k32Api.pFindFirstFileW(SearchFilePath, &Wfd));if (hFind != INVALID_HANDLE_VALUE) { do { if (ByPeModuleX(Wfd.cFileName) == NULL) { // 筛选出未加载的DLL,执行后续操作 ... } } while (!bMapped && byFd);}
2. 双模式文件操作:支持普通模式与事务模式两种处理方式。普通模式以只读权限打开文件,用于快速解析PE结构和验证注入可行性;事务模式基于Windows TxF技术,通过创建事务句柄实现操作可回滚,能最大限度避免在磁盘留下修改痕迹。
3. PE校验与空间确认:需完成PE文件头合法性验证和.text节剩余空间检查。在事务模式下还需清理.text节范围内的无关数据目录项(将其地址和大小置零),并通过重定位表检查在.text节中定位足够大的无重定位冲突区域。
// PE解析核心代码IMAGE_DOS_HEADER* pDosHdr = (IMAGE_DOS_HEADER*)pFileBuf;IMAGE_NT_HEADERS* pNtHdrs = (IMAGE_NT_HEADERS*)(pFileBuf + pDosHdr->e_lfanew);IMAGE_SECTION_HEADER* pSectHdrs = (IMAGE_SECTION_HEADER*)((uint8_t*)&pNtHdrs->OptionalHeader + sizeof(IMAGE_OPTIONAL_HEADER));// 空间校验逻辑if (dwReqBufSize < pNtHdrs->OptionalHeader.SizeOfImage && (_stricmp((char*)pSectHdrs->Name, ".text") == 0 && dwReqBufSize < pSectHdrs->Misc.VirtualSize)) { // 满足植入条件,执行后续操作}
4. Payload写入与内存映射:根据操作模式采用不同写入策略。事务模式直接将Payload写入磁盘文件的注入区域;普通模式需先将DLL加载到内存,修改内存保护属性后写入.text节,再恢复原始属性。最后将修改后的DLL映射到进程空间,获取Payload执行地址完成注入。
四、TxF技术
TxF(Windows事务文件系统)在DLL空心化技术中实现了“无痕修改”的关键能力。与传统文件修改会直接留下磁盘痕迹、易被安全软件通过哈希校验或时间监控发现不同,基于TxF的操作将所有修改置于事务缓冲区中,未提交时对其他进程不可见,即使提交后系统日志也难以追踪完整轨迹,显著降低了被检测和溯源的风险。
在实现上,通过系统底层接口创建事务句柄,将文件打开、修改、写入等操作均绑定到该事务中,操作完成后通过关闭事务句柄实现修改提交,整个过程无需手动恢复文件原始状态,简化了无痕操作的实现流程
五、总 结
DLL空心化技术是Windows底层技术与攻防策略的深度融合,其核心在于通过合法载体和系统特性实现隐蔽攻击。该技术基于对PE文件结构的精准解析、地址映射的精细操作,以及对TxF等系统特性的创造性利用。
本文所涉及的工具,关注公众号并回复【251118】即可获取。
如果您对我们分享的文章感兴趣,想要深入探讨、交流并学习更多相关内容,欢迎各位师傅加入官方技术交流群!!!(关注公众号,点击菜单栏:联系我们->技术交流群,添加管理员微信,备注【加群】,拉您进群)
加入星球,一起进阶!
这个星球不搞虚的,只更攻防实战、免杀对抗、漏洞挖掘这类能落地的硬货:一线团队的一手攻防经验、私有工具源码(包括咱们公众号发的工具,星球里能直接拿源码 + 持续迭代),还有漏洞挖掘的 POC/EXP、每月定期一到两次 0day 分享,hw实战攻防遇见高频oa/设备源码都能在这拿到。
技术方向也刚好对标咱们平时的需求:工具开发、漏洞挖掘、代码审计、实战攻防这些全涵盖,甚至连 AI 安全的新玩法也会同步。
对了,星球里还有些「刚需资源」:FOFA 的 Key 长期能用,Cursor Pro 共享账号登了就能用; 企业 SRC 案例、红队实战经验也会拆解着讲。
现在星球现价 119 / 人,等满 100 人就涨到 129 了 —— 入了星球还能进专属内部群,比咱们公开交流群的资源更新更实时、讨论也更深度。
想上车的朋友直接扫描文末二维码了解详情,早入早享资源~
结束
👉 点击关注不迷路,一起潜入深水区,突破边界,共同精进!🚀
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:SharkSec SharkSec《【工具】杀软绕麻了?试试DLL镂空这招,轻松规避国内杀软》