Идентификация упаковщика и автоматическая распаковка - часть 4
Итак, вызываем soft-ice и устанавливаем точки останова на все потенциально опасные функции, а также на все те функции, которые обычно присутствуют в стартовом коде (см. "стартовый код"). Если вирус написан на языке высокого уровня, мы захватим выполнение еще до начала выполнения функции main. В противном случае, отладчик всплывет при первой попытке выполнения потенциально опасной функции.
Отладчики, устанавливающие глобальные точки останова (и soft-ice в их числе), всплывают независимо от того, какое приложение их вызывает, поэтому всегда обращайте внимание на правый нижний угол экрана, в котором soft-ice выводит имя процесса, "потревожившего" отладчик и, если это не исследуемый вами процесс, а что-то еще, вы можете смело покинуть отладчик, дожидаясь его очередного всплытия.
основные функции стартового кода | основные потенциально опасные функции |
GetVersion | CreateFileA, |
GetVersionExA | RegOpenKeyA |
GetCommandLineA | RegOpenKeyExA |
GetModuleHandleA | LoadLibraryA |
GetStartupInfoA | FindFirstFileA |
SetUnhandledExceptionFilter | FindFirstFileExA |
Таблица 1 Функции, помогающие перехватить управление у распакованного вирусного кода, получившего управление
Давайте продемонстрируем технику ручной распаковки на примере анализа вируса I-Worm.Sobig.f. PE-SCAN показывает, что он упакован полиморфным упаковщиком TeLock 0.98 (http://egoiste.cjb.net/), однако найти готовый распаковщик в Интернете для этой версии не удается (те, что есть, не распаковывают файл совсем или распаковывают его неправильно). Пошаговая трассировка распаковщика (равно как и попытки анализа алгоритма распаковки) заводят нас в никуда, ибо код оказывается слишком сложен для начинающих (а вот опытные программисты получают от его реконструкции настоящее удовольствие, ибо упаковщик весьма неплох). Просмотр дампа в HEX-редакторе также не показывает ничего подозрительного. Тупик…
А теперь на сцену выходит наш прием с контрольными точками: и исследуемая программа тотчас ловится на GetModuleHandleA и CreateFileA.