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

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

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

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

工具目录

分类

查看所有分类
Loading categories
HWSyscalls — HWSyscalls 是一种使用 HWBP、HalosGate 以及在 kernel32 上带有 HWBP 的合成蹦床来执行间接系统调用的新方法。 | Kitploit
工具/GitHubGitHub/dec0ne/hwsyscalls
IDS/IPS规避后渗透利用渗透测试红队Payload 开发
GitHubdec0ne/hwsyscalls

HWSyscalls

HWSyscalls 是一种使用 HWBP、HalosGate 以及在 kernel32 上带有 HWBP 的合成蹦床来执行间接系统调用的新方法。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

HWSyscalls

image image

主要贡献者

Dec0ne Idov31

描述

HWSyscalls 是一种使用 3 个主要组件来执行间接系统调用(indirect syscalls)的新方法:

  • 使用硬件断点(Hardware breakpoints)和向量化异常处理程序(Vectored Exception Handler)来控制执行流程。

  • 使用 HalosGate 来查找系统调用编号和地址。

  • 在 kernel32 上利用硬件断点创建合成蹦床(synthetic trampoline)。

HWSyscalls 作为一个易于集成的库提供,可添加到任何想要使用间接系统调用、且不会触发基于现有间接系统调用检测方式的 EDR 或 AV 检测的项目中。

间接系统调用是一种流行的方法,有各种变体用于从 ntdll 调用系统调用。然而,从 ntdll 调用系统调用的核心问题在于:程序不经过任何先前的 dll 而直接访问 ntdll,这种访问方式本身就十分可疑。 HWSyscalls 建立在间接系统调用的核心思想之上,并通过结合硬件断点功能在 kernel32 中创建合成蹦床、以及使用 HalosGate 获取 SSN,从而解决了这一问题。

为便于理解,正常的间接系统调用流程如下所示:

indirect_syscalls

而我们的流程如下所示:

hwsyscalls_flow

更新

我们更新了 HWSyscallExceptionHandler 函数的逻辑,加入了一些栈操作技巧,以使栈可展开(unwindable)。 具体做法是:直接调用 NTAPI 函数(其地址现在由 PrepareSyscall 函数返回),在 NTAPI 函数中触发硬件断点(HWBP),创建新的栈帧,并将新栈帧的返回地址设置为在 kernel32(或 kernelbase)中找到的 "ADD RSP, 68; RET" gadget,同时也会复制栈参数。

现在栈完全可展开,并且实际从 ntdll 返回时会经过 kernel32,无需我们再做任何断点设置和执行流操作:

hwsyscalls_stack

更多信息请参阅我们的博客文章 (即将发布)。

用法

要使用该项目,你需要包含 HWSyscalls.h,并调用 InitHWSyscalls 来查找所需的 gadget 并初始化异常处理程序。 在程序执行结束时,调用 DeinitHWSyscalls 移除异常处理程序。

root@kitploit:~
#include "HWSyscalls.h"

typedef NTSTATUS(WINAPI* NtOpenProcess_t)(
	OUT          PHANDLE            ProcessHandle,
	IN           ACCESS_MASK        DesiredAccess,
	IN           POBJECT_ATTRIBUTES ObjectAttributes,
	IN OPTIONAL  PCLIENT_ID         ClientId);

void main() {

    // Initialize the exception handler and find the required gadgets.
    if (!InitHWSyscalls())
        return;
    
    // ...

    // Execute your function!
    NtOpenProcess_t pNtOpenProcess = (NtOpenProcess_t)PrepareSyscall((char*)("NtOpenProcess"));
    NTSTATUS status = pNtOpenProcess(&targetHandle, PROCESS_ALL_ACCESS, &object, &clientID);

    // ...

    // Removing the exception handler.
    DeinitHWSyscalls();

}

可以通过更改 HWSyscalls.h 中的 HWSYSCALLS_DEBUG 定义来开启或关闭调试详细输出:

root@kitploit:~
#pragma once
#include <windows.h>
#include <inttypes.h>
#include <stdio.h>

#pragma region Defines

#define HWSYSCALLS_DEBUG 0 // 0 disable, 1 enable
#define UP -32
//...

安装

要编译该项目,你需要 Visual Studio 2019 或更高版本。 需要注意的是,该项目仅适用于 x64 环境,并且必须在关闭优化的情况下编译。 你可以在“项目设置 -> C/C++ -> 优化 -> 优化(禁用 /Od)”中将其关闭。

示例

example

致谢

  • 感谢 Sektor7 提供的 Halosgate,以及他们在精彩的 Malware Development Advanced Vol 1 课程中教授的 HWBP 实现。

  • 感谢 @Am0nsec 和 @RtlMateusz 提供的 原始 Hellsgate 实现。

  • 感谢 Rad9800,我们从 TamperingSyscalls 中获得了灵感。

  • 感谢 Yxel 提供的二进制模式匹配代码,我们取自 Cronos。

下载工具