Огромный размер программы после перехода к новой версии

Issues related to VMProtect
Post Reply
Cyber
Posts: 48
Joined: Mon Feb 08, 2010 3:29 pm

Огромный размер программы после перехода к новой версии

Post by Cyber »

Добрый день.
Ранее использовали версию VMProtect 2.13.5
В проекте использовалась только мутация, необходимые функции были обвернуты в VMProtectBeginMutation/VMProtectEnd
Размер файла после обработки увеличивался в среднем на 150%
Попробовали новую версию VmProtect 3.4
Размер файла после обработки увеличивался на 750%
В настройках отключены: защита памяти, защита импорта, защита ресурсов,
упаковка откочена
в списке "функции для защиты" представлены все обвернутые для мутации функции.

Но такое впечатление что выполняется полная виртуализация, с максимальной защитой.

Или такое резвое увеличение размера при переходе от 2.13.5 к 3.4 - норма?
YouBestClient
Posts: 14
Joined: Tue Mar 17, 2020 8:47 am

Re: Огромный размер программы после перехода к новой версии

Post by YouBestClient »

Включите упаковку, если для вас важен вес файла
Cyber
Posts: 48
Joined: Mon Feb 08, 2010 3:29 pm

Re: Огромный размер программы после перехода к новой версии

Post by Cyber »

Включите упаковку, если для вас важен вес файла
Мне важно все в комплексе.

я хотел бы знать - это фича такая в новой версии, или просто к мутации там добавляется еще и виртуализация, которая включена по умолчанию?
просто раньше 670 кб - превращалось в ~900 кб
а теперь 670 кб - превращается в ~5 Мб
JackGrenness
Posts: 10
Joined: Wed Jan 16, 2019 10:54 am

Re: Огромный размер программы после перехода к новой версии

Post by JackGrenness »

Cyber wrote:
Включите упаковку, если для вас важен вес файла
Мне важно все в комплексе.

я хотел бы знать - это фича такая в новой версии, или просто к мутации там добавляется еще и виртуализация, которая включена по умолчанию?
просто раньше 670 кб - превращалось в ~900 кб
а теперь 670 кб - превращается в ~5 Мб
Прочитайте инструкцию к vmprotect. Какого-то особого смысла использовать только mutation нет (темболее выбирать для важных частей кода mutation не стоит, т.к. после дампа образа .exe из memory, разница между исходным кодом .exe будет минимальна).

****

Тип компиляции - выбрать тип компиляции объекта. Правильный выбор способа защиты от изучения и взлома для каждого защищаемого объекта (процедуры, функции, фрагмента кода) обеспечит оптимальное соотношение между защищенностью кода и его быстродействием. VMProtect позволяет пользователю установить следующие типы компиляции для каждого защищаемого объекта:

Мутация. Исполняемый код видоизменяется на уровне команд процессора - существующие команды видоизменяются, добавляются различные мусорные команды и т.д. Данный тип компиляции относительно слабо защищает обрабатываемый код от взлома и анализа и главным образом препятствует определению обрабатываемых функций с помощью сигнатурных анализаторов (PEiD+KANAL, IDA+FLIRT и т.д.). Этот тип компиляции целесообразно применять при защите библиотечных функций, так как они, как правило, не нуждаются в защите от взлома и анализа и достаточно будет только изменить их сигнатуры, чтобы взломщик не смог автоматически определить, какие именно библиотеки используются в приложении. При использовании мутации степень защиты от взлома и анализа низкая, скорость исполнения кода высокая.

Виртуализация. Исполняемый код переводится в байт-код, исполняемый на виртуальной машине. Данный тип компиляции следует применять для всех критичных участков кода, где помимо противодействия взлому и анализу важна скорость работы. При использовании виртуализации степень защиты от взлома и анализа средняя, скорость исполнения кода средняя.

Ультра (мутация + виртуализация). Исполняемый код видоизменяется на уровне команд процессора и уже после этого переводится в байт-код, исполняемый на виртуальной машине. Данный тип компиляции следует применять для всех участков кода, где не важна скорость работы. Степень защиты от взлома и анализа высокая, скорость исполнения кода низкая.
Cyber
Posts: 48
Joined: Mon Feb 08, 2010 3:29 pm

Re: Огромный размер программы после перехода к новой версии

Post by Cyber »

Прочитайте инструкцию к vmprotect. Какого-то особого смысла использовать только mutation нет
Меня вполне устраивала мутация с ее фичами: небольшой размер файла + скорость работы. Если бы мне нужна была виртуализация или ультра - то я бы ее использовал и вопросов не возникало.
Дальше больше:
есть два файла компиленные из одних и тех же исхожников:
file1.exe и
file2.exe немного с другими Define и функциями.

Использовался следующий файл настройки проекта file1.exe.vmp

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<Document>
  <Protection InputFileName="file1.exe" Options="16384" CheckKernelDebugger="false" CompressionMode="0" VMCodeSectionName=".text" VMExecutorCount="1" OutputFileName="" WaterMarkName="" RunParameters="">
    <Messages/>
    <Folders/>
    <Procedures>
    </Procedures>
  </Protection>
  <Script IncludedInCompilation="true"></Script>
</Document>
Первый файл компилится нормально - применяется только мутация - размер увеличивается до 900 KB
Для второго файла такойже file2.exe.vmp
только с другим

Code: Select all

 <Protection InputFileName="file2.exe" 
Второй компилится по полной защите - видимо с виртуализайией. размер увеличивается до 5 МB.
JackGrenness
Posts: 10
Joined: Wed Jan 16, 2019 10:54 am

Re: Огромный размер программы после перехода к новой версии

Post by JackGrenness »

Cyber wrote:
Второй компилится по полной защите - видимо с виртуализайией. размер увеличивается до 5 МB.
в "Опции" сделайте первые 4 пункта : "Нет" (защита ресурсов можете поставить "Да")
file_size.jpg
file_size.jpg (77.72 KiB) Viewed 5727 times
Cyber
Posts: 48
Joined: Mon Feb 08, 2010 3:29 pm

Re: Огромный размер программы после перехода к новой версии

Post by Cyber »

в "Опции" сделайте первые 4 пункта : "Нет"
Untitled.png
Untitled.png (39.89 KiB) Viewed 5721 times
Я же писал в первом посте что так и сделал.
Я хочу услышать коментарии Ивана. В алгоритме работы программы явно что то не учитывается. Компилятор VS 2008 c последними сервис паками.
Еще эксперимент:
беру file1.exe - который компилится правильно (только мутация) - делаю "добавить функцию" выбираю EntryPoint - по умолчанию выставлено Virtualization - и да программа превращается в 1,5 Мб, исключаю EntryPoint из списка компиляции - все приходит в норму - мутация и 900 кб

с файлом file2.exe такой фокус не прокатывает - всегда, хочешь не хочешь 5 Мб на выходе. Тоесть я так понимаю виртуализируются абсюлютно все функции которые смог распознать анализатор. Отсюда делаю вывод что анализатор который принимает решение о методе защиты функции дает сбой - и применяет "виртуализацию" там где не должен.

И да, в версии 3.5 таже проблема.
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Огромный размер программы после перехода к новой версии

Post by Admin »

Попробовали новую версию VmProtect 3.4
В 3-ке по сравнению с 2-кой совершенно другая ВМ, которая генерит более объемный байткод + для PE-32 добавляется 64-х битная ВМ для вызовов виндовых сервисов минуя ntdll.
Но такое впечатление что выполняется полная виртуализация, с максимальной защитой.
Или такое резвое увеличение размера при переходе от 2.13.5 к 3.4 - норма?
Функции из SDK используются? Если нет, то пришлите файл.
Cyber
Posts: 48
Joined: Mon Feb 08, 2010 3:29 pm

Re: Огромный размер программы после перехода к новой версии

Post by Cyber »

Спасибо за Ваш ответ. теперь все стало на свои места.

Да действительно в file2.exe использовал одну функцию из SDK - VMProtectIsVirtualMachinePresent()
Если ее не использовать - тогда да - файл приемлимого размера с только мутацией.
Собственно один из причин использования более новой версии VMProtect, была эта функция, т.к. в старой версии функция не всегда определяла наличии виртуальной машины.
Я так понимаю эта такая фича - если используются функции из SDK то там полная виртуализация ?
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Огромный размер программы после перехода к новой версии

Post by Admin »

Я так понимаю эта такая фича - если используются функции из SDK то там полная виртуализация ?
Если используются функции из SDK (кроме маркеров VMProtectBeginXXX и VMProtectIsProtected), то VMProtect добавляет к файлу свой рантайм, код которого в большинстве случаев завиртуализирован (т.е. добавляется еще и ВМ).
Post Reply