Хак ядра NT

       

компиляция псевдодрайвера


Модифицируя код или данные ядра, необходимо быть на 100% уверенным, что в данный момент времени их не использует никакой другой поток. Невыполнение этого условия приводит к непредсказуемому поведению системы. В лучшем случае – к голубому экрану, в худшем — к потери всего дискового тома (особенно, если мы вмешиваемся в файловые операции). Проблема возникает как на многопроцессорных, так и на однопроцессорных системах без поддержки Hyper Heading, причем универсальных путей выхода из ситуации не существует. Каждый случай требует индивидуального подхода, описание которого тянет на целую статью, а поэтому здесь не рассматривается.

Анализ исходных текстов (или драйверов) великих гуру далеко не всегда идет на пользу начинающим хакерам. На то они и гуру, чтобы знать, какими трюками когда можно пользоваться, а когда нет. Начинающие же обычно запоминают лишь сам трюк, а о границах его применимости зачастую даже не догадываются. В частности, в ранних версиях свой утилиты DbgView Марк Руссинович вставлял в начало ядерной функции DbgPring команду перехода на свой обработчик (см. листинг 3).

.text:00010646 B8 D4 0A 01+ mov    eax, offset loc_10AD4      ; jmp:DbgPrint

.text:0001064B 8B 40 02    mov    eax, [eax+2]         ; операнд jmp:[DbgPrint]

.text:0001064E A3 A8 0B 01+ mov    _pDbgPrn, eax

.text:00010653 8B 08       mov    ecx, [eax]           ; DbgPrint

.text:00010655 89 0D A8 0B+ mov    _pDbgPrn, ecx

.text:0001065B 8A 41 01    mov    al, [ecx+1]          ; второй

байт DbgPrint

.text:0001065E 3C 8D       cmp    al, 8Dh                    ; PUSH EBP/MOV EBP,ESP

.text:00010660 75 04       jnz    short loc_10666



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