
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 корректно загружен в ядро, вы должны услышать звуковой сигнал из динамиков (код драйвера генерирует сигнал)
Когда вам нужно выгрузить драйвер, используйте:
Я модифицировал w2k_load.exe от Sven B. Schreiber, чтобы он работал с Windows 2000 по Windows 10 (манифест...)
распакуйте osrloaderv30.zip и используйте эту программу с графическим интерфейсом:
для более старых Windows просто используйте DbgView.exe, приложенный в этом репозитории. Кстати, я модифицировал его (манифест...)
Для современных Windows используйте последний dbgview.exe с сайта sysinternals и обратитесь к этим материалам для устранения неполадок:
Прочитайте .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, а также содержит сам исходный код драйвера. Так что да, это очень хитро: сборочный скрипт и исходный код находятся вместе.
Это пример того, как найти 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.
Это пример того, как применить определённые параметры безопасности к именованному объекту устройства, вызвав IoCreateDeviceSecure вместо IoCreateDevice.
Поскольку процедура 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
Предоставляет прямой доступ к портам ввода-вывода для процесса пользовательского режима. Основано на статье и исходном коде на C Дейла Робертса (Dale Roberts).
Проверено на: Windows 2000, XP и Server 2003
Это пример того, как найти базу ntoskrnl.exe.
Используйте KmdManager для регистрации/отмены регистрации и запуска/остановки. Наблюдайте за его отладочным выводом с помощью DbgView (www.sysinternals.com) или используйте SoftICE.
Проверено на: Windows 2000, XP и Server 2003
Демонстрирует взаимодействие с драйвером через ReadFile, не используя ни один из методов. А также как использовать SEH в ring0.
Проверено на: Windows 2000, XP и Server 2003
Простейший из возможных драйверов режима ядра, который абсолютно ничего не делает.
Проверено на: Windows 2000, XP и Server 2003
Скелетный код драйвера устройства режима ядра Windows NT.
Проверено на: Windows 2000, XP и Server 2003
Демонстрирует взаимодействие с драйвером через 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 ...
Книга Undocumented Windows NT — Prasad Dabak, Sandeep Phadke и Milind Borate
Книга Windows Kernel Programming — Pavel Yosifovich
Книги Windows Internals — Mark Russinovich, David A. Solomon и другие
(книга) The Rootkit Arsenal, 2-е изд., Bill Blunden
(книга) What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager — Enrico Martignetti
(книга) Subverting the Windows Kernel
(книга) Rootkits and Bootkits: Reversing Modern Malware and Next Generation Threats
osdev (сообщество для людей, интересующихся разработкой операционных систем)
случайные github/gist, OSR, phrack, uninformed, openrce, kernelmode, rootkit.com, arteam...