
masm32 kernel programming, drivers, tutorials, examples, and tools (credits Four-F)
Dreg가 자신의 필요에 따라 관리하는 저장소입니다.
masm32 커널 프로그래밍, 드라이버, 튜토리얼, 예제, 도구(크레딧: Four-F)
이 시점에 C:\에 .sys 파일이 생성됩니다.
드라이버 로드:
w2k_load.exe 또는 osrloader.exe가 beeper.sys를 로드하는 중에 오류를 표시할 수 있지만 무시하세요.
이 오류는 드라이버 코드가 자체 실행을 마칠 때 스스로 생성하는 것입니다. 이 트릭을 사용하면 드라이버를 언로드할 필요가 없습니다.
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
따라서 beep.sys가 커널에 올바르게 로드되었다면 스피커에서 비프음이 들려야 합니다(드라이버 코드가 비프음을 생성합니다).
드라이버를 언로드해야 할 때는 다음을 사용하세요:
저는 Sven B. Schreiber의 w2k_load.exe를 Windows 2000부터 Windows 10까지 작동하도록 수정했습니다(매니페스트...).
osrloaderv30.zip의 압축을 풀고 이 GUI 프로그램을 사용하세요:
이전 Windows에서는 이 저장소에 첨부된 DbgView.exe를 사용하면 됩니다. 참고로 저는 이 파일을 수정했습니다(매니페스트...).
최신 Windows에서는 sysinternals 웹 사이트의 최신 dbgview.exe를 사용하고 문제 해결을 위해 다음을 확인하세요:
이 저장소의 .pdf 파일들을 읽고 KmdKit18/examples 디렉토리에서 예제를 살펴보세요.
경고: 모든 ASM 소스 코드는 .bat 파일 안에 있습니다(배치 코드와 asm 코드가 같은 파일에 혼합되어 있음).
advanced\FindShadowTable\FindShadowTable.bat 예제
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
이 파일에는 .sys를 생성하는 BATCH 코드가 들어 있을 뿐만 아니라 드라이버 소스 코드 자체도 포함되어 있습니다. 그래서 맞습니다. 매우 까다롭게도 빌드 스크립트와 소스 코드가 함께 있습니다.
ServiceDescriptorTableShadow를 찾는 방법을 보여주는 예제입니다.
ID가 80h-400h인 스레드를 스캔하여 KTHREAD.ServiceTable이 KeServiceDescriptorTable과 같지 않은 스레드를 찾으려고 시도합니다. 그러한 스레드를 찾으면 해당 KTHREAD.ServiceTable이 ServiceDescriptorTableShadow 주소를 보유합니다.
DbgView(www.sysinternals.com)로 드라이버의 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
간단한 레거시(비 PnP) PS/2 키보드 필터 드라이버 예제입니다. 경고: USB 키보드 스택에는 이 드라이버를 연결할 수 없습니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
Four-F, [email protected] 이 매크로 파일들은 제 패키지인 cocomac에서 가져온 것입니다.
간단한 레거시(비 PnP) PS/2 마우스 필터 드라이버 예제입니다. 경고: USB 마우스 스택에는 이 드라이버를 연결할 수 없습니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
IoCreateDevice 대신 IoCreateDeviceSecure를 호출하여 명명된 디바이스 개체에 특정 보안 설정을 적용하는 방법을 보여주는 예제입니다.
IoCreateDeviceSecure 루틴은 운영 체제의 일부가 아니므로 필요한 모든 루틴이 포함된 wdmsec.lib를 링크합니다.
여기서 찾을 수 있는 wdmsec.lib 라이브러리는 DDK에 포함된 것이 아닙니다. 불필요한 멤버를 제거하고 크기를 줄이기 위해 다시 빌드해야 했습니다.
파일을 생성, 쓰기, 읽기, 삭제하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
드라이버를 리소스로 패킹하는 방법을 보여주는 예제입니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
시스템이 안전 모드로 실행 중인지 확인하는 방법입니다.
KmdManager로 등록/등록 해제하고 시작하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
basic/MemoryWorks/LookasideList
lookaside 목록에서 할당된 메모리 블록을 관리하기 위해 lookaside 목록과 이중 연결 목록을 사용하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
SEH로 예외를 처리하는 방법을 보여주는 예제입니다. 하지만 기억하세요. 커널 모드에서는 SEH로 모든 예외를 처리할 수 없습니다!
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
basic/MemoryWorks/SharedSection
사용자 모드 프로세스와 커널 모드 드라이버 간에 메모리를 공유하기 위해 명명된 섹션 개체를 사용하는 방법을 보여주는 예제입니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
basic/MemoryWorks/SharingMemory
사용자 모드와 커널 모드 간에 메모리 버퍼를 공유하는 한 가지 가능한 방법을 보여주는 예제입니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
basic/MemoryWorks/SystemModules
커널 모드에서 메모리를 할당하는 방법을 보여주는 예제입니다. 메모리를 쓸데없이 할당하지 않도록 일부 시스템 정보로 채웁니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
레지스트리 키를 생성, 설정, 읽기 및 삭제하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
코드를 서로 다른 PE 섹션에 배치하는 방법을 보여주는 예제입니다.
basic/Synchronization/MutualExclusion
리소스에 대한 상호 배타적 액세스를 구현하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
어떤 종류의 이벤트가 발생했음을 사용자 모드에 알리는 방법을 보여주는 예제입니다.
테스트 환경: Windows 2000, XP 및 Server 2003.
basic/Synchronization/TimerWorks
타이머를 생성, 설정, 대기 및 취소하는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003.
WorkItem 예제
이 예제에서는 기존 디스크 디바이스를 다룹니다.
테스트 환경: Windows 2000, XP 및 Server 2003
각 디스크 파티션의 특징에 대한 정보를 제공합니다.
테스트 환경: Windows 2000, XP 및 Server 2003
이 예제에서는 기존 디스크 디바이스를 다룹니다.
테스트 환경: Windows 2000, XP 및 Server 2003
이 예제에서는 기존 키보드 디바이스를 다룹니다.
테스트 환경: Windows 2000, XP 및 Server 2003
이 예제에서는 기존 키보드 디바이스를 다룹니다. 이 예제는 표준 제어판 -> 키보드 애플릿 기능 중 일부를 제공합니다.
테스트 환경: Windows 2000, XP 및 Server 2003
어떤 디바이스에서 읽을지 알고 있다면 사용자 모드에서 MBR을 읽는 것은 가장 쉬운 일입니다.
테스트 환경: Windows 2000, XP 및 Server 2003
이 예제에서는 기존 직렬 디바이스를 다룹니다.
테스트 환경: Windows 2000, XP 및 Server 2003
setup 디바이스 함수 중 일부를 사용하는 방법을 보여주는 예제입니다. 사용 가능한 모든 디스크 디바이스를 열거하고 디바이스 속성을 가져옵니다. 명령줄에서 실행하세요.
테스트 환경: Windows 2000, XP 및 Server 2003
시스템 스피커로 비프음을 내는 방법.
테스트 환경: Windows NT4.0+sp6, 2000, XP 및 Server 2003
사용자 모드 프로세스에 직접 포트 I/O 액세스를 제공합니다. Dale Roberts의 문서 및 C 소스 코드를 기반으로 합니다.
테스트 환경: Windows 2000, XP 및 Server 2003
ntoskrnl.exe의 베이스 주소를 찾는 방법을 보여주는 예제입니다.
KmdManager로 등록/등록 해제하고 시작/중지하세요. DbgView(www.sysinternals.com)로 해당 디버그 출력을 확인하거나 SoftICE를 사용하세요.
테스트 환경: Windows 2000, XP 및 Server 2003
ReadFile 및 neither method를 사용한 드라이버 통신을 보여줍니다. 또한 ring0에서 SEH를 사용하는 방법을 보여줍니다.
테스트 환경: Windows 2000, XP 및 Server 2003
아무 작업도 수행하지 않는 가장 단순한 커널 모드 드라이버입니다.
테스트 환경: Windows 2000, XP 및 Server 2003
Windows NT 커널 모드 디바이스 드라이버용 스켈레톤 코드입니다.
테스트 환경: Windows 2000, XP 및 Server 2003
buffered method를 사용하여 DeviceIoControl과의 드라이버 통신을 보여줍니다. 또한 가상 주소를 변환하는 방법을 보여줍니다.
테스트 환경: Windows 2000, XP 및 Server 2003
이 예제는 주요 드라이버 루틴이 실행되는 IRQL 및 프로세스/스레드 컨텍스트를 알려줍니다. DebugView(www.sysinternals.com)를 사용하여 해당 출력을 확인하세요.
테스트 환경: Windows 2000, XP 및 Server 2003
Windows Driver Kit(WDK) 버전 7.1.0 문서: https://www.microsoft.com/en-us/download/details.aspx?id=11800
WDK 문서: https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Intel 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼 결합본: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, 4
Windows 2003 소스 코드 유출, WRK, CRK ...
Prasad Dabak, Sandeep Phadke & Milind Borate의 Undocumented Windows NT 책
Pavel Yosifovich의 Windows Kernel Programming 책
Mark Russinovich, David A. Solomon 외의 Windows Internals 책
(책) Bill Blunden의 The Rootkit Arsenal 2nd
(책) Enrico Martignetti의 What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager
(책) Subverting the Windows Kernel
(책) Rootkits and Bootkits: Reversing Modern Malware and Next Generation Threats
osdev(OS 개발에 관심이 있는 사람들을 위한 커뮤니티)
각종 github/gist, OSR, phrack, uninformed, openrce, kernelmode, rootkit.com, arteam...