Компиляция и испытания вируса
Для компиляции вирусного кода нам понадобится транслятор FASM, бесплатную Windows-версию которого можно найти на сайте http://flatassembler.net/. Остальные трансляторы (MASM, TASM) тут непригодны, поскольку используют совсем другой ассемблерный синтаксис.
ОК, скачиваем http://flatassembler.net/fasmw160.zip, распаковываем архив и набираем "fasm.exexcode.asm" в командной строке. Если все сделано правильно, на диске должен образоваться файл xcode.exe. Запустим его на выполнение с ключом "--*" за которым следует имя предполагаемой жертвы, например, notepad.exe ("xcode.exe --* notepad.exe"). Появление следующего диалогового окна свидетельствует об успешном внедрении. В противном случае, у нас ничего не получилось и первым делом необходимо убедиться в наличии прав доступа к файлу. Захватывать их самостоятельно наш вирус не собирается. Во всяком случае пока… Напомните мне, чтобы вернуться к этому вопросу в следующий раз.
Рисунок 2 файл успешно заражен
Запускаем зараженный notepad.exe на исполнение. В доказательство своего существования вирус тут же выбрасывает диалоговое окно, а после нажатия на "ОК" передает управление оригинальному коду программы.
Рисунок 3 реакция зараженного файла на выполнение
Чтобы не у пользователя не случился инфаркт, из финальной версии вируса это диалоговое окно лучше всего удалить, заменив его своей собственной "начинкой". Тут все зависит от наших намерений и фантазии. Можно перевернуть экран, похитить пароли или обложить пользователя трехэтажным матом, послав его на хрен.
Зараженный файл обладает всеми необходимыми репродуктивными способностями и может заражать другие исполняемые файлы. Взять хотя бы "Пасьянс" — "notepad.exe ??* sol.exe". Естественно, заражать файлы через командную строку ни один нормальный пользователь не будет и процедуру поиска очередной жертвы в вирусное тело мы должны добавить самостоятельно.
Если, конечно, мы захотим ее искать. Ведь не санкционирование внедрение в чужие файлы это уже УК!
Так что лучше совершенствовать вирус в другом направлении. При повторном заражении файла текущая версия необратимо затирает оригинальный код своим телом, в результате чего файл отказывает в работе. Вот беда! Как ее побороть? Можно добавить проверку на зараженность перед копированием вируса в файл. Берем CreateFile, передаем ей имя файла вместе с потоком (notepad.exe:eatmeout) и смотрим на результат. Если файл открыть не удалось, значит потока "eatmeout" тут нет и он еще не заражен, в противном случае мы должны отказаться от заражения. Или… выбрать другой поток. Например, eatmeout_01, eatmeout_02, eatmeout_03…
Другая проблема — вирус не корректирует длину целевого файла и после внедрения она уменьшается до 4 Кб — именно столько занимает текущая версия xcode.exe. Нехорошо! Пользователь тут же заподозрит подвох (explorer.exe, занимающий 4 Кб выглядит довольно забавно), занервничает и начнет запускать всякие нехорошие программы типа антивируса. Но что нам стоит запомнить длину жертвы перед внедрением, скопировать в нее свое тело, открыть файл на запись и сделать SetFilePointer на оригинальный размер, увеличивая размер жертвы до исходных значений.