ahkeur/VEH2

GitHub: ahkeur/VEH2

利用双重向量化异常处理实现无补丁 AMSI 绕过的 .NET 内存加载器

Stars: 30 | Forks: 6

# VEH²:无补丁 AMSI 绕过与内存 .NET 加载器 本仓库包含 VEH² (Vectored Exception Handling²) 技术高级实现的源代码。该工具充当一个复杂的加载器,可以直接从内存执行 .NET 程序集,同时在不修补 `AmsiScanBuffer` 函数的情况下绕过反恶意软件扫描接口 (AMSI)。 ## 主要特性 * **无补丁 AMSI 绕过**:利用双重向量化异常处理程序 (VEH) 设置,在运行时拦截并消除 AMSI 扫描。 * **.NET CLR 托管**:从原生 C++ 进程托管公共语言运行时 (CLR),允许其加载和管理 .NET 代码。 * **内存程序集执行**:将目标 .NET 程序集从磁盘读取到内存缓冲区并从那里执行,避免直接从驻留在磁盘上的文件执行。 * **隐蔽模块加载**:通过加载一个牺牲性的嵌入式虚拟程序集,强制将 `amsi.dll` 加载到进程的地址空间中。这使得该工具能够找到 `AmsiScanBuffer` 地址,而无需进行可能被监控的 `LoadLibrary` 调用。 ## 技术细节:分步说明 1. **CLR 和 AMSI 初始化**: * 程序首先托管 .NET CLR。 * 然后从字节数组加载一个微小的、嵌入式牺牲 .NET 程序集。此操作的唯一目的是触发 CLR 将 `amsi.dll` 加载到进程中。 * 随着 `amsi.dll` 现已位于内存中,程序使用 `GetModuleHandle` 动态解析 `AmsiScanBuffer` 的地址。 * 注册两个向量化异常处理程序 (VEH):**VEH1** 用于处理 `EXCEPTION_BREAKPOINT`,**VEH2** 用于处理 `EXCEPTION_SINGLE_STEP`。 2. **启动绕过机制**: * 程序使用 `DebugBreak()` 故意触发一个断点。 * 这将调用 **VEH1**,该处理程序通过修改调试寄存器 (Dr0-Dr7) 在 `AmsiScanBuffer` 函数的地址上设置硬件断点。 3. **触发绕过**: * 用户指定的 .NET 程序集从磁盘读取到内存缓冲区中。 * 程序指示 CLR 从内存缓冲区加载此程序集。 * 当 CLR 准备执行代码时,它首先尝试通过调用 `AmsiScanBuffer` 扫描内存缓冲区以查找恶意内容。 * 当 CPU 尝试执行 `AmsiScanBuffer` 的瞬间,硬件断点被触发,引发 `EXCEPTION_SINGLE_STEP`。 * 此异常调用 **VEH2**。 4. **执行绕过**: * 在 **VEH2** 内部,神奇的事情发生了: * 清除硬件断点以防止无限循环。 * `AmsiScanBuffer` 的返回值(在 `RAX` 寄存器中)被设置为 `S_OK` (0)。 * 堆栈上的 `amsiResult` 参数被设置为 `AMSI_RESULT_CLEAN`。 * 指令指针 (`RIP`) 被操作以跳过整个 `AmsiScanBuffer` 函数,直接跳转到其返回地址。 * 执行继续进行,就像 `AmsiScanBuffer` 已经运行并发现没有任何恶意内容一样。随后执行用户的程序集。 这种方法被认为是“无补丁”的,因为它不改变 `AmsiScanBuffer` 本身的代码,使其比传统的修补技术更隐蔽。 ## 构建与运行 本项目配置为使用 Microsoft Visual C++ 编译器 (`cl.exe`) 和 `nmake` 进行构建。你需要安装 Visual Studio Build Tools 或完整的 Visual Studio 以及 C++ 工具链。 ### 构建 打开开发者命令提示符(例如 “x64 Native Tools Command Prompt for VS”)并运行: ``` nmake ``` 这将创建一个 `build` 目录,并将 `VEH2_Release.exe` 可执行文件放入其中。 ### 清理 要删除所有构建产物,请运行: ``` nmake clean ``` ### 执行 执行编译后的程序,传递你希望加载的 .NET 程序集的路径作为参数。 ``` .\build\VEH2_Release.exe C:\path\to\your\assembly.exe ``` ## 参考 CrowdStrike 详细描述了核心绕过技术: [CrowdStrike 博客:调查无补丁 AMSI 绕过攻击的威胁](https://www.crowdstrike.com/en-us/blog/crowdstrike-investigates-threat-of-patchless-amsi-bypass-attacks/) ![CrowdStrike 图表](https://www.crowdstrike.com/en-us/blog/crowdstrike-investigates-threat-of-patchless-amsi-bypass-attacks/_jcr_content/root/container/container/container/image_copy_copy_copy_314958831/.coreimg.png/1750175626115/blog-amsi-11.png)
标签:AMSI Bypass, AmsiScanBuffer, C++, CLR Hosting, Conpot, DAST, DNS 反向解析, Evasion, Loader, Shellcode Loader, VEH, Windows安全, 云资产清单, 免杀技术, 内存加载, 分布式计算, 反射式注入, 字典攻击, 安全测试, 客户端加密, 客户端加密, 异常处理, 恶意软件分析, 攻击性安全, 数据展示, 数据擦除, 文件系统模拟, 无补丁绕过, 暴力破解检测, 知识库安全, 硬件断点, 端点可见性, 红队, 绕过防御, 逆向工程