Несколько советов авторам вирусов
Вадим Богданов, Алексей Де-Мондерик, Евгений Касперский
КомпьютерПресс N9/1992 (стр. 31-34)
Успокойтесь! Не надо готовить ругательства или, наоборот, потирать руки. Мы не хотим делиться своими идеями с авторами компьютерных вирусов. Все значительно проще — через наши руки прошло несколько сотен образцов компьютерных животных, и слишком часто в них встречались одни и те же ошибки. С одной стороны, это хорошо — такие вирусы часто оказываются «маложивущими», но с другой стороны, малозаметная ошибка может привести к несовместимости вируса и используемого на компьютере программного обеспечения. В результате вирус «вешает» систему, компьютер отдыхает, а пользователи мечутся в панике с криками: «Пусть хоть 100 вирусов, лишь бы компьютер работал!!!» (завтра сдавать заказ, не запускается самая любимая игрушка, компилятор виснет при выходе в DOS и т.п.). И все это происходит при заражении довольно безобидным вирусом.
По причине этого и возникло желание поделиться некоторой информацией о жизни вируса в компьютере, дабы облегчить жизнь и вам, и многочисленным «пользователям» ваших вирусов. Итак, правила для автора вируса.
Умышленное уничтожение или повреждение государственного или общественного имущества наказывается лишением свободы на срок до одного года, или исправительными работами на тот же срок, или штрафом, или возложением обязанности загладить причиненный вред.
(Ст.98 УК РСФСР)
Правило 0. Не надо писать вирусы — на свете так много интересного! Если нечего делать, то перепишите что-нибудь с DOS на Windows, если хочется прославиться — сделайте то же самое, но потом раздайте свою программу всем желающим и нежелающим.
Правило 1. При запуске вирус должен сохранять все регистры, которые передает DOS загружаемой программе (то есть не только AX, DS и ES, но и остальные), а при переходе на программу восстанавливать их (за исключением корректировки SS:SP, если это нужно). Почему? Объясняем.
Существуют (и обязательно появятся еще) программы, которые используют для своих нужд значения регистров, передаваемых из DOS’а при загрузке. Например, довольно популярный архиватор COM- и EXE-файлов DIET (версия 1.10а) при распаковке запускаемых COM-файлов предполагает, что значение регистра ВХ обязательно должно быть равно 0000h. Если подобная программа будет заражена вирусом, который не восстанавливает регистры при передаче управления на тело программы, то она скорее всего «умрет» при загрузке.
При загрузке регистры принимают значения (верно для MS-DOS 3.30 — 5.0): AX = BX — корректность имени диска в командной строке (0 или 00FF); CX, BP — не определены; DX=DS; SI=IP; DI=SP.
Правило 2. Если вы используете или корректируете системные области DOS (буферы, стек, фрагменты обработки прерываний), вы обязательно должны проверять, в какой системе находитесь. Почему? Объясняем.
Как правило, каждая следующая версия DOS своей внутренней организацией не похожа на предыдущую. Это касается и буферов, и стека, и многого другого. Поэтому, если вы полностью дизассемблировали и разобрали по косточкам версию MS-DOS 3.30, это вовсе не значит, что вы постигли все тайны фирмы Microsoft и вам можно ставить памятник. Нет! Вам следует перекурить и приниматься за версию 4.0х, потом 5.00 а в минуты отдыха и по ночам потрошить DR-DOS.
Правило 3. При заражении программ сначала записывайте вирус, а затем модифицируйте начало файла (в случае, если вирус пишется в начало или середину файла — сначала сохраните стираемую часть, а затем записывайте вирус). Почему? Объясняем.
При записи в файл может произойти ошибка (кстати, не забывайте проверять флаг CF при операциях с дисками), и если ваш вирус модифицировал начало файла, а сам не записался, то файл безнадежно испортится и при загрузке скорее всего зависнет.
Правило 4. Если вы заражаете COM- и ЕХЕ- файлы, сохраняйте первые два байта заражаемой программы и проверки «COM или ЕХЕ» проводите только по ним (напомню — в начале ЕХЕ-файлов должна быть сигнатура — 4D5Ah или 5A4Dh). Говорим об этом только потому, что участились случаи появления вирусов, которые проверяют «COM или ЕХЕ» по способу: равен регистр CS регистру DS (ES) или нет (некоторые даже умудряются проверять по регистру IР, — равен он 100h или нет). Это в корне неверно, так как при запуске ЕХЕ-файла регистр CS может быть равен регистру DS (если в ЕХЕ-заголовке по смещению 16h стоит слово FFF0h), а регистр IР- 100h (слово по смещению 14h — 100h). Мы, например, при работе с вирусами иногда используем именно такие файлы.
Кстати, до сих пор попадаются вирусы, которые определяют формат файла по расширению его имени (.COM или .EXE). О том, что это является грубой ошибкой, знают даже в детских садах!
Правило 5. При заражении ЕХЕ-файлов обязательно сравнивайте длину файла с длиной загружаемого модуля. Если они не совпадают, то такой файл лучше не трогать, так как вы либо уничтожите оверлей, либо программа перестанет загружаться в память. Для ЕХЕ-файлов также следует проверять значения стековых регистров, иначе в некоторых случаях вирус будет уничтожен стеком. Так же проверяйте длину СОМ-файлов: не следует их делать больше, чем 64 Кбайта.
Правило 6. Учтите, чем дальше, тем больше вашим вирусам придется сталкиваться с защищенным режимом процессоров 80х86, в котором, как известно, перехват прерывания 21h является довольно тонким вопросом. Если вы перехватываете int 21h «по-старинке», то многие новые продукты (например, Borland С++ 3.0) будут зависать, а Windows при нескольких DOS-задачах в фоновом режиме может выдать «unrecoverable application error».
Для того, чтобы избежать этого, помимо всех известных правил подмены критических прерываний (установка флагов и регистров на выходе), существуют еще два:
- непосредственно перед вызовом OLD 21 нужно запретить аппаратные прерывания (cli);
- для всех функций, которые не обрабатывает ваш резидент, OLD 21 нужно выполнять через JMP, а не через CALL.
Правило 7. Теперь насчет порчи программ и дисков. Сравните вирусы зарубежного и отечественного производства. Вам сразу бросится в глаза, что почти каждый советский вирус, в отличие от зарубежных (не считая тайваньских: «Восток — дело тонкое»), что-нибудь, да испортит. Даже большая группа болгарских вирусов не идет ни в какое сравнение с нашими вирусами по части пакостей. Что это — особенности русской (точнее — советской) души или наследие сталинизма?
Короче, если вы пишете вирус, старайтесь воздерживаться от вставки пакостей — это может вам же выйти боком. Несмотря на отсутствие в нашем уголовном законодательстве статьи о написании вирусов, там есть другая статья — «причинение материального ущерба». Вот по этой статье вас и посадят, тем более, что такой случай уже был (по сообщению Н. Н. Безрукова). Ну, а если и не посадят, то пострадавшие могут найти и, извините, морду набить. И такие случаи тоже бывали.
Ну а уж если вы все-таки вставили какую-то гнусность, то запускайте свой вирус на своем компьютере и — наслаждайтесь.