Добрый день.
Ранее использовали версию VMProtect 2.13.5
В проекте использовалась только мутация, необходимые функции были обвернуты в VMProtectBeginMutation/VMProtectEnd
Размер файла после обработки увеличивался в среднем на 150%
Попробовали новую версию VmProtect 3.4
Размер файла после обработки увеличивался на 750%
В настройках отключены: защита памяти, защита импорта, защита ресурсов,
упаковка откочена
в списке “функции для защиты” представлены все обвернутые для мутации функции.
Но такое впечатление что выполняется полная виртуализация, с максимальной защитой.
Или такое резвое увеличение размера при переходе от 2.13.5 к 3.4 - норма?
я хотел бы знать - это фича такая в новой версии, или просто к мутации там добавляется еще и виртуализация, которая включена по умолчанию?
просто раньше 670 кб - превращалось в ~900 кб
а теперь 670 кб - превращается в ~5 Мб
Прочитайте инструкцию к vmprotect. Какого-то особого смысла использовать только mutation нет (темболее выбирать для важных частей кода mutation не стоит, т.к. после дампа образа .exe из memory, разница между исходным кодом .exe будет минимальна).
Тип компиляции - выбрать тип компиляции объекта. Правильный выбор способа защиты от изучения и взлома для каждого защищаемого объекта (процедуры, функции, фрагмента кода) обеспечит оптимальное соотношение между защищенностью кода и его быстродействием. VMProtect позволяет пользователю установить следующие типы компиляции для каждого защищаемого объекта:
Мутация. Исполняемый код видоизменяется на уровне команд процессора - существующие команды видоизменяются, добавляются различные мусорные команды и т.д. Данный тип компиляции относительно слабо защищает обрабатываемый код от взлома и анализа и главным образом препятствует определению обрабатываемых функций с помощью сигнатурных анализаторов (PEiD+KANAL, IDA+FLIRT и т.д.). Этот тип компиляции целесообразно применять при защите библиотечных функций, так как они, как правило, не нуждаются в защите от взлома и анализа и достаточно будет только изменить их сигнатуры, чтобы взломщик не смог автоматически определить, какие именно библиотеки используются в приложении. При использовании мутации степень защиты от взлома и анализа низкая, скорость исполнения кода высокая.
Виртуализация. Исполняемый код переводится в байт-код, исполняемый на виртуальной машине. Данный тип компиляции следует применять для всех критичных участков кода, где помимо противодействия взлому и анализу важна скорость работы. При использовании виртуализации степень защиты от взлома и анализа средняя, скорость исполнения кода средняя.
Ультра (мутация + виртуализация). Исполняемый код видоизменяется на уровне команд процессора и уже после этого переводится в байт-код, исполняемый на виртуальной машине. Данный тип компиляции следует применять для всех участков кода, где не важна скорость работы. Степень защиты от взлома и анализа высокая, скорость исполнения кода низкая.
Прочитайте инструкцию к vmprotect. Какого-то особого смысла использовать только mutation нет
Меня вполне устраивала мутация с ее фичами: небольшой размер файла + скорость работы. Если бы мне нужна была виртуализация или ультра - то я бы ее использовал и вопросов не возникало.
Дальше больше:
есть два файла компиленные из одних и тех же исхожников:
file1.exe и
file2.exe немного с другими Define и функциями.
Использовался следующий файл настройки проекта file1.exe.vmp
Я же писал в первом посте что так и сделал.
Я хочу услышать коментарии Ивана. В алгоритме работы программы явно что то не учитывается. Компилятор VS 2008 c последними сервис паками.
Еще эксперимент:
беру file1.exe - который компилится правильно (только мутация) - делаю “добавить функцию” выбираю EntryPoint - по умолчанию выставлено Virtualization - и да программа превращается в 1,5 Мб, исключаю EntryPoint из списка компиляции - все приходит в норму - мутация и 900 кб
с файлом file2.exe такой фокус не прокатывает - всегда, хочешь не хочешь 5 Мб на выходе. Тоесть я так понимаю виртуализируются абсюлютно все функции которые смог распознать анализатор. Отсюда делаю вывод что анализатор который принимает решение о методе защиты функции дает сбой - и применяет “виртуализацию” там где не должен.
В 3-ке по сравнению с 2-кой совершенно другая ВМ, которая генерит более объемный байткод + для PE-32 добавляется 64-х битная ВМ для вызовов виндовых сервисов минуя ntdll.
Но такое впечатление что выполняется полная виртуализация, с максимальной защитой.
Или такое резвое увеличение размера при переходе от 2.13.5 к 3.4 - норма?
Функции из SDK используются? Если нет, то пришлите файл.
Спасибо за Ваш ответ. теперь все стало на свои места.
Да действительно в file2.exe использовал одну функцию из SDK - VMProtectIsVirtualMachinePresent()
Если ее не использовать - тогда да - файл приемлимого размера с только мутацией.
Собственно один из причин использования более новой версии VMProtect, была эта функция, т.к. в старой версии функция не всегда определяла наличии виртуальной машины.
Я так понимаю эта такая фича - если используются функции из SDK то там полная виртуализация ?
Я так понимаю эта такая фича - если используются функции из SDK то там полная виртуализация ?
Если используются функции из SDK (кроме маркеров VMProtectBeginXXX и VMProtectIsProtected), то VMProtect добавляет к файлу свой рантайм, код которого в большинстве случаев завиртуализирован (т.е. добавляется еще и ВМ).