Комментарии 5
В этом месяце, кстати, утекли исходники VMProtect, так что реверсить станет попроще.
Меня эти исходники только путают. И без них легко разобраться.
Автор поковырялся, в принципе, неплохо.
Добавлю, что в качестве 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 докладывался, да и лично рассказывал. Не пользовали?
Анализ виртуальной машины на примере VMProtect. Часть 1