一个用于悄悄地添加注册表项到HKCU的工具,EDR/AV无法察觉发生了什么,即使你没有管理员权限。
注意:你只有一次机会这样做,一旦NTUSER.MAN成为你的新注册表配置单元,没有管理员权限就无法更改,所以请确保第一次就把所有修改都做好。
reg_query BOF 的结果req_query BOF。execute-bof --opsec Z:\path\to\reg_query.x64.o go z"" i1 z"" z"" i1output.txt。注意,你应该包含所有时间戳,并以类似下面的 HKEY_CURRENT_USER 项开头:03/18/2025 14:19:51 HKEY_CURRENT_USER\
swarmer.exe 二进制文件,并运行 swarmer.exe --bof --startup-key "WhateverKeyNameYouWant" --startup-value "C:\Path\To\Your\target.exe" output.txt NTUSER.MANC:\Users\MyUserName\NTUSER.MAN 的文件。假设你有一个要添加到 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 的注册表项,以便在启动时弹出计算器。
首先你需要有你想要使用的 HKCU 项的注册表转储。最好来自你打算修改的机器。你可以通过运行 reg export HKCU hkcu.reg 来生成一个。
然后你应该在 .reg 文件中进行你想要的更改。在我们的示例中,我们只需在记事本中打开文件,并添加一行类似这样的内容:

注意:只有对 HKEY_CURRENT_USER 的更改会被应用,这不会影响 HKLM
接下来你需要使用这个工具 swarmer.exe 将修改后的 reg 文件转换为二进制注册表配置单元。一个示例调用如下:
swarmer.exe hkcu.reg NTUSER.MAN
或者,如果你想在 PowerShell 脚本中执行此操作,可以改为从 releases 部分获取 swarmer.dll 二进制文件,并使用以下命令运行:
Import-Module '.\swarmer.dll'
Convert-RegToHive -InputPath '.\hkcu.reg' '.\NTUSER.MAN'
最后你只需要将 NTUSER.MAN(它必须叫这个名字)放入你的 %USERPROFILE% 目录中(类似于 C:\Users\MyUserName)。
下次该账户登录时,你的注册表更改将被加载。
Windows 充满了遗留的陈旧代码,这是滥用了 Windows 强制用户配置文件。通常你需要是管理员才能将用户的 NTUSER.DAT 重命名为 NTUSER.MAN,但显然没有保护措施来防止有人直接将同名文件放到那里并被使用。
存在一种奇怪的“预期”安全边界,即在一台机器上生成二进制 Windows 配置单元需要管理员权限,但总体来说这执行得很宽松。swarmer(滥)用了离线注册表 API 来操作二进制注册表配置单元,同时解析导出的 .reg 文件。引用其描述:
应用程序不应使用离线注册表函数来绕过系统注册表的安全要求。要加载配置单元,没有 RegLoadKey 函数所需的特殊权限的应用程序可以使用 RegLoadAppKey 函数。
显然我们不会听从这一点,所以现在我们可以利用低权限的注册表导出,结合我们的 swarmer 工具来创建一个“特权”的注册表二进制对象,你只需将其放到正确的位置即可覆盖现有的 NTUSER.DAT 注册表配置单元。
在此过程中,我们不会使用任何传统的注册表读/写 API,因此理想情况下 EDR 应该无法深入了解此过程——根据 sysinternals procmon,这些操作都不会显示为实际的注册表写入。如果你特别多疑,还可以将 .reg 文件拿到你控制的机器上,使用此工具创建配置单元二进制文件,然后将其放回主机。一旦你导出注册表,就无需与主机交互,直到你放置 NTUSER.MAN 文件。
从技术上讲,你甚至不需要导出注册表,但尝试用来自另一台机器的、与 Windows 环境不完全匹配的内容替换账户的注册表可能很危险,而且很难保证不会出问题。
本工具依据 Apache 许可证开源。