код, "закорачивающий" KeBugCheckEx
Здесь: 8042BF14h — адрес начала функции KeBugCheckEx (на всех машинах разный), 1 – длина инструкции PUSH EBP, а 14C258h — машинный код, представляющий собой последовательность двух команд: POP EAX (58h)/RET 14h (C2h 14h 00h).
Объединив все компоненты воедино мы получаем следующий папелац:
.386
.model flat, stdcall
.code
DriverEntry proc
mov eax, cr0 ; грузим управляющий
регистр cr0 в
регистр eax
mov ebx, eax ; сохраняем бит WP в регистре ebx
and eax, 0FFFEFFFFh ; сбрасываем бит WP, запрещающий запись
mov cr0, eax ; обновляем управляющий регистр cr0
mov dword ptr DS:[8042BF14h+1], 14C258h 14C258
; "закорачиваем" KeBugCheckEx
mov cr0, ebx ; восстанавливаем бит WP
mov eax, 0C0000182h; STATUS_DEVICE_CONFIGURATION_ERROR
ret
DriverEntry endp
end DriverEntry