alexlee820/PatchedCLRLoader

GitHub: alexlee820/PatchedCLRLoader

一个通过直接系统调用在 clr.dll 层面绕过 AMSI 和 ETW 的 .NET 程序集加载器,支持主流 EDR 环境。

Stars: 31 | Forks: 0

# PatchedCLRLoader PatchedCLRLoader 是 PatchlessCLRLoader 的一个分支,用于加载 .NET assembly 并将输出重定向到 mailslot。这只是我编写恶意软件的一次练习。我也曾尝试编写带有 hwbp 的代码在 CrowdStrike 中测试,但不知道为什么执行 assembly 后没有任何输出,所以我编写了这个(patching)loader 来绕过 assembly 的 amsi 和 etw。
本仓库包含:
  • RC4 加密 payload python 脚本
  • 通过直接 Syscalls 实现 Patching CLR 和 ETW 绕过 (Exe)
  • 通过直接 Syscalls 实现 Patching CLR 和 ETW 绕过 (DLL)

由于在较新的 Windows Defender 版本(例如 win11)中,对 amsi.dll 中的 AmsiScanBuffer 和 ntdll.dll 中的 Eventwrite 进行 patching 不再有效。因此,我尝试改为对 clr.dll 中的 AmsiScanBuffer 和 NtTraceEvent 进行 patching。
为什么 patching clr 有效?
参考: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e54271585e124728.png) 当你加载 assembly 时,AmsiScanBuffer 将在 amsi.dll 中被调用,然后 AmsiScanBuffer 函数将调用 clr.dll 中的 AmsiScan。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3b33fb99b4124729.png) 在 AmsiScan 函数中,只有当 clr.dll 中 AmsiScan 函数里的 global_pAmsiContext 不等于 0 时,AV/EDR 才会将内容识别为恶意。所以我们可以通过 GetProcAddress 找到 AmsiScanBuffer 参数的地址,并简单地将其 patch 为零或不存在的函数缓冲区。这样,Amsi 就可以轻松绕过。 # 用法 RC4 加密 Payload ``` python RC4encrypt.py -i -o -k ``` ![](https://raw.githubusercontent.com/alexlee820/PatchedCLRLoader/main/images/RC4.png) # AV / EDR 测试结果 | AV/EDR 产品 | 执行 | | ------ | ------ | | Palo Alto Cortex XDR | :white_check_mark: | | Sophos | :white_check_mark: | | MDE | :white_check_mark: | | CrowdStrike | :white_check_mark: | # 致谢 InlineExecute-Assembly -
PatchlessCLRLoader -

标签:AMSI 绕过, CLR 注入, CrowdStrike 绕过, Direct Syscalls, DNS 反向解析, EDR 对抗, ETW 绕过, Mailslot 通信, MDE 绕过, .NET Assembly Loader, RC4 加密, RFI远程文件包含, UML, Windows 安全, 中高交互蜜罐, 内存修补, 多人体追踪, 客户端加密, 客户端加密, 恶意软件开发, 数据展示, 私有化部署, 红队, 逆向工具, 防御规避, 高危端口监控