
사용자 모드 클라이언트가 있는 Windows 커널 모드 드라이버로, 게임 치팅을 위한 IOCTL 기반 물리 및 가상 메모리 읽기/쓰기, 페이지 테이블 워킹, 패턴 스캐닝, 입력 에뮬레이션을 제공합니다.
██╗ ██╗████████╗██╗ ██╗██╗██╗ ██╗███╗ ███╗
██║ ██║╚══██╔══╝██║ ██║██║██║ ██║████╗ ████║
██║ ██║ ██║ ███████║██║██║ ██║██╔████╔██║
██║ ██║ ██║ ██╔══██║██║██║ ██║██║╚██╔╝██║
███████╗██║ ██║ ██║ ██║██║╚██████╔╝██║ ╚═╝ ██║
╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝
사용자 모드 클라이언트를 갖춘 Windows 커널 모드 드라이버 프레임워크
[!IMPORTANT]
전체 프로젝트 받기
솔루션 파일은 Discord 서버에서 이용할 수 있습니다.
전체 소스 코드 구매에 관심이 있으시면 Telegram 또는 Discord @tonythimself로 연락해 주세요.
Lithium은 Windows 커널 모드 드라이버(lithium-kernel)와 사용자 모드 클라이언트(lithium-usermode)로 구성됩니다. 사용자 정의 IOCTL 인터페이스를 통해 통신하며, 저수준 메모리 조작, 페이지 테이블 워킹, 입력 장치 제어 프리미티브를 제공합니다.
| 기능 | 설명 |
|---|---|
| 물리 메모리 읽기/쓰기 | MmCopyMemory를 통한 물리 주소 직접 읽기/쓰기 |
| 가상 메모리 읽기/쓰기 | 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);
이 프로젝트는 교육 및 연구 목적으로만 사용하도록 만들어졌습니다.
본인이 소유하거나 테스트에 대한 명시적 허가를 받은 시스템에서만 사용하십시오.
저자는 이 소프트웨어로 인해 발생하는 어떠한 오용이나 손해에 대해서도 책임지지 않습니다.