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

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

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

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

工具目录

分类

查看所有分类
Loading categories
stealth_call — 仅头文件的 Windows x64 间接系统调用库。无 CRT、无 IAT、VEH 反断点、AMSI/ETW 绕过、W^X 内存、每调用动态存根。 | Kitploit
工具/GitHubGitHub/share-devn/stealth_call
权限提升内存取证漏洞利用IDS/IPS规避Shellcode后渗透利用红队Payload 开发
GitHubshare-devn/stealth_call

stealth_call

仅头文件的 Windows x64 间接系统调用库。无 CRT、无 IAT、VEH 反断点、AMSI/ETW 绕过、W^X 内存、每调用动态存根。

查看仓库
74个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

stealth_call


这是什么?

一个仅头文件的 Windows x64 库,允许你调用任何 NT 系统调用而无需触及 ntdll 导入,无需在二进制文件中留下字符串,并且没有那些会让 EDR 崩溃的常见红旗标志。

无 CRT。无 STL。无 IAT。整个库编译后仅约 19KB,且完全没有 DLL 依赖。

设计上避免了现有系统调用库的常见陷阱——明文字符串、已知哈希常量、来自非 ntdll 内存的直接系统调用、大声宣告“我在做奇怪的事情”的 IAT 导入、SEC_NO_CHANGE IOC、CRT 臃肿。这些通通不存在。


特性

系统调用引擎

  • 间接系统调用——存根跳转到 ntdll 自身的 syscall; ret gadget,因此当 syscall 指令触发时 RIP 始终位于 ntdll 内部
  • 每次调用生成独立存根——每个单独的调用都会构建一个全新的多态存根,包含随机垃圾指令、随机布局、异或混淆的系统调用号。不重用任何内容
  • 强制 W^X —— 暂存页面经历 RW → RX → RW 的转换。从不分配 RWX 内存
  • 调用后立即擦除存根
  • 从 \KnownDlls\ntdll.dll 节映射中提取系统调用(无需文件系统访问,对 ProcMon 不可见)
  • 在典型 Win11 系统上可解析 977 个系统调用

反断点

  • 基于 VEH 的方式——如果调试器在目标函数上放置了 0xCC,异常处理程序静默恢复原始字节,在单步执行下执行指令,然后重新设置断点。调试器永远不知道它被绕过了。零时间窗口
  • 适用于任何 DLL 中的任何函数,不仅限于 ntdll

逃逸

  • AMSI 绕过——修补 AmsiScanBuffer 使其返回 S_OK
  • ETW 绕过——修补 EtwEventWrite 使其返回 SUCCESS
  • 所有修补均通过直接系统调用完成,而非 VirtualProtect
  • 所有字符串均经过 XOR 加密——DLL 名称、路径等。在栈上解密,使用后擦除
  • 自定义哈希算法(非 FNV-1a 或 CRC32——没有已知的 YARA 签名)
  • 通过 PEB 遍历解析所有模块/函数——不使用 GetModuleHandle、GetProcAddress

代码质量

  • 仅头文件,将 stealth/ 文件夹放入你的项目即可使用
  • 通过每线程暂存页面 + 自旋锁实现线程安全
  • 关闭时完全清理——释放暂存页面、清零映射、移除 VEH
  • 常见 EDR 跳板(jmp rel32、jmp [rip]、mov rax + jmp rax)的钩子检测

工作原理

flow

系统调用路径

  1. initialize() 通过 \KnownDlls 节打开 ntdll,解析 PE 导出表,获取每个系统调用号
  2. 扫描 ntdll .text 段以查找 syscall; ret gadget——实际执行 syscall 指令的地方
  3. 当你调用 sc::invoke() 时:
    • 通过哈希查找系统调用条目
    • 获取调用线程的暂存页面(如果不存在则分配,仅 RW 权限)
    • emit_stub() 构建一个唯一的多态存根——前后随机垃圾指令、使用每调用密钥异或混淆的系统调用号、间接跳转到 ntdll gadget
    • 将页面权限从 RW 切换为 RX
    • 通过存根执行调用
    • 将页面权限从 RX 切换回 RW
    • 清零存根字节

过程中绝不存在 RWX 内存。绝不存在 syscall 指令在 ntdll 之外执行的情况。绝不存在系统调用号以明文存储的情况。

VEH 跳板

调用 tramp::invoke() 并传入目标函数。如果没有断点——函数正常运行,零开销。如果调试器放置了 0xCC:

  1. INT3 异常触发
  2. 我们的 VEH 处理程序检查地址是否在我们的表中(哈希查找,非线性扫描)
  3. 从磁盘读取的干净副本中恢复原始字节
  4. 设置陷阱标志(Trap Flag)
  5. 继续执行——真实指令运行
  6. 单步异常触发
  7. 处理程序将 0xCC 放回

调试器的断点列表仍然显示为激活状态。只是断点永远不会在我们的调用中触发。


构建

root@kitploit:~
cmake -B build -A x64
cmake --build build --config Release

需要 MSVC(VS 2019+)和 CMake 3.15+。输出约 19KB,零导入。


使用

系统调用

root@kitploit:~
#include "stealth/syscall.hpp"

stealth::sc::initialize();

PVOID base = nullptr;
SIZE_T size = 0x1000;
NTSTATUS status = stealth::sc::invoke<NTSTATUS>(
    HASH("NtAllocateVirtualMemory"),
    NtCurrentProcess(), &base, (ULONG_PTR)0, &size,
    (ULONG)(MEM_COMMIT | MEM_RESERVE), (ULONG)PAGE_READWRITE
);

反断点

root@kitploit:~
#include "stealth/trampoline.hpp"

// 即使 x64dbg 在 MessageBoxA 上设置了断点也能工作
int ret = stealth::tramp::invoke<int>(
    HASH_CI("user32.dll"), HASH("MessageBoxA"),
    (HWND)nullptr, (LPCSTR)"hello", (LPCSTR)"title", (UINT)MB_OK
);

AMSI / ETW

root@kitploit:~
#include "stealth/bypass.hpp"

stealth::bypass::patch_etw();
stealth::bypass::patch_amsi();

清理

root@kitploit:~
stealth::tramp::shutdown();
stealth::sc::shutdown();

项目结构

root@kitploit:~
stealth/
  common.hpp      — 内存操作、自旋锁、静态映射、PRNG、调试输出
  hash.hpp        — 编译时自定义哈希
  xorstr.hpp      — 编译时 XOR 字符串加密
  peb.hpp         — PEB 遍历、PE 导出解析器、钩子检测
  syscall.hpp     — 间接系统调用引擎、存根生成器、W^X、反转储
  trampoline.hpp  — 基于 VEH 的反断点
  bypass.hpp      — AMSI + ETW 修补

许可证

MIT —— 你可以随意使用它。

下载工具