Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #78, ИЮНЬ 2005 г.

BIOS на блюдечке

Крис Касперски ака мыщъх

Хакер, номер #078, стр. 078-108-8


Все, что нам надо, — найти последовательность типа 55 AA 7x ?? (CMP XXX, AA55h) и заменить 7x ?? на EB xx (JMP SHORT ххх, где xxx — указатель на наш код, внедренный в boot-блок). Естественно, перед затиранием 7x ?? его необходимо сохранить в своем коде. Вот теперь можно устанавливать перехватчик на boot-сектор. Причем, поскольку наш код находится в BIOS'е в неупакованном виде, ютиться в таблице прерываний совершенно необязательно и можно перенаправить вектор прерывания INT 01h прямо в BIOS!

[вскрытие показало]

Кодинг BIOS’а – это нечто! Это самый низкий уровень, жить на нем необыкновенно интересно и познавательно. Это настоящая школа программирования с практически неограниченными возможностями для самовыражения. Главное — фантазию иметь! Полет нашей мысли сдерживает лишь железо. Мы можем свободно переходить в защищенный режим, крутить любые регистры и делать вообще все, что нам вздумается! И это так просто!

[DUAL-BIOS своим руками]

Любой умеющий держать паяльник в руках может доработать материнскую плату, установив на нее сразу две микросхемы FLASH–памяти. Тогда между ними можно будет переключаться без рискованных манипуляций с chip-extractor'ом. Пример схемы подключения приведен ниже. Как видно, ничего сложного в DUAL-BIOS'е нет.

[прерывания]

Для программирования BIOS'а необходимо знать основные прерывания как свои пять пальцев. Вот пара отличных руководств по теме:

Архитектура ввода-вывода персональных ЭВМ IBM PC. Описание устройства компьютера для начинающих на русском языке.
http://redlib.narod.ru/asmdocs/asm_doc_07.zip.

Ralf Brown Interrupt List. Cправочник по прерываниям для профессионалов на английском языке. http://www.ctyme.com/rbrown.htm.

[из BIOS в Windows]

Как из BIOS’а проникнуть внутрь операционной системы? Мы можем перехватить прерывание INT 13h (и не давать его изменять!), оставаясь в BIOS'е резидентно. Только что это дает? Windows не использует INT 13h, а потому наш код будет активен только на стадии первичной загрузки операционной системы. Но ведь мы же можем читать/писать секторы? Правда, писать собственный драйвер файловой системы нам лень. Хорошо, если это FAT, а как быть с NTFS? Да как два пальца об асфальт! Последовательно сканируя секторы, находим сектор с сигнатурой MZ в начале. Смотрим: если за концом EXE-заголовка расположена PE-сигнатура, значит, это PE-файл и мы можем внедряться в него любым приемлемым способом. Внедряться лучше всего в PE-заголовок, поскольку файл может быть фрагментирован, и не факт, что все последующие секторы принадлежат ему, а не какому-нибудь другому ни в чем не повинному файлу.

Чтобы гарантированно получить управление в Windows, необходимо внедриться в максимально большое количество файлов. Конечно, системные файлы будут немедленно вылечены SFC, а со всеми остальными справится антивирус, однако и SFC, и антивирус являются обыкновенными исполняемыми файлами, которые запустятся уже после того, как наш код получит управление. Естественно, он может противостоять всем зловредно настроенным программкам — например просто блокировать их выполнение.

Назад на стр. 078-108-7  Содержание  Вперед на стр. 078-108-9