Обзор на малоизвестный протектор Alienyze Protector v1.4
На просторах интернета я случайно наткнулся на малоизвестный и очень интересный протектор под названием Alienyze Protector v1.4 (официальный сайт), который продавался за 49$, описание было очень интересным, но малоговорящим:
- Anti-Debugger techniques that detect and fool present debuggers
- Anti-VM techniques that detect sandbox & virtualized environments
- Protection from disassemblers and software analysis tools
- Hardware ID locking for making applications machine dependant
- Integrity checks that detect code patching & tampering
- Customizable compression and encryption of the applications code
- Real time protection in running application
- Project configuration settings Load, Save support
- Multilingual user interface, language selection support
- Command line support
- And many more
Я скачал демо-версию, чтобы посмотреть, что он из себя представляет. В описании не написано, но я скажу, что в демо-версии скорее всего присутствуют полноценные функции "Anti-Debugger", "Anti-VM", "Protection from disassemblers and software analysis tools", "Integrity checks that detect code patching & tampering" и "Real time protection in running application", то есть все самые важные нам функции, которые нужны для обзора протектора.
Первый взгляд
Скачав демо-версию протектора, перед глазами появился достаточно обычный но приятный интерфейс:
Доступный функционал следующий:
Написав тестовый код на FASM и собрав его:
format PE GUI
entry start
include 'win32a.inc'
section '.text' code readable executable
start:
push 0
push 0
push 0
push 0
call dword[MessageBox]
push 0
call dword[ExitProcess]
section '.idata' import readable writeable
library kernel, 'kernel32.dll',\
user, 'user32.dll'
import kernel,\
ExitProcess, 'ExitProcess'
import user,\
MessageBox, 'MessageBoxA'
section '.relocs' readable writeable fixups
... я сразу же столкнулся с проблемой. Alienyze не понимает программы, собранные на FASM, и просто ломается без каких-либо ошибок или сообщений, просто падает. Грустно. Видать, кривой PE-парсер.
Что-ж, пришлось взять для теста готовую программу, написанную на C/C++. С ней "пришелец" справился.
После запуска программы, появляется окно о том, что программа защищена демо-версией Alienyze, после чего успешно отрабатывает оригинальный код.
Техники защиты
Потыкав в отладчике сгенерированную программу, огорчило то, что в ней слишком мало кода... В том смысле, что Alienyze недостаточно хорошо морфит код. Конечно, странно ожидать от него какой-то мощной виртуальной машины, как у Themida или VMProtect, но всё же... Кода слишком мало, и он завязан на паре циклов, в которых идёт расшифровка кода, а затем задержки с постоянными проверками на наличие отладчика.
Я не слишком силён в криптографии, поэтому даже не буду пытаться сказать, какое шифрование выбрано за основу, но вроде с этим там всё прилично.
А вот что снова расстроило - так это снова отсутствие каких-либо морферов на оригинальный код. Оригинальный код просто берёт, и расшифровывается прямо по адресу 0x401000, да-да! А после чего запускается в потоке. Причём увидеть и сдампить код очень просто, но об этом чуть позже...
Стоит сказать и немного хорошего про данный протектор.
Прежде всего, после первых попыток отладки я столкнулся с приятными трудностями - отладчик постоянно обнаруживался и программа закрывалась, когда я с этим справился - на голову свалилось то, что точки останова не работали, программа закрывалась при получении прерывания STATUS_BREAKPOINT.
Подключиться к программе тоже невозможно, все эти проверки работают в цикле, и при подключении отладчиком или CheatEngine - программа немедленно закрывалась.
Проверки хеш-суммы и на всякие патчи также присутсвуют. При попытке изменить имя секции - программа выдавала сообщение "This application is corrupted and cannot be run".
Также протектор скрывает импорт-таблицу. Все импорты подгружаются динамически с помощью функций LoadLibrary
+GetProcAddress
, и адресуются функции через EBP, почти как у меня в шеллкодах.
Также данного протектора нет в сигнатурах анализаторов файлов. Например, DetectItEasy не смог определить протектор, и выдал лишь информацию о линковщике:
По поводу веса также положительно - вес с 9 килобайт увеличивается всего на 12.44 килобайт с учётом включённой функции сжатия внутри протектора на установке "Medium". Возможно, в платной версии можно сжимать ещё больше.
Присутствует в протекторе и защита на запуск внутри виртуальной среды. Она реализована с помощью cpuid:
При обнаружении виртуальной среды выдаёт сообщение - "Sorry, this application cannot run under this environment".
Обнаружение отладчика реализовано как в памяти, так и при подключении к процессу, один из методов - с помощью NtQueryObject
, но до конца я это не разбирал.
Инструкция по обходу
А теперь то, с чего я и затеял эту статью - написать инструкцию по отладке программ, защищённых Alienyze Protector.
Дело в том, что в интернете нет вообще статей на подобную тему, протектор, возможно, в глаза никто не видел, а поэтому я буду тут первооткрывателем. Несмотря на свою простоту, он может всё же может быть где-то использован, а поэтому обязательно кто-то должен написать инструкцию по его отладке.
Закидываем программу в отладчик, и активируем ScyllaHide на профиле "VMProtect x86/x64".
Нажимаем CTRL+G, и пишем NtCreateThreadEx
- с помощью данной функции протектор запускает поток на оригинальный расшифрованный код. Ставим точку останова на данной функции.
Готово. Запускаем исполнение, и ловим программу на исполнении функции NtCreateThreadEx
, вот и финиш - оригинальный код находится в регистре ECX
. Нажимаем CTRL+G, пишем ecx
, и оригинальный код прямо перед Вами.