Ядерные шалости Крис Касперски ака мыщъх Хакер, номер #091, стр. 091-082-5 После любой модификации системных файлов необходимо пересчитать их контрольную сумму, иначе NT (в отличие от Windows 98) откажется их загружать (см. рис. 3). Правда, в «безопасном режиме» по F8 они загружаются, но это все-таки не то. Для этих целей можно воспользоваться утилитой EDITBIN, входящей в состав Platform SDK и Microsoft Visual Studio. Командная строка выглядит так: editbin.exe /RELEASE filename.exe Естественно, не стоит забывать о такой штуке, как 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> или любом другом подходящем редакторе: КОД Листинг 4: типичное содержимое файла boot.ini [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 Продублируем (copy-n-paste) строку, находящуюся в секции [operating system] и добавим к ней ключ «/kernel=ntoskrh.exe», где ntoskrh.exe — имя альтернативного ядра (см. листинг 6). Также изменим текст, заключенный в кавычки, дописав сюда «hacked» или что-то свое. Главное — чтобы при загрузке можно было отличить основное ядро от альтернативного. |