Zypherion-Technologies/Nemesis
GitHub: Zypherion-Technologies/Nemesis
Nemesis 是一款 .NET 进程监控工具,通过在 native 层 hook CLR 来捕获反射式加载的内存程序集并检测 AMSI/ETW 绕过行为,专为分析 jlaive 风格的恶意软件加载器链而设计。
Stars: 39 | Forks: 4
# Nemesis
[](https://www.zypherion.tech)
[](https://discord.gg/JXx32jKJXY)
[](https://t.me/zypherion_technologies)
[](https://x.com/Zypherion_Tech)
我做的一个 Windows 工具,因为我厌倦了在恶意软件样本中盯着 jlaive 的各种 fork,却没有任何公开工具能在运行时真正将它们拆开分析。
简而言之,它是一个 .net 进程监视器,在 native 层 hook clr,跟踪反射式 assembly 加载,并自动直接从内存中 dump PE。它还会对照磁盘上的原始二进制文件检查 amsi 和 etw 的完整性,同时检测诸如 `clr.dll` 字符串 patch 和直接使用 `LoadFromBuffer` 等绕过技术。
## 为什么叫这个名字?
你可能会想,为什么叫 nemesis 这个名字?
因为它代表了该工具的明确目的。nemesis 象征着持续挑战对手或导致其覆灭的存在,这正是这个项目背后的理念。
在希腊神话中,[nemesis](https://en.wikipedia.org/wiki/Nemesis_(mythology)) 是神圣复仇的化身,负责向那些过于傲慢或自认天下无敌的人施加报应。如果你问我的看法,对于那些吹嘘自己是“FUD”的恶意软件来说,这名字简直再合适不过了。
## 为什么会有这个项目
我是一名恶意软件分析师。如果你从事这份工作(对我来说是爱好)足够久,你就会开始一遍又一遍地看到相同的 loader 链,尤其是自从 jlaive(也叫 crybat)火了之后,每个 script kiddy 都去 fork 它。
这个模式简单到有点蠢,但处理起来烦人得要命:
```
something.bat → obfuscated powershell → csharp stub → your actual payload
```
你双击一个看起来像天书一样的 `.bat`。cmd 启动了一长串充满垃圾字符的 powershell。powershell 解密/解压了一个 .net stub(aes、gzip、base64)。这个 stub patch 了 amsi + etw,在内存中反射式加载了真正的 exe/dll,然后一切就结束了——没有任何有用的东西会以友好的形式落到磁盘上。
这让我很困扰。针对这种特定的链路,目前真的没有什么好的**公开**工具:在 .net payload 真正落地的地方进行 hook,在进程自我销毁之前将其 dump,并捕捉这些 stub 总是会做的 amsi/etw patch。所以我开发了 nemesis。
它不是万能药。它不会替代你的沙箱。但它为你提供了一个真实的工具,可以在测试机上针对可疑的 `.bat` 运行,并真正从中提取出有用信息。
## 它的具体功能
**launcher** (`Launcher.exe`)
- 创建挂起状态的目标进程(exe、bat、cmd 等等)
- 在主线程运行之前注入 `Nemesis.dll`
- 等待 nemesis 发出准备就绪的信号
- 恢复运行。如果目标进程派生了 powershell 子进程,launcher 也可以一并注入
**nemesis dll** (`Nemesis.dll`)
- hook jlaive 风格 stub 实际会触发的 clr 加载路径:
- `nLoadImage`
- `nLoadFile`
- `AssemblyNative::LoadFromBuffer`(基于 nLoadImage 的特征码解析)
- 当内存中出现反射式 PE 时 -> 将其排入 dump 队列,保存至 `%TEMP%\Nemesis_dumps`
- 将运行中的 `amsi.dll` / `ntdll.dll` 导出表与磁盘上的副本进行对比(捕捉经典的 `AmsiScanBuffer` / `EtwEventWrite` 上的 `ret` patch)
- amsi 检查还会在 clr 加载时查看 clr 的 `.rdata` 字符串(有些绕过技术会去 patch 这些字符串,vxug 上有一篇关于此的很棒的论文,名为:`2024-11-21 - New AMSI Bypss Technique Modifying CLRDLL in Memory.pdf` )
- 记录到控制台(带颜色)+ `%TEMP%\Nemesis.log`,它还启用了 `ENABLE_VIRTUAL_TERMINAL_PROCESSING`,以避免控制台出现一些奇怪的问题 :D
基本上:让 bat 链运行,在 crypter 实际加载 payload 的地方捕捉它,并沿途记录下它使用的各种规避伎俩。
## 证明:
## 编译
需要安装带有 C++ 桌面开发 + masm (x64) 组件的 Visual Studio 2022 及以上版本。
打开 `Nemesis.slnx`,选择 **Release | x64**,生成解决方案。
## 在真实目标上运行
这是实际的应用场景:将它指向一个可疑的 bat,看看会出些什么结果:
```
cd x64\Release
.\Launcher.exe "C:\path\to\suspicious.bat"
```
在 `--` 之后的额外参数将传递给目标进程:
```
.\Launcher.exe myapp.exe -- --some-flag
```
自定义 dll 路径:
```
.\Launcher.exe --dll C:\path\Nemesis.dll myapp.exe
```
**输出产物:**
- 日志 → `%TEMP%\Nemesis.log`
- dump 出的 PE → `%TEMP%\Nemesis_dumps`
## nemesis 是什么 / 不是什么
**是:**
- 针对类似 jlaive 风格 crypter(bat → ps1 → csharp 链)的运行时分析辅助工具
- 适合在实验环境的虚拟机中使用,当你手头有样本并希望获取内存 dump 及 amsi/etw 遥测数据时非常有用
- 欢迎其他分析师使用、扩展或吐槽
**不是:**
- EDR 的替代品
- 不保证能抓到所有的 fork 变种(混淆方式会变,还会出现新的绕过技术,例如无 patch 的 amsi/etw,因为它目前还不是为此设计的,不过我计划在未来解决这个问题)
也许这会演变成某种托管语言工具包。
## 注意事项
- 目前仅支持 x64,因为需要处理 clr 的 asm detours
- cmd.exe 宿主进程通常没有 clr,不过 nemesis 无论如何都会发出就绪信号,因此 launcher 不会卡住;真正的工作会在 powershell/dotnet 出现时发生
- 编译时遇到 `LNK1104` 错误?说明还有进程占用着 nemesis.dll——结束目标进程后再重新编译即可
- 编译时出现 `pwsh.exe` 的 vcpkg 噪音是无害的,直接忽略即可
## 延伸阅读(jlaive 生态系统)
如果你想了解你正在对抗的是什么:
- [Trend Micro 关于 BatCloak / Jlaive 的分析](https://www.trendmicro.com/en_us/research/23/b/attackers-target-microsoft-users-with-batcloak-engine.html) — 解析 bat → ps1 → csharp 的多层结构
- [Fortinet 关于 ScrubCrypt 的分析](https://www.fortinet.com/blog/threat-research/scrubcrypt-deploys-venomrat-with-arsenal-of-plugins) — jlaive 令人头疼的继任者,如果你对 scrubcrypt 的不同之处感兴趣的话,那就是他们会在 .bat 中使用管道符(pipe sign)来传递命令,这招其实挺好用的...
- [Unprotect.it — ScrubCrypt](https://unprotect.it/technique/scrubcrypt/) — 技术细节拆解
- https://github.com/backdoorskid/ClrAmsiScanPatcher - 找到了前面提到的 .net 字符串,强烈建议阅读那篇 .pdf 文件 :)
## 免责声明
**使用 nemesis 即表示您接受以下条款。** 本项目按“原样”提供,**不提供任何保证** —— 您需自行承担所有风险。
您需对合法、授权的使用(实验虚拟机、自有系统、已获得明确许可)负全责。在法律允许的最大范围内,作者及 [zypherion.tech](https://zypherion.tech) **对因使用或不当使用而产生的任何损害、损失或法律索赔不承担任何责任**。完整条款请参阅 [LICENSE](LICENSE)。
## 许可证
**非商业 / 个人 / 研究 / 爱好用途** → [PolyForm Noncommercial 1.0.0](LICENSE)
**商业用途**(出售它、作为付费产品、用于 SaaS、客户项目等) → 您需要获取单独的商业授权。PolyForm Noncommercial 许可证不涵盖此类用途。
如果您需要商业授权,请通过以下方式联系我:
**[adam@zypherion.tech / @wd6g(discord) / telegram: @ZypherionTechnologies]**
# 待办事项
## 编译
需要安装带有 C++ 桌面开发 + masm (x64) 组件的 Visual Studio 2022 及以上版本。
打开 `Nemesis.slnx`,选择 **Release | x64**,生成解决方案。
## 在真实目标上运行
这是实际的应用场景:将它指向一个可疑的 bat,看看会出些什么结果:
```
cd x64\Release
.\Launcher.exe "C:\path\to\suspicious.bat"
```
在 `--` 之后的额外参数将传递给目标进程:
```
.\Launcher.exe myapp.exe -- --some-flag
```
自定义 dll 路径:
```
.\Launcher.exe --dll C:\path\Nemesis.dll myapp.exe
```
**输出产物:**
- 日志 → `%TEMP%\Nemesis.log`
- dump 出的 PE → `%TEMP%\Nemesis_dumps`
## nemesis 是什么 / 不是什么
**是:**
- 针对类似 jlaive 风格 crypter(bat → ps1 → csharp 链)的运行时分析辅助工具
- 适合在实验环境的虚拟机中使用,当你手头有样本并希望获取内存 dump 及 amsi/etw 遥测数据时非常有用
- 欢迎其他分析师使用、扩展或吐槽
**不是:**
- EDR 的替代品
- 不保证能抓到所有的 fork 变种(混淆方式会变,还会出现新的绕过技术,例如无 patch 的 amsi/etw,因为它目前还不是为此设计的,不过我计划在未来解决这个问题)
也许这会演变成某种托管语言工具包。
## 注意事项
- 目前仅支持 x64,因为需要处理 clr 的 asm detours
- cmd.exe 宿主进程通常没有 clr,不过 nemesis 无论如何都会发出就绪信号,因此 launcher 不会卡住;真正的工作会在 powershell/dotnet 出现时发生
- 编译时遇到 `LNK1104` 错误?说明还有进程占用着 nemesis.dll——结束目标进程后再重新编译即可
- 编译时出现 `pwsh.exe` 的 vcpkg 噪音是无害的,直接忽略即可
## 延伸阅读(jlaive 生态系统)
如果你想了解你正在对抗的是什么:
- [Trend Micro 关于 BatCloak / Jlaive 的分析](https://www.trendmicro.com/en_us/research/23/b/attackers-target-microsoft-users-with-batcloak-engine.html) — 解析 bat → ps1 → csharp 的多层结构
- [Fortinet 关于 ScrubCrypt 的分析](https://www.fortinet.com/blog/threat-research/scrubcrypt-deploys-venomrat-with-arsenal-of-plugins) — jlaive 令人头疼的继任者,如果你对 scrubcrypt 的不同之处感兴趣的话,那就是他们会在 .bat 中使用管道符(pipe sign)来传递命令,这招其实挺好用的...
- [Unprotect.it — ScrubCrypt](https://unprotect.it/technique/scrubcrypt/) — 技术细节拆解
- https://github.com/backdoorskid/ClrAmsiScanPatcher - 找到了前面提到的 .net 字符串,强烈建议阅读那篇 .pdf 文件 :)
## 免责声明
**使用 nemesis 即表示您接受以下条款。** 本项目按“原样”提供,**不提供任何保证** —— 您需自行承担所有风险。
您需对合法、授权的使用(实验虚拟机、自有系统、已获得明确许可)负全责。在法律允许的最大范围内,作者及 [zypherion.tech](https://zypherion.tech) **对因使用或不当使用而产生的任何损害、损失或法律索赔不承担任何责任**。完整条款请参阅 [LICENSE](LICENSE)。
## 许可证
**非商业 / 个人 / 研究 / 爱好用途** → [PolyForm Noncommercial 1.0.0](LICENSE)
**商业用途**(出售它、作为付费产品、用于 SaaS、客户项目等) → 您需要获取单独的商业授权。PolyForm Noncommercial 许可证不涵盖此类用途。
如果您需要商业授权,请通过以下方式联系我:
**[adam@zypherion.tech / @wd6g(discord) / telegram: @ZypherionTechnologies]**
# 待办事项标签:DAST, Ruby on Rails, 云资产清单, 内存转储, 多人体追踪, 恶意软件分析, 端点可见性, 逆向工程