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

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

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

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

工具目录

分类

查看所有分类
Loading categories
WTSRM2 — 仅头文件的 C++17 库,用于规避检测的 Windows 开发:编译时 API 哈希、DLL 挂钩移除、硬件断点清除、VEH 移除以及 DLL 通知回调抑制,以规避 EDR 挂钩。 | Kitploit
工具/GitHubGitHub/rad9800/wtsrm2
IDS/IPS规避红队Payload 开发
GitHubrad9800/wtsrm2

WTSRM2

仅头文件的 C++17 库,用于规避检测的 Windows 开发:编译时 API 哈希、DLL 挂钩移除、硬件断点清除、VEH 移除以及 DLL 通知回调抑制,以规避 EDR 挂钩。

查看仓库
164323年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

WTSRM2

这是我原始项目 WTSRM 以及相应演讲的延续。

该项目被重写是为了利用 C++17 来创建一个模板,使我们能够在编译时轻松更改所需的功能!它实现为仅头文件(header-only),这样你就可以轻松地将其添加到自己的项目中。

目前已实现的一些功能包括:

  • 无 CRT 依赖(10KB 二进制)
  • 使用 \KnownDlls\ 或 \System32\ 通过 '.text' 补丁来解除所有 Windows DLL 的钩子
  • 使用 VirtualProtect 或 WriteProcessMemory 进行补丁
  • 编译时 API 哈希
  • 移除并恢复 Vectored Exception Handlers
  • 移除 Ldr DLL 通知回调
  • 清除硬件断点
  • 使用工作项加载库

我们可以如下配置此行为

root@kitploit:~
#define HASHING_ALGORITHM hash_string_fnv1a	// constexpr 算法

namespace config
{
	...

	//
	// 配置行为
	//
	inline constexpr unsigned unhooking = system32 | write_process_memory;
	inline constexpr auto work_item_load_library = true; // 使用工作项进行 LL

	//
	// 配置规避功能
	//
	inline constexpr auto clear_and_restore_veh = true; // 清除并恢复 veh
	inline constexpr auto unregister_dll_notifs = true; // LdrRegisterDllNotification
	inline constexpr auto clear_thread_hwbps = true; // 清除硬件断点
}

由于我们使用了 constexpr,未使用的功能不会产生开销,因为它们属于死代码,会被编译器从程序中优化掉。

使用此头文件

要导入 DLL,首先我们必须使用 DLL_HASH 宏创建哈希

root@kitploit:~
DLL_HASH(DBGHELP, L"DBGHELP.DLL")

然后我们必须将其添加到 module_address_table 中,该表充当我们的内部 IAT。hash_ 常量由 DLL_HASH 宏创建。对于并非始终加载的非公共 DLL,我们必须指定其名称以便加载它们。

root@kitploit:~
inline addr_struct<decltype(HASHING_ALGORITHM(TOKENIZEA(T))), wchar_t> module_address_table[] =
{
	{hash_NTDLL, nullptr,},
	{hash_KERNEL32, nullptr,},
	{hash_DBGHELP, nullptr, L"DBGHELP.DLL"}
};

要导入函数,首先我们必须使用 HASH_FUNC 宏创建函数名哈希和 typedef

root@kitploit:~
HASH_FUNC(NtUnmapViewOfSection, NTSTATUS, HANDLE, PVOID)

第一个参数是函数名,接下来是返回类型,然后是函数的参数。然后我们需要将其添加到 api_address_table 中,该表将填充当前函数地址

root@kitploit:~
inline addr_struct<decltype(HASHING_ALGORITHM(TOKENIZEA(T))), void> api_address_table[] =
{
	{hash_GetProcAddress, nullptr},		
	{hash_NtUnmapViewOfSection, nullptr},

如果你未能将此函数添加到该表中,程序不会崩溃,但会返回 -1,以提高稳定性。

要使用 API,请使用 API()() 宏,如下所示

root@kitploit:~
API(NtWaitForSingleObject)(NtCurrentProcess(), FALSE, &timeout);

要添加自己的 API 哈希函数,必须使用此模板才能与所需的类型配合使用。

root@kitploit:~
template <typename T>
constexpr auto hash_string_(const T* buffer)
{
	TRIVIAL_TYPE_CHECK()

}

感谢以下人士的想法和贡献(排名不分先后) @peterwintrsmith @modexpblog @jonaslyk @JustasMasiulis

下载工具