Как стать автором
Обновить

Анализ виртуальной машины на примере VMProtect. Часть 1

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров5.7K
Всего голосов 1: ↑1 и ↓0+1
Комментарии5

Комментарии 5

Меня эти исходники только путают. И без них легко разобраться.

Автор поковырялся, в принципе, неплохо.
Добавлю, что в качестве MAIN_LOOP в большинстве версий выступает не mov r32, m32[r32 * 4], а jmp [eax * 4 + m32]
В обоих случаях в AL - код виртуальной инструкции, а ESI адресует начало полотна машинных инструкций, ей соответствующих.
Если распаковать образец, адрес ServiceMain - 0x40AC48
Функция очень знакомая, в начале выполнения создает именованный мьютекс Global\RunWaitForInitiateSystemService.
По нему "палится" пара десятков троянов этого типа, например
68ced722e9139bfb8bb26ab5b4ade01622b4d800394ea5fb208aaaba6bd95e60

Насчет jmp вместо mov в MAIN_LOOP - спасибо за замечание, встречал такой вариант, но конкретно в схожих образцах попадались именно реализации с mov, видимо, все зависит от версии протектора.
Про ESI - да, это как Instruction Pointer, если проводить аналогии с ISA.
По поводу мьютекса - получается нелохой IoC далеко не в низу пирамиды боли, так что если бы мы такую активность исследовали во время проведния данной вредоносной кампании, данные о мьютексе были бы очень полезны:)

Мне кажется, переход используется чаще. Да и в той же VM ENIGMA тоже jmp [edx * 4 + m32]. А для VMPROT вспоминается, что Ильфак в свое время сделал надстройку-скрипт для разбора VM. Он на одном из VB докладывался, да и лично рассказывал. Не пользовали?

Нет, такую надстройку не встречал, но интересно звучит, буду иметь в виду, спасибо, и доклад с VB поищу.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации