Windows内核黑客框架,C++编写的驱动模板,虚拟化程序和API
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/HoShiMin/Kernel-Bridge
内核桥接框架
"内核桥接"项目是一个使用C++20编写的Windows内核驱动程序模板、开发框架和内核模式API及封装。
支持SecureBoot的预编译和签名二进制文件 Delphi绑定
✔ 功能:
- 带有Hyper-V支持的虚拟化程序(Intel VT-x/EPT和AMD-V/RVI)
- 基于虚拟化程序的极快内存拦截和隐藏(支持Write-only页面,仅限VT-x)
- 支持HookLib和Zydis
- IO端口(通过IOPL进行' in/out/cli/sti'用户模式转发)
- 系统蜂鸣器
- MSRs、CPUID、TSC和性能计数器(RDPMC)
- DMI/SMBIOS内存读取
- 物理内存(分配、读写、映射)
- 内核内存管理(分配、映射、转换)
- 用户模式内存管理(进程中的分配等)
- 直接的用户模式->内核模式和内核模式->用户模式内存转换
- 基于PTE的直接内存管理
- 直接的MDL管理
- 从内核中获取进程/线程句柄
- 读取和写入其他进程的内存
- 挂起/恢复/终止进程
- 创建内核和用户模式线程
- 用户模式和内核之间的内存映射
- 远程代码执行(APC传递)
- 执行自定义用户模式Shellcode
- 未签名驱动程序映射
- 用户模式回调函数处理进程、线程、句柄和模块(
ObRegisterCallbacks和PsSet***NotifyRoutine) - 带有用户模式回调函数的Minifilter
- PDB解析
- 签名和模式扫描
- 节段管理(用于映射
\\Device\PhysicalMemory等) - Python绑定
➰ 开发中和计划中:
- 基于Qt的内核黑客和内存研究框架的图形用户界面
- 内核WinSock支持
- RTL的扩展: 钩子、注入、反汇编
- 带SEH支持的内核可加载模块
驱动程序模板完全支持C++静态和全局初始化程序以及所有C++20功能(不包括C++异常)。所有API模块都易于使用,并且没有外部依赖,因此您可以将它们包含到自己的C++驱动程序中。所有API函数都按逻辑分类分组到命名空间中,因此您可以快速找到所需的所有函数。
💦 驱动程序模板具有以下功能:
- 支持METHOD_BUFFERED、METHOD_IN/OUT_DIRECT和METHOD_NEITHER
- Minifilter加载和过滤程序模板
- SAL注释和自文档化的API
- 准备好使用的IOCTL处理例程
- 内置STL支持
- 静态驱动程序验证器测试通过
💨 构建和使用:
下载Microsoft Visual Studio Community和Windows Driver Kit。 用于驱动程序测试的使用VMware Player。 要加载未签名的驱动程序,您需要启用Windows的测试模式并禁用签名检查:
- 禁用签名检查(允许安装未签名的驱动程序):
bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit.exe /set TESTSIGNING ON
- 启用签名检查(禁止安装未签名的驱动程序):
bcdedit.exe /set loadoptions ENABLE_INTEGRITY_CHECKS
bcdedit.exe /set TESTSIGNING OFF
- 启用内核调试器支持(WinDbg和WDK中的内核调试器):
bcdedit.exe /debug on - 启用内核调试器支持
bcdedit.exe /debug off - 禁用内核调试器支持
与用户模式应用程序通信:
要与用户模式进行通信,您应该使用"User-Bridge"封装作为独立的 .cpp/.h 模块或 *.dll 文件。 所有所需的头文件是 WdkTypes.h、CtlTypes.h 和 User-Bridge.h。如果要使用扩展功能(如 minifilter 回调),还应使用 FltTypes.h、CommPort.h 和 Flt-Bridge.h。您可以在 Rtl-Bridge.h 中找到一些准备好使用的 RTL 函数(例如未签名驱动程序映射)。
文件层次结构:
/User-Bridge/API/ - 用于 KB 所有函数的用户模式 API 和封装 /Kernel-Bridge/API/ - 用于 C++ 驱动程序中使用的独立内核 API /Kernel-Bridge/Kernel-Bridge/ - 驱动程序模板文件 /SharedTypes/ - UM 和 KM 模块所需的共享类型头文件 /CommonTypes/ - 用户模式和内核模式的常用头文件和类型 /Python-Bridge/ - Python 绑定 /Kernel-Tests/ - UM 和 KM 模块以及常用函数的单元测试
示例 (使用 KbReadProcessMemory):
#include <Windows.h>
#include "WdkTypes.h"
#include "CtlTypes.h"
#include "User-Bridge.h"
using namespace Processes::MemoryManagement;
...
// 作为 minifilter 加载 (允许使用扩展功能):
KbLoader::KbLoadAsFilter(L"N:\\Folder\\Kernel-Bridge.sys", L"260000");
constexpr int Size = 64;
UCHAR Buffer[Size] = {};
BOOL Status = KbReadProcessMemory(
ProcessId,
0x7FFF0000, // ProcessId 上下文中的目标地址
&Buffer,
Size
);
KbLoader::KbUnload();