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

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

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

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

工具目录

分类

查看所有分类
Loading categories
SysWhispers3 — SysWhispers 增强版 - 通过直接系统调用绕过 AV/EDR。 | Kitploit
工具/GitHubGitHub/klezvirus/syswhispers3
防御工具Payload生成漏洞利用IDS/IPS规避Shellcode红队Shellcode 生成Payload 开发IDS/IPS规避 分类第 19 名Payload 开发 分类第 7 名
1.6k207602年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
Payload生成 分类第 9 名
Shellcode 分类第 7 名
Shellcode 生成 分类第 9 名
GitHubklezvirus/syswhispers3

SysWhispers3

SysWhispers 增强版 - 通过直接系统调用绕过 AV/EDR。

查看仓库

SysWhispers3

SysWhispers 通过生成头文件/ASM 文件帮助规避检测,使植入程序能够直接进行系统调用。

官方 Discord 频道

快来 Discord 一起玩吧!

Inceptor 服务器

我为什么不为 SysWhispers2 创建 PR?

SysWhispers3 作为独立版本的原因有很多,但最重要的包括:

  • SysWhispers3 是 Inceptor 使用的“事实分支”,并实现了一些与原始版本工具无关的实用类。
  • SysWhispers2 正朝着支持 NASM 编译(用于 gcc/mingw)的方向发展,而此版本专门设计并测试支持 MSVC(因为 Inceptor 在可预见的未来将保持为仅限 Windows 的框架)。
  • SysWhispers3 包含部分实现的功能(例如蛋猎手),这些功能不适合包含在原始版本的工具中。

与 SysWhispers2 的差异

用法与 SysWhispers2 非常相似,但有以下例外:

  • 它还支持 x86/WoW64
  • 它支持使用 EGG(需动态替换)替换系统调用指令
  • 它支持在 x86/x64 模式下直接跳转到系统调用(在 WOW64 中几乎为标准做法)
  • 它支持直接跳转到随机系统调用(借鉴 @ElephantSeal 的想法)

这些功能的更好解释见博客文章 SysWhispers is dead, long live SysWhispers!

简介

安全产品(如防病毒软件和 EDR)通常会在用户模式 API 函数中放置钩子,用于分析程序执行流程,以检测潜在的恶意活动。

SysWhispers2 是一个工具,用于为核心内核映像 (ntoskrnl.exe) 中的任何系统调用生成头文件/ASM 对,然后可以直接从 C/C++ 代码中集成和调用,从而规避用户态钩子。

然而,该工具会生成一些模式,这些模式可能被纳入签名,或产生可在运行时被检测到的行为。

SysWhispers3 构建在 SysWhispers2 之上,并集成了一些有用的功能来绕过这些检测形式。

安装

root@kitploit:~
C:\> git clone https://github.com/klezVirus/SysWhispers3.git
C:\> cd SysWhispers3
C:\> python .\syswhispers.py --help

用法和示例

帮助信息显示了该工具的所有可用命令和功能:

root@kitploit:~
C:\>python syswhispers.py -h

usage: syswhispers.py [-h] [-p PRESET] [-a {x86,x64}] [-m {embedded,egg_hunter,jumper,jumper_randomized}] [-f FUNCTIONS] -o OUT_FILE [--int2eh] [--wow64] [-v] [-d]

SysWhispers3 - 增强版 SysWhispers

optional arguments:
  -h, --help            显示此帮助信息并退出
  -p PRESET, --preset PRESET
                        预设 ("all" 或 "common")
  -a {x86,x64}, --arch {x86,x64}
                        架构
  -c {msvc,mingw,all}, --compiler {msvc,mingw,all}
                        编译器
  -m {embedded,egg_hunter,jumper,jumper_randomized}, --method {embedded,egg_hunter,jumper,jumper_randomized}
                        系统调用恢复方法
  -f FUNCTIONS, --functions FUNCTIONS
                        逗号分隔的函数列表
  -o OUT_FILE, --out-file OUT_FILE
                        输出基文件名(不含扩展名)
  --int2eh              使用旧的 `int 2eh` 指令代替 `syscall`
  --wow64               使用 Wow64 在 x64 上运行 x86(仅适用于 x86 架构)
  -v, --verbose         启用调试输出
  -d, --debug           启用系统调用调试(插入软件断点)

命令行

标准 SysWhispers,嵌入式系统调用 (x64)

root@kitploit:~
# 导出所有函数,兼容所有支持的 Windows 版本(参见 example-output/)。
py .\syswhispers.py --preset all -o syscalls_all

# 仅导出常用函数(参见下方列表)。
py .\syswhispers.py --preset common -o syscalls_common

# 导出 NtProtectVirtualMemory 和 NtWriteVirtualMemory,兼容所有版本。
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

仅适用于 SysWhispers3 的示例

root@kitploit:~
# 普通 SysWhispers,32 位模式
py .\syswhispers.py --preset all -o syscalls_all -m jumper --arch x86

# 普通 SysWhispers,在 32 位模式下使用 WOW64(仅特定函数)
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem --arch x86 --wow64

# 蛋猎手 SysWhispers,绕过“系统调用标记”(常用函数)
py .\syswhispers.py --preset common -o syscalls_common -m egg_hunter

# 跳转/随机跳转 SysWhispers,绕过动态 RIP 验证(所有函数),使用 MinGW 编译器
py .\syswhispers.py --preset all -o syscalls_all -m jumper -c mingw


脚本输出

root@kitploit:~
PS C:\Projects\SysWhispers2> py .\syswhispers.py --preset common --out-file temp\syscalls_common -v 
                                                       
                  .                         ,--.
,-. . . ,-. . , , |-. o ,-. ,-. ,-. ,-. ,-.  __/
`-. | | `-. |/|/  | | | `-. | | |-' |   `-. .  \
`-' `-| `-' ' '   ' ' ' `-' |-' `-' '   `-'  '''
     /|                     |  @Jackson_T
    `-'                     '  @modexpblog, 2021

                      由 @klezVirus 编辑, 2022
SysWhispers3: 何必调用内核,悄悄说就好?


已选择常用函数。

完成!文件写入:
        temp\syscalls_common.h
        temp\syscalls_common.c
        temp\syscalls_common_.asm
按任意键继续...

导入到 Visual Studio

  1. 将生成的 H/C/ASM 文件复制到项目文件夹中。
  2. 在 Visual Studio 中,转到 项目 → 生成自定义... 并启用 MASM。
  3. 在 解决方案资源管理器 中,将 .h 和 .c/.asm 文件分别作为头文件和源文件添加到项目中。
  4. 转到 ASM 文件的属性,并将 项类型 设置为 Microsoft Macro Assembler。

在 Visual Studio 之外编译

Windows

64 位 Makefile:

Makefile.msvc

root@kitploit:~
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib

program:
  ML64 /c syscalls-asm.x64.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X64
  cl.exe $(OPTIONS) syscalls.c  program.c
  link.exe /OUT:program.x64.exe -nologo $(LIBS) /MACHINE:X64 -subsystem:console -nodefaultlib syscalls-asm.x64.obj syscalls.obj program.obj

32 位 Makefile:

Makefile.msvc

root@kitploit:~
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib

program:
  ML /c syscalls-asm.x86.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X86
  cl.exe $(OPTIONS) syscalls.c  program.c
  link.exe /OUT:program.x86.exe -nologo $(LIBS) /MACHINE:X86 -subsystem:console -nodefaultlib syscalls-asm.x86.obj syscalls.obj program.obj

使用 nmake 编译:

root@kitploit:~
nmake -f Makefile.msvc

Linux

支持 64 位和 32 位的 Makefile:

Makefile.mingw

root@kitploit:~
CC_x64 := x86_64-w64-mingw32-gcc
CC_x86 := i686-w64-mingw32-gcc
OPTIONS := -masm=intel -Wall

program:
  $(CC_x64) syscalls.c program.c -o program.x64.exe $(OPTIONS)
  $(CC_x86) syscalls.c program.c -o program.x86.exe $(OPTIONS)

使用 make 编译:

root@kitploit:~
make -f Makefile.mingw

注意事项与限制

  • 蛋猎手功能未在此工具中实现,它位于 Inceptor 中。
  • 不支持图形子系统 (win32k.sys) 的系统调用。
  • 已在 Visual Studio 2019/2022 上使用 Windows 10 SDK 测试。
  • 不保证支持 NASM。
  • 不保证支持 GCC 和 MinGW。

故障排除

来自 SysWhispers2

  • 类型重定义错误:如果 syscalls.h 中的 typedef 已被定义,则项目可能无法编译。
    • 确保只包含所需的函数(即很少需要 --preset all)。
    • 如果某个 typedef 已在其他使用的头文件中定义,则可以从 syscalls.h 中删除。

新增

  • 使用 --verbose 可以在代码生成期间启用故障排除输出。
  • 使用 --debug 时,工具将在系统调用存根中插入一个软件断点,以便在 WinDbg 中调试。
  • 如果在编译时遇到 error A2084:constant value too large,请重新生成存根。

致谢

SysWhispers2

由 @Jackson_T 和 @modexpblog 开发,但建立在许多其他人的工作之上:

  • @FoxHex0ne 将许多函数原型和 typedef 以机器可读格式编目。
  • @PetrBenes、NTInternals.net 团队 和 MSDN 提供了额外的原型和 typedef。
  • @Cn33liz 提供了最初的 Dumpert POC 实现。

SysWhispers2 (x86/WOW64)

  • @rooster 创建了兼容 x86/WOW64 的分支示例。

其他

  • @ElephantSe4l 提出了随机化系统调用跳转的想法。
  • @S4ntiagoP 在 nanodump 上做了出色的工作,给了我很多灵感。

许可证

与原始项目一样,本项目也采用 Apache License 2.0 许可。

下载工具