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. Описание устройства компьютера для начинающих на русском языке. 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, и антивирус являются обыкновенными исполняемыми файлами, которые запустятся уже после того, как наш код получит управление. Естественно, он может противостоять всем зловредно настроенным программкам — например просто блокировать их выполнение. |