ЗАЩИТА СУЩЕСТВУЮЩИХ ЕХЕ-ФАЙЛОВ
Итак, «вакцинация» вновь разрабатываемых программ не представляет особой сложности. А как защитить уже существующую ЕХЕ-программу? Для этого существуют две возможности: либо использовать отдельную программу, которая хранит ключевую информацию и осуществляет проверку по требо¬ванию пользователя (такая программа обсуждается в следующем разделе), либо пристыковать к защищаемой программе небольшой код «вирусного фага» - тогда проверка будет осуществляться автоматически при каждом запуске программы. В этом разделе мы обсудим технику создания и внедрения в за¬щищаемую. Программу антивируса—фага, т.е. небольшой ассемблерной программы, которая использует тот же механизм перехвата управления, что и обычный вирус, но осуществляет нужную защиту программы.
Программа – фаг устанавливается специальной программой-установщиком и к моменту начала своей работы уже должна иметь в своем распоряжении эталонный заголовок файла. Получив управление, фаг проверяет заголовок соответствующего файла и, если обнаружены изменения, сообщает об этом пользователю и удаляет вирус. После окончания работы фаг передает управ¬ление защищаемой программе. Поскольку фаг пишется целиком на ассемблере, его работа протекает очень быстро без заметного замедления загрузки про¬граммы. Если Вы установите такой фаг на большую часть часто используемых программ, Ваш компьютер будет защищен очень надежно.
Чтобы правильно спроектировать фаг, нужно хорошо представлять себе механизм запуска ЕХЕ-программ. Стандартный загрузчик ДОС реализует следующую последовательность действий при запуске программы.
1) Создается префикс программного сегмента PSP. Обычно для этого ис¬пользуется функция ДОС $26.
2) В некоторую локальную область памяти считываются начальные 28 байт заголовка ЕХЕ-файла, соответствующие структуре данных HeadExeType.
3) Определяется размер загружаемой части файла по формуле
LengExe = (PageCnt-l)*512 + PartPag
4) Определяется файловое смещение загружаемой части:
SeekExe = HdrSize*16
5) Выбирается сегментный адрес StartSeg для размещения программы.
Обычно StartSeg = Segment {PSP) +16, т.е. программа размещается сразу за PSP, который имеет длину 256 байт (16 параграфов).
6) Считывается загружаемая часть программы в непрерывную область памяти длиной LengExe, начинающуюся по адресу StartSeg:0000.
7) Указатель файла устанавливается на начало таблицы перемещения TablOff,
8) Для каждого элемента перемещения (этих элементов ReloCnt):
• считывается элемент как два 16-битных слова IternOfs, ItemSeg;
• вычисляется ReloSeg === StartSeg+ltemOfs, т.е. сегментная часть смещения абсолютного адреса перемещаемой ссылки;
• извлекается слово по адресу ReloSeg:ltemOfs-сегментная часть пере¬мещаемой ссылки;
• к этому слову прибавляется StartSeg (осуществляется так называемая привязка сегмента);
• результат помещается обратно по адресу ReloSeg:ltemOfs.
9) Выделяется память за концом программы в соответствии со значениями
MinMem и МахМет.
10) Инициируются регистры, и запускается программа:
• регистры ES и DS получают значение сегмента, в котором располагается PSP',
• регистр АХ отражает корректность идентификаторов дисков в командной строке (при нормальном запуске содержит 0);
• SS = StartSeg+ReloSS;
• SP = ExeSP;
• CS == StartSeg^ReloCS;
• IP= Exelp;
• содержимое остальных регистров не имеет значения. Регистры сегмента кода CS и указателя инструкций IP обычно иниции¬руются следующими тремя командами:
PUSH StartSeg+ReloCs
PUSH Exelp
RETF
(команда RETF дальнего возврата из подпрограммы извлекает из стека два слова смещение и сегмент адреса перехода и помещает их соответственно в IP и CS).
Таким образом, сразу после получения управления фаг должен сохранить значения регистров АХ и DS и поместить в DS значение собственного сегмента данных. На практике сегмент данных в коротких ассемблерных программах обычно совпадает с сегментом кода, т.е. программа и данные размещаются в одном сегменте. Сегмент стека SS можно не изменять, т.к. программа-установщик фага должна позаботиться о том, чтобы стек не разрушил код самого фага, и соответствующим образом настроить ReloSS и/или ExelP. Обычно в ЕХЕ-программе начальное значение ReloSS таково, что стек раз¬мещается сразу за концом программы, т.е. в том месте, куда программа-установщик помещает "код фага. Длина стека ExeSP как правило более чем достаточна для того, чтобы работа фага со стеком не привела к разрушению кода фага, поэтому в большинстве случаев установщик оставляет начальные значения ReloSS и ExeSP без изменения.
Статьи по теме:
Обмен данными через файл-фрагмент Социальные последствия информатизацииИспользование комментариев SHADOW MASKWordPad: Выделение текста кеглем шрифта Дата создания или изменения файлаВаш подросток безопасно использует интернет?Программа 1С Управление Торговлей 8Почему работа за компьютером наносит вред здоровью человека Анимация На Рабочем Столе Вашего КомпьютераСистемный реестр Windows XPПолезные советы - программа PicasaРоссийские национальные IP-сетиКредитные карты и InternetМеждународная сеть INTERNETНовые возможности поиска софтаФизические аспекты работы с дискамиЭлектронная почта (e-mail)Windows Vista: Когда Кончается Место На ДискеПонятие: и виды следственных действийРобот Tartalo Стучится В Вашу ДверьРеализация кабельной системыWordPad: Вставка времени и даты Защита электронной почтыРабочий стол Microsoft Windows XPInternet и первичные телекоммуникационные сети УкраиныПерсональный компьютер Геоинформационные Системы (Гис) Как Средства Сбора И Анализа ГеоданныхСофт (Программы) Для Counter - StrikeЗащита памяти в ЕС ЭВМЛокальные средства (ERwin, BPwin, S-Designor, CASE.Аналитик)Hесанкционированный доступ к информации, хранящейся в компьютереКраткие сведения о кодировках кириллицы Устройства вводаЛогический номер сектораМалогабаритные 3U формата CompactPCI контроллеры INOVA Средства разработкиКак работает вирусКибернетика – наука ХХ векаПочтовые псевдонимыЭкспертные СистемыПроект СКСОтчаянно узнать если он лежит или обжуливает?Схема бесплатного ускорения ИнтернетаПолитика безопасности Microsoft Internet ExplorerСоздание Java-апплета “HelloJava”ПРЕСТУПЛЕНИЕ В СФЕРЕ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИАрхитектура Risc Вычислительных ЯдерWordPad: Выделение текста цветом СтримерыМикропроцессоры использующиеся в CompactPCI-системахСброс дисковой системыСистемные и локальные шиныРаботы ученых Протокол Internet (IP)