
Windowsカーネルモードドライバとユーザーモードクライアントで、ゲームチート向けにIOCTLベースの物理・仮想メモリ読み書き、ページテーブルウォーク、パターンスキャン、入力エミュレーションを提供。
██╗ ██╗████████╗██╗ ██╗██╗██╗ ██╗███╗ ███╗
██║ ██║╚══██╔══╝██║ ██║██║██║ ██║████╗ ████║
██║ ██║ ██║ ███████║██║██║ ██║██╔████╔██║
██║ ██║ ██║ ██╔══██║██║██║ ██║██║╚██╔╝██║
███████╗██║ ██║ ██║ ██║██║╚██████╔╝██║ ╚═╝ ██║
╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝
ユーザーモードクライアントを備えた Windows カーネルモードドライバフレームワーク
[!IMPORTANT]
完全なプロジェクトを入手する
ソリューションファイルは Discord サーバー から入手できます。
完全なソースコードの購入にご興味がありますか? Telegram または Discord: @tonythimself までご連絡ください。
Lithium は、Windows カーネルモードドライバ (lithium-kernel) とユーザーモードクライアント (lithium-usermode) を組み合わせたものです。独自の IOCTL インターフェースを介して通信し、低レベルのメモリ操作、ページテーブルウォーキング、入力デバイス制御のプリミティブを提供します。
| 機能 | 説明 |
|---|---|
| 物理メモリ R/W | MmCopyMemory を介した物理アドレスの直接読み書き |
| 仮想メモリ R/W | MmCopyVirtualMemory を介したプロセス間仮想メモリアクセス |
| DTB 解決 | PFN データベース列挙によるディレクトリテーブルベースの抽出 |
| ページテーブルウォーキング | PML4/PDPT/PD/PT レイヤーキャッシュを備えた線形アドレス変換 |
| パターンスキャン | プロセスメモリ全体に対する IDA スタイルのシグネチャスキャン |
| メモリ割り当て | 対象プロセスコンテキストでの ZwAllocateVirtualMemory |
| メモリ保護 | 対象プロセスコンテキストでの ZwProtectVirtualMemory |
| マウスエミュレーション | MouClass サービスコールバックフックを介したカーネルレベルのマウス入力 |
| スレッド隠蔽 | ETHREAD フィールドの偽装 (開始アドレス、CID、作成時刻など) |
| NMI コールバック無効化 | デバッガ回避のための NMI コールバック抑制 |
| プールクリーニング | カーネルプールトラッカーからのビッグプールテーブルエントリの削除 |
lithium/
├── lithium-kernel/ # Kernel-mode driver (KMDF)
│ ├── entry.cpp # DriverEntry entry point
│ ├── core/
│ │ ├── dispatch/ # IOCTL dispatch and request routing
│ │ ├── requests/
│ │ │ ├── directory-table-base/ # DTB resolution & page table walk
│ │ │ ├── image-base/ # Process module base retrieval
│ │ │ ├── mouse/ # Mouse input emulation via MouClass
│ │ │ ├── read-write/ # Physical and virtual memory R/W
│ │ │ └── virtual-memory/ # Allocate, protect, query, pattern scan
│ │ └── utilities/
│ │ ├── kernel/ # Module enumeration, NMI, thread ops
│ │ └── ... # Pool cleaner, CRT shim
│ └── dependencies/
│ ├── additional/
│ │ ├── crt/ # Minimal CRT implementation
│ │ ├── security/ # skCrypter string encryption, oxorany
│ │ └── structures/ # Shared invoke data structures
│ └── includes.hpp # Master include header
│
└── lithium-usermode/ # User-mode client
├── entry.cpp # Client entry point
├── core/
│ └── driver/ # IOCTL communication layer
└── dependencies/
├── additional/
│ └── structs.hpp # Page table entry unions & helpers
└── includes.hpp
通信は、既存のドライバ (ProcObsrvesx.sys) の IOCTL ディスパッチルーチンをフックすることによって確立されます。ロード時に、カーネルモジュールは対象ドライバを特定し、その IRP ディスパッチハンドラをスキャンし、lithium 自身の hooked_ioctl へのトランポリンで上書きします。ユーザーモードクライアントは \\.\ProcObsrvesx を開き、すべての IOCTL はフックを介して透過的にリダイレクトされます。
| コード | 入力構造体 | アクション |
|---|---|---|
invoke_base | base_invoke { pid, handle } | プロセスイメージベースの取得 |
invoke_dtb | dtb_invoke { pid, dtb } | ディレクトリテーブルベースの解決 |
invoke_read | read_invoke { pid, directory_table, address, buffer, size } | 物理メモリの読み取り |
invoke_write | write_invoke { pid, directory_table, address, buffer, size } | 物理メモリの書き込み |
invoke_read_virtual | read_virtual_invoke { pid, address, buffer, size } | 仮想メモリの読み取り |
invoke_write_virtual | write_virtual_invoke { pid, address, buffer, size } | 仮想メモリの書き込み |
invoke_allocate | allocate_invoke { pid, type, protection, address, size } | 仮想メモリの割り当て |
invoke_protect | protect_invoke { pid, protection, address, size } | メモリ保護の変更 |
invoke_virtual_query | query_virtual_invoke { pid, address, mbi } | 仮想メモリ情報のクエリ |
invoke_pattern_scan | pattern_invoke { pid, signature, address, pattern_address } | メモリのパターンスキャン |
invoke_move_mouse | mouse_invoke { x, y, flags, button_flags } | マウス入力のエミュレーション |
ドライバは MmGetPhysicalMemoryRanges によって返される物理メモリ範囲を反復処理し、PFN データベースをウォークして自己参照 PML4 エントリを特定し、各ページテーブルレイヤーを検証して、指定されたプロセスの正しいディレクトリテーブルベースを確認します。
線形から物理への変換は、4 レベルの x64 ページテーブル階層 (PML4 → PDPT → PD → PT) をレベルごとのキャッシュとともに走査します。ラージページ (2MB / 1GB) のサポートはベストエフォートベースで含まれています。
ドライバは MouClass および MouHID ドライバオブジェクトを特定し、HID デバイス拡張から MouseClassServiceCallback を解決し、MOUSE_INPUT_DATA パケットをコールバックチェーンに直接注入します。
主要な ETHREAD フィールド — 作成時刻、開始アドレス、Win32 開始アドレス、カーネルスタック、CID、終了ステータス — が保存され、無害な値または null 値に置き換えられます。終了時には、スレッド終了前に元の値が復元されます。
lithium.sln を開くlithium-kernel をビルド → lithium-kernel.syslithium-usermode をビルド → lithium-usermode.exeまたは MSBuild 経由:
msbuild lithium.sln /p:Configuration=Release /p:Platform=x64
#include <core/driver/driver.hpp>
g_driver->initialize_handle();
DWORD pid = g_driver->get_process_id(L"target.exe");
g_driver->attach(pid);
g_driver->image_base = g_driver->get_image_base(0);
g_driver->dtb = g_driver->resolve_directory_table_base();
auto value = g_driver->read<uintptr_t>(g_driver->image_base + 0xOFFSET);
g_driver->mouse_event(-10, -10, 0, 0);
このプロジェクトは 教育および研究目的のみ を意図しています。
自身が所有するシステム、またはテストの明示的な許可を得たシステムでのみ使用してください。
作者は、このソフトウェアによって引き起こされたいかなる誤用や損害についても責任を負いません。