我做的 Windows 工具,因为我受够了在恶意软件样本里盯着 jlaive 的各种 fork,却没有任何公开工具能在运行时真正把它们拆开。
简而言之,它是一个 .NET 进程监控器,在原生层 hook CLR,跟踪反射式程序集加载,并自动直接从内存中转储 PE。它还会对照磁盘上的原始二进制文件检查 AMSI 和 ETW 的完整性,同时检测诸如 clr.dll 字符串补丁和直接使用 LoadFromBuffer 等绕过技术。
在哪里找样本?我推荐看看 https://tria.ge(不是广告),你可以下载任何你想要的样本,并按家族进行筛选
你可能会想,为什么叫 nemesis?
因为它代表了这款工具的确切用途。nemesis 是指对对手构成持续挑战或导致其覆灭的存在,这正是这个项目背后的理念。
在希腊神话中,nemesis 是神圣报应的化身,是向任何过于傲慢或自以为不可触碰之人施以惩罚的存在。如果你问我,对于那些吹嘘自己是“FUD”的恶意软件来说,这名字有点太直白了。
我是一名恶意软件分析师。如果你做这份工作(对我来说是爱好)足够久,你就会开始一遍又一遍地看到相同的加载器链,尤其是自从 jlaive(也叫 crybat)爆火之后,每个脚本小子都在 fork 它。
这个模式蠢得简单,但处理起来烦得要命:
something.bat → obfuscated powershell → csharp stub → your actual payload
你双击一个看起来像乱码的 .bat。cmd 启动 powershell,带着一大堆垃圾。powershell 解密/解压一个 .NET stub(aes、gzip、base64)。那个 stub 打补丁绕过 amsi + etw,在内存中反射式加载真正的 exe/dll,然后你就完了——没有任何有用的东西会以可用的形式落到磁盘上。
这让我很烦。真的没有一个好的公开工具专门针对这条链——在 .NET payload 真正出现的地方进行 hook,在进程自我毁灭之前把它转储出来,捕获这些 stub 总是做的 amsi/etw 补丁。所以我做了 nemesis。
不是银弹。不会取代你的沙箱。但它能让你在测试机上针对可疑的 .bat 真正跑点东西,并实际提取出工件。
启动器(Launcher.exe)
Nemesis.dllnemesis dll(Nemesis.dll)
nLoadImagenLoadFileAssemblyNative::LoadFromBuffer(模式从 nLoadImage 解析)%TEMP%\Nemesis_dumpsamsi.dll / ntdll.dll 导出与磁盘上的副本进行比较(捕获经典的 AmsiScanBuffer / EtwEventWrite 上的 ret 补丁).rdata 字符串(有些绕过会改为补丁这些,关于这个有一篇很棒的 vxug 论文,叫:2024-11-21 - New AMSI Bypss Technique Modifying CLRDLL in Memory.pdf)%TEMP%\Nemesis.log,它还启用了 ENABLE_VIRTUAL_TERMINAL_PROCESSING,以避免控制台变得……怎么说呢,奇怪 :D基本上就是:让 bat 链跑起来,在 crypter 实际加载 payload 的地方捕获它,并沿途记录规避技巧。
需要 Visual Studio 2022+,带 C++ 桌面开发 + MASM(x64)。
打开 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%TEMP%\Nemesis_dumps是:
不是:
LNK1104?还有东西加载着 nemesis.dll,杀掉目标进程再重新构建pwsh.exe 的 vcpkg 噪音是无害的,忽略它如果你想了解你在对抗什么:
使用 nemesis 即表示你接受此声明。 它按原样提供,不附带任何担保——你承担所有风险。
你独自负责合法、授权的使用(实验虚拟机、自有系统、明确许可)。在法律允许的最大范围内,作者和 zypherion.tech 免除一切责任,对因使用或误用而产生的任何损害、损失或法律索赔概不负责。完整条款见 LICENSE。
非商业 / 个人 / 研究 / 爱好用途 → PolyForm Noncommercial 1.0.0
商业用途(出售它、付费产品、SaaS、客户工作等)→ 你需要单独的许可证。PolyForm Noncommercial 不涵盖这些。
如果你想要商业许可证,联系我:
[[email protected] / @wd6g(discord) / telegram: @ZypherionTechnologies]
快速备注:我得研究一下 compilemethod 并修复它,目前它并非必需,因为 crypter 通常根本不用它……因为它们必须使用
asm.load(...)这也提醒我得检查 rdata 字符串,因为遗憾的是我还没好好测试过…… 请不要提交愚蠢代码的 PR,你不能正常 hook n(Native) 后端,例如 nLoadImage,你必须保留寄存器,这很烦,所以我们用 asm。