Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
swarmer — 一个工具,用于将Windows注册表导出文件转换为Windows配置单元文件,可用于替换NTUSER.MAN。 | Kitploit
工具/GitHubGitHub/praetorian-inc/swarmer
权限提升持久化机制后渗透利用红队
GitHubpraetorian-inc/swarmer

swarmer

一个工具,用于将Windows注册表导出文件转换为Windows配置单元文件,可用于替换NTUSER.MAN。

查看仓库
1611827个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

swarmer

一个用于悄悄地添加注册表项到HKCU的工具,EDR/AV无法察觉发生了什么,即使你没有管理员权限。

如何使用?

注意:你只有一次机会这样做,一旦NTUSER.MAN成为你的新注册表配置单元,没有管理员权限就无法更改,所以请确保第一次就把所有修改都做好。

使用 reg_query BOF 的结果

  1. 从 https://github.com/trustedsec/CS-Situational-Awareness-BOF/tree/master/SA/reg_query 获取合适的 req_query BOF。
  2. 执行 execute-bof --opsec Z:\path\to\reg_query.x64.o go z"" i1 z"" z"" i1
  3. 将该命令的输出复制到你的机器上的一个文件中,在此示例中我们将其命名为 output.txt。注意,你应该包含所有时间戳,并以类似下面的 HKEY_CURRENT_USER 项开头:
root@kitploit:~
03/18/2025 14:19:51      HKEY_CURRENT_USER\
  1. 从 releases 部分获取 swarmer.exe 二进制文件,并运行 swarmer.exe --bof --startup-key "WhateverKeyNameYouWant" --startup-value "C:\Path\To\Your\target.exe" output.txt NTUSER.MAN
  2. 将 NTUSER.MAN 文件上传回目标机器,如果你注重 OPSEC,可以将其重命名为其他名称。
  3. 将你在步骤 5 中上传的文件复制到 %USERPROFILE%,这样你应该会有一个类似 C:\Users\MyUserName\NTUSER.MAN 的文件。
  4. 下次该账户登录时,你的注册表更改将被加载。

使用 .reg 导出文件

假设你有一个要添加到 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 的注册表项,以便在启动时弹出计算器。

首先你需要有你想要使用的 HKCU 项的注册表转储。最好来自你打算修改的机器。你可以通过运行 reg export HKCU hkcu.reg 来生成一个。

然后你应该在 .reg 文件中进行你想要的更改。在我们的示例中,我们只需在记事本中打开文件,并添加一行类似这样的内容:

Adding an entry to pop calc on startup

注意:只有对 HKEY_CURRENT_USER 的更改会被应用,这不会影响 HKLM

接下来你需要使用这个工具 swarmer.exe 将修改后的 reg 文件转换为二进制注册表配置单元。一个示例调用如下:

swarmer.exe hkcu.reg NTUSER.MAN

或者,如果你想在 PowerShell 脚本中执行此操作,可以改为从 releases 部分获取 swarmer.dll 二进制文件,并使用以下命令运行:

root@kitploit:~
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 环境不完全匹配的内容替换账户的注册表可能很危险,而且很难保证不会出问题。

致谢

  • 这种方法是由团队成员 Rad 告诉我的,而他则是从 Jonas Lykkegård 那里听说的。
  • HiveSwarming 项目为如何使用离线注册表 API 实现转换过程提供了良好的基础。

许可证

本工具依据 Apache 许可证开源。

下载工具