Всем доброго времени дня! В данной статье мы проведём статический анализ одного из последних образцов p2p-червя, имеющего по классификации Лаборатории Касперского наименование Palevo. Акцент при этом будет сделан на его защитную оболочку.
Для начала пара общих слов об анализе исполняемых файлов. Всего выделяется два основных типа: статический и динамический. Первый вариант представляет собой работу с образцом (далее семплом от английского sample) без его запуска. Здесь в первую очередь подразумевается использование анализаторов файлов, реверсинг в дизассемблере/декомпиляторе. Самые популярные анализаторы файлов в наши дни — PEiD и Protection ID, однако несомненным преимуществом первого является поддержка удобных плагинов. Из дизассемблеров же нельзя не выделить всемогущую IDA Pro и незаменимый Hiew.
Динамический анализ делится на две крупные составляющие — запуск семпла под программами мониторинга или в песочнице (sandbox), и исполнение под отладчиком. Мониторы могут контролировать доступ к файловой системе, реестру, сети, показывать выполненные API-функции, перехваченные функции ядра и т.д. Самые знаменитые — Process Monitor, включивший в себе Filemon и Regmon, Wireshark (бывший Ethereal), RkU и многие-многие другие. Из отладчиков хочется выделить OllyDbg и WinDbg, многим нравится Syser. К сожалению, поддержка знаменитого SoftICE давно прекращена, поэтому от его использования рекомендуется постепенно отходить в пользу динамично развивающегося WinDbg.
Итак, вернёмся к нашему топику. Данный червь появился ориентировочно в 2009 году и стал знаменит в соответствующих кругах благодаря двум особенностям — качественно продуманному полиморфизму и антиэмуляции. Два кита, на которых держится защита данного червя — изменяющийся от семпла к семплу декриптор и огромное количество мусорных функций, которые
Для начала натравливаем на него PEiD, ничего не находим. Вывод — перед нами ассемблер.
Загружаем семпл в IDA, и перед нашими глазами предстаёт замечательная картина огромного множества функций:

Сколько мусора! Непростая задача вручную найти в этом многообразии декриптор, но мы попытаем счастье. Т.к. декрипторы в абсолютном большинстве случаев выглядят в виде циклов, ищем что-либо подобное. В этом нам поможет замечательный инструмент всё той же IDA — построение графиков. Наконец, наши поиски увенчиваются успехом:

Декриптор достаточно прост, но он также меняется от семпла к семплу:

и

Помимо вышеописанных сложностей присутствуют также довольно простые способы обхода простейшей эмуляции.

После распаковки можно переходить на оригинальный код. Однако, это уже тема для статьи другого формата.
Введение
Для начала пара общих слов об анализе исполняемых файлов. Всего выделяется два основных типа: статический и динамический. Первый вариант представляет собой работу с образцом (далее семплом от английского sample) без его запуска. Здесь в первую очередь подразумевается использование анализаторов файлов, реверсинг в дизассемблере/декомпиляторе. Самые популярные анализаторы файлов в наши дни — PEiD и Protection ID, однако несомненным преимуществом первого является поддержка удобных плагинов. Из дизассемблеров же нельзя не выделить всемогущую IDA Pro и незаменимый Hiew.
Динамический анализ делится на две крупные составляющие — запуск семпла под программами мониторинга или в песочнице (sandbox), и исполнение под отладчиком. Мониторы могут контролировать доступ к файловой системе, реестру, сети, показывать выполненные API-функции, перехваченные функции ядра и т.д. Самые знаменитые — Process Monitor, включивший в себе Filemon и Regmon, Wireshark (бывший Ethereal), RkU и многие-многие другие. Из отладчиков хочется выделить OllyDbg и WinDbg, многим нравится Syser. К сожалению, поддержка знаменитого SoftICE давно прекращена, поэтому от его использования рекомендуется постепенно отходить в пользу динамично развивающегося WinDbg.
Краткая предыстория
Итак, вернёмся к нашему топику. Данный червь появился ориентировочно в 2009 году и стал знаменит в соответствующих кругах благодаря двум особенностям — качественно продуманному полиморфизму и антиэмуляции. Два кита, на которых держится защита данного червя — изменяющийся от семпла к семплу декриптор и огромное количество мусорных функций, которые
- затрудняют анализ и детектирование
- увеличивают время эмуляции
В бой
Для начала натравливаем на него PEiD, ничего не находим. Вывод — перед нами ассемблер.
Загружаем семпл в IDA, и перед нашими глазами предстаёт замечательная картина огромного множества функций:

Сколько мусора! Непростая задача вручную найти в этом многообразии декриптор, но мы попытаем счастье. Т.к. декрипторы в абсолютном большинстве случаев выглядят в виде циклов, ищем что-либо подобное. В этом нам поможет замечательный инструмент всё той же IDA — построение графиков. Наконец, наши поиски увенчиваются успехом:

Декриптор достаточно прост, но он также меняется от семпла к семплу:

и

Помимо вышеописанных сложностей присутствуют также довольно простые способы обхода простейшей эмуляции.

После распаковки можно переходить на оригинальный код. Однако, это уже тема для статьи другого формата.