Жизнь после BSOD

код, "закорачивающий" 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



Содержание раздела