Хак ядра NT

       

пересчет контрольной суммы после модификации системного файла


Естественно, не стоит забывать о такой штуке как SFC, норовящей автоматически (или вручную) восстановить измененные файлы. И хотя SFC легко усмирить (отключить или синхронизовать измененный системный файл с его "эталонным" оригиналом, хранящемся в кэше) это не решит всех проблем.

При установке очередного пакета обновления, затрагивающего ядро, инсталлятор просто не поймет, что это за версия такая и откуда оно вообще взялось. В результате, установка прервется на середине. После перезагрузки система умрет и конечному пользователю придется, матерясь, заниматься ее реанимацией (подробнее об этом можно прочитать на блоге Раймонда Чена "Old New Thing": http://blogs.msdn.com/oldnewthing/archive/2003/08/05/54603.aspx).

Для вирусов такой прием, быть может, и подходит, но для коммерческих программ он неприемлем в принципе! К счастью, существует одна интересная лазейка — возможность прописать в boot.ini файле альтернативное ядро, которое и будет загружаться, тогда оригинальный ntoskrnl.exe можно оставить в неприкосновенности. Ни SFC, ни инсталлятор пакетов обновления протестовать не будут, что есть гуд. А вот то, что обновление затронет "пассивное" оригинальное ядро — уже нехорошо. Может возникнуть конфликт старого ядра c новым окружением (тоже самое произойдет и при удалении пакета обновления), поэтому необходимо автоматически (или хотя бы вручную) отслеживать смену ядер, копировать ntoskrnl.exe поверх альтернативного ядра и заново его модифицировать. Довольно геморройный путь, но в некоторых случаях без него не обойтись, поэтому рассмотрим его во всех подробностях, тем более, что несмотря на кажущуюся простоту операции, подводных камней здесь предостаточно.

Первым делом скопируем файл ntoskrnl.exe (он находится в папке System32) в… ну, например, в ntoskrnh.exe, затем найдем в корневом каталоге системного диска (которым, как правило, является диск C:) файл boot.ini и откроем его в FAR'е по <F4>
или любом другом подходящем редакторе (см. листинг 5).

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINNT="W2K Pro RUS" /fastdetect



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