Часть полного текста документа: ЕХЕ-ВИРУСЫ В этой главе рассказано о ви- русах, заражающих ЕХЕ-фай- лы. Приведена классифика- ция таких вирусов, подробно рассмотрены алгоритмы их работы, отличия между ними, достоинства и недо- статки. Для каждого типа вирусов представлены исход- ные тексты с подробными комментариями. Также приве- . дены основные сведения о структуре и принципах ра- боты ЕХЕ-программы. СОМ-файлы (небольшие программы, написанные в основном на языке Assembler) медленно, но верно устаревают. Им на смену приходят пуга- ющие своими размерами ЕХЕ-"монстры". Появились и вирусы, умею- щие заражать ЕХЕ-файлы. Структура и процесс загрузки ЕХЕ-программы В отличие от СОМ-программ, ЕХЕ-программы могут состоять из не- скольких сегментов (кодов, данных, стека). Они могут занимать боль- ше 64Кбайт. ЕХЕ-файл имеет заголовок, который используется при его загрузке. Заголовок состоит из форматированной части, содержащей сигнатуру и данные, необходимые для загрузки ЕХЕ-файла, и таблицы для на- стройки адресов (Relocation Table). Таблица состоит из значений в фор- мате сегмент:смещение. К смещениям в загрузочном модуле, на которые указывают значения в таблице, после загрузки программы в память дол- жен быть прибавлен сегментный адрес, с которого загружена программа. При запуске ЕХЕ-программы системным загрузчиком (вызовом функ- ции DOS 4Bh) выполняются следующие действия: 1. Определяется сегментный адрес свободного участка памяти, размер которого достаточен для размещения программы. 2. Создается и заполняется блок памяти для переменных среды. 3. Создается блок памяти для PSP и программы (сегментЮОООЬ - PSP; сегмент+ООЮЬЮОООЬ - программа). В поля PSP заносятся соответ- ствующие значения. 4. Адрес DTA устанавливается равным PSP:0080h. 5. В рабочую область загрузчика считывается форматированная часть заголовка ЕХЕ-файла. 6. Вычисляется длина загрузочного модуля по формуле: Si7.e=((PageCnt*5i2)-(HdrSae*i6))-Pa!tP3ig. 7. Определяется смещение загрузочного модуля в файле, равное HdrSize*16. 8. Вычисляется сегментный адрес (START_SEG) для загрузки - обычно это PSP+lOh. 9. Считывается в память загрузочный модуль (начиная с адреса START_SEG:0000). 10. Для каждого входа таблицы настройки: a) читаются слова I_OFF и I_SEG; b) вычисляется RELC^SEG-START^SEG+LSEG; c) читается слово по адресу RELO_SEG:I_OFF; d) к прочитанному слову прибавляется START_SEG; e) результат запоминается по тому же адресу (RELO_SEG:I_OFF). 11. Распределяется память для программы в соответствии с МахМет и МтМет. 12. Инициализируются регистры, выполняется программа: a) ES=DS°PSP; b) АХ=результат проверки правильности идентификаторов драйве- ров, указанных в командной строке; c) SS°START_SEG+ReloSS, SP-ExeSP; d) CS=START_SEG+ReloCS, IP=ExeIP. Классификация ЕХЕ-вирусов ЕХЕ-вирусы условно можно разделить на группы, используя в качестве признака для деления особенности алгоритма. Вирусы, замещающие программный код (Overwrite) Такие вирусы уже стали раритетом. ............ |