Вирусный анализ

Вирусный анализ


[Авторский контент]

Доброго времени суток, господа. Сегодня на повестке дня вирусный анализ и с чем его едят. За основу взята статья 2012 года. Она старая в актуальности ничуть не упала.

Итак, загружаем наш испытуемый файл в любой дизассемблер или отладчик. Видим вполне приятный код для анализа – никакой упаковки, никакой обфускации, никакой антиотладки — всё видно как на ладони. Сразу в глаза бросается строка: «Copyright 1989-2000 Borland Inc. Borland C++ run-time library», определяющая язык и версию компилятора, на котором был написан данный вирус. Начнём, непосредственно, анализ функционала данного вируса самым подробнейшим образом. Выполнение программы начинается со следующего места:

00401000>MOV ESI, Virus.004032A8

00401005 MOV ECX, 2D

0040100A>MOV AL, BYTE PTR DS:[ESI]

0040100C XOR AL,3

0040100E MOV BYTE PTR DS:[ESI], AL

00401010 INC ESI

00401011^LOOPD SHORT Virus.0040100A

Данный цикл выполняет расшифровку строковых констант, расположенных по адресу 0х004032A8 размером 0х2D байт. После расшифровки мы получим вот это:

Далее будет выполнен следующий код:

Нетрудно видеть, что программа определяет своё месторасположение на диске, открывает свой собственный файл для чтения, узнаёт его размер и загружает его в специально выделенную для этого область памяти. Зачем? Поймём далее. А сейчас отметим, что при любом неблагоприятном для программы истечении событий она выводит на экран окно сообщения и завершает работу Windows:

Теперь обратим внимание на следующее место:

004010CD CMP EAX, 1200

004010D2 JE Virus.004011D2

Здесь программа сравнивает свой физический размер с константой 0х1200 и в зависимости от данной операции продолжает своё выполнение различным образом. Размер текущего файла также равен 0х1200. Можно сделать предположение, что данный экземпляр программы представляет собой исходный файл вируса, что впоследствии подтвердится. Смотрим, что выполниться, если же размер файла отличен от 0х1200:

Сначала программа создаёт временный файл, а затем расшифровывает некоторую область памяти в следующем цикле:

00401152>MOV AL, BYTE PTR DS:[ESI]

00401154 XOR AL, 3

00401156 MOV BYTE PTR DS:[ESI],AL

00401158 INC ESI

00401159^LOOPD SHORT Virus.00401152

Шифрованием является простой побайтовый XOR. Какую область памяти программа расшифровывает? Этой областью оказывается буфер, в который программа предварительно записала содержание текущего исполняемого файла, причём расшифровка начинается со смещения 0х1200. Вы ещё не догадались что происходит? Смотрим далее – после этого программа записывает расшифрованные данные во временный файл и запускает последний на исполнение, передавая текущие параметры командной строки. Теперь можно с уверенностью сказать, что данная программа самым примитивным образом заражает исполняемые файлы, шифруя их содержимое и сбрасывая полученные зашифрованные данные в оверлей собственного файла, который записывается вместо заражаемой программы. А при запуске вирус расшифровывает оверлей, сохраняет его во временный файл и запускает исходную программу на исполнение. Просто и банально.

Узнаем теперь, что же происходит дальше:

Дальше программа запускает ещё один поток и ждёт завершения, как исходной программы, так и созданного потока. Что же происходит в созданном потоке?

Программа определяет, запущена ли уже в системе копия вируса путём проверки существования глобального идентификатора «MTV-2» — если он существует, значит, копия вируса уже запущена, иначе этот идентификатор создаётся, после чего вызывается ещё одна функция вируса. Посмотрим, что она делает:

Как и ожидалось это функция рекурсивного обхода папок на диске, которая заражает все найденные исполняемые файлы. Меня здесь заинтересовало два момента. Первый – функция переходит к обработке следующего файла только через 5 секунд из-за задержки WinAPI функцией Sleep. Из этого следует что вирус будет очень-очень медленно перебирать все файлы и все время висеть в списке задач. Ну и следующий код:

004013C6 PUSH Virus.004032D6 

004013CB CALL JMP.&KERNEL32.GetSystemTime 

004013D0 CMP WORD PTR DS:[4032DC], 0D

004013D8 JNZ SHORT Virus_Wi.004013E6

004013DA PUSH Virus.004031A6 

004013DF CALL JMP.&KERNEL32.DeleteFileA

Если сегодня 13 число любого месяца, то функция удаляет все найденный файлы… На этом весь бедный функционал данного вируса и заканчивается.

Выводы: сегодня мы разобрали простой в устройстве и быстрый в написании вирус, создание которого не требует специальных знаний и под силу практически любому начинающему программисту. При этом функционал вируса так же крайне беден. Видно, что у программиста не было никакой тяги к творчеству — всё было нацелено на быстрый результат. Хотя… Я совершенно не могу понять для какой цели данный вирус, вообще, предназначен? Все-таки за 10 лет вредоносное ПО сделало большой шаг в своём развитии.

Спасибо за внимание.

By Hacker

Report Page