
Windows 10/11向けのZydisベース動的パターン検索を備えたカーネルモードシステムコールラッパー
btbd/access の更新版フォーク — Windows 10/11 互換性のため Zydis ベースの動的パターン検索を採用
ハンドルを必要とせずに特権プロセス操作を可能にするカーネルモード syscall ラッパーです。カーネルとユーザーモード間の通信に xKdEnumerateDebuggingDevices ポインターフックを使用します。
PROCESS_ALL_ACCESS 操作を実行.data セクションフック、インラインパッチなしこのフォークは元のドライバーを次のように近代化しています:
[singular-access] プレフィックス付きの情報を含むデバッグ出力このドライバーは Zydis を使用してカーネル関数を逆アセンブルし、以下を抽出します:
ユーザーモード (DLL)
↓ SYSCALL_UNIQUE による syscall
カーネルフック (xKdEnumerateDebuggingDevices ポインター)
↓ 検証してディスパッチ
カーネル syscall ハンドラー
↓ 特権操作を実行
ユーザーモードへ戻る
cd Driver
msbuild Driver.vcxproj /p:Configuration=Release /p:Platform=x64
link_driver.bat
出力: Driver\x64\Release\Driver.sys
オプション 1: kdmapper (テストに推奨)
kdmapper.exe Driver.sys
オプション 2: サービス
sc create singular_access type= kernel binPath= C:\path\to\Driver.sys
sc start singular_access
[singular-access] Initializing driver...
[singular-access] Windows build: 26200
[singular-access] ntoskrnl.exe base: FFFFF80000000000
[singular-access] [*] Searching for PsResumeThread in PsRegisterPicoProvider...
[singular-access] [+] Found PsResumeThread at FFFFF803AAE331C0
[singular-access] [*] Searching for PsSuspendThread in PsRegisterPicoProvider...
[singular-access] [+] Found PsSuspendThread at FFFFF803AADFA1A0
[singular-access] [+] Found PreviousMode offset: 0x232
[singular-access] Searching for xKdEnumerateDebuggingDevices pointer...
[singular-access] xKdEnumerateDebuggingDevices pointer: FFFFF803AB200B68
[singular-access] Installing hook...
[singular-access] Driver initialized successfully
このドライバーは以下をインターセプトして処理します:
プロセス操作
NtOpenProcessNtSuspendProcess / NtResumeProcessNtQueryInformationProcess / NtSetInformationProcessNtQuerySystemInformationExNtFlushInstructionCacheメモリ操作
NtAllocateVirtualMemory / NtFreeVirtualMemoryNtReadVirtualMemory / NtWriteVirtualMemoryNtProtectVirtualMemoryNtQueryVirtualMemoryNtLockVirtualMemory / NtUnlockVirtualMemoryNtFlushVirtualMemoryスレッド操作
NtOpenThreadNtSuspendThread / NtResumeThreadNtGetContextThread / NtSetContextThreadNtQueryInformationThread / NtSetInformationThread同期
NtWaitForSingleObjectテスト済み、動作確認済み:
PsResumeThread の検出:
lea rcx, PsResumeThread ; Load function address
mov [rdx+40h], rcx ; Store in PICO provider table
xKdEnumerateDebuggingDevices の検出 (Win11 24H2):
mov rax, cs:off_140E00B68 ; Pattern: 48 8B 05 ? ? ? ? 74 ? E8
; Resolve RIP-relative pointer
PreviousMode オフセットの抽出:
mov rax, gs:188h ; Get KTHREAD
movzx eax, byte ptr [rax+232h] ; Extract PreviousMode
ret
Driver/
├── main.c # エントリーポイント、初期化、フックインストール
├── core.c # syscall ハンドラー
├── util.c # パターンスキャン、メモリユーティリティ
├── zydis_util.c # Zydis ベースのパターンファインダー
├── zydis_util.h # Zydis 関数の宣言
├── syscall.h # syscall 定義
├── stdafx.h # プリコンパイル済みヘッダー
└── Zydis/ # Zydis ディスアセンブラライブラリ
ドライバーが読み込めない:
bcdedit /set testsigning onパターンが見つからない:
リンカーエラー:
ZYDIS_STATIC_BUILD と ZYCORE_STATIC_BUILD が定義されていることを確認link_driver.bat が正しい WDK lib パスを使用しているか確認syscall.h に syscall 列挙型を追加core.c で HANDLE_SYSCALL マクロを使ってハンドラーを追加xKdEnumerateDebuggingDevices ポインターのパターンを見つけるmain.c の find_kd_enum_debug_devices_ptr() にパターンを追加このプロジェクトは元の btbd/access リポジトリと同じライセンスを維持しています。
このソフトウェアは教育および研究目的のみで使用してください。責任を持って、所有しているシステムまたは明示的なテスト許可があるシステムでのみ使用してください。
| ターゲット | 方法 | オフセット/アドレス |
|---|
| KTHREAD.PreviousMode | ExGetPreviousMode を逆アセンブル | 0x232 (全バージョン) |
| PsResumeThread | PsRegisterPicoProvider を逆アセンブル | RIP 相対 LEA at +0x40 |
| PsSuspendThread | PsRegisterPicoProvider を逆アセンブル | RIP 相対 LEA at +0x50 |
| xKdEnumerateDebuggingDevices | .text セクションのパターンスキャン | バージョン固有のパターン |
| OS バージョン | ビルド | 状態 |
|---|
| Windows 10 1607 | 14393 | ✅ |
| Windows 10 1709 | 16299 | ✅ |
| Windows 10 1809 | 17763 | ✅ |
| Windows 10 2004 | 19041 | ✅ |
| Windows 11 21H2 | 22000 | ✅ |
| Windows 11 22H2 | 22621 | ✅ |
| Windows 11 24H2 | 26100-26200 | ✅ |