C++ Гайд Используем VMP правильно

bluedream.ltd
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
3,006
Реакции[?]
1,277
Поинты[?]
2K
На дворе 2022 год, а люди все еще использует вмп только для того чтобы протектить EntryPoint или пару тройку функций. По какой-то причине люди до сих пор не знают отличий между виртой, мутацией и ультра пресетом. Также люди думают что в вмп не работает антиотладка, но пожалуй стоило бы развеить эти мифы и пояснить как на самом деле работает вмп.
Глава 1. Вступление.
Для начала, что из себя представляет VMProtect? Если вы думаете, что это плохой инструмент, то сейчас я вас удивлю, его используют такие читы как:
skeet, neverlose, interium, aimware, onetap и множество других. Если вы думаете что эти проекты стали бы использовать бесполезное говно (насчет интериума хз)))), то вы ошибаетесь.
Вмп это многофункциональный инструмент, который поможет усложнить анализ вашей программы многократно.
Чтобы вмп действительно усложнял анализ, нужно правильно его использовать, а как это сделать я расскажу далее.
Глава 2. Какие у нас вообще варианты?
Мы будем рассматривать именно программы написанные на языке C++, так как данный язык будем честны самый лучший в нашей читерской сфере.
Есть два пути с помощью которых можно улучшить импакт вносимый вмп.
Способ 1. Без использования VMP SDK.
Идем в настройки проекта -> Компоновщик -> Создавать сведения об отладке.

Данная настройка будет создавать pdb файл в котором будет храниться информация, которую вмп будет использовать для обнаружения функций для последующего наложения на них виртуализации и подобного.

Как вы видите вместо одной функции EntryPoint у нас появились чуть ли не все что вызывается в нашем сурсе.
Все что остается сделать это выбрать какие функции вы будете накрывать и какими видами протекта, ниже объясню какой лучше использовать и в каких случаях.
Далее во вкладке опции в протекторе выставляем все по желанию.
Первые 4 параметра во вкладке файл отвечают за основные настройки.
Защита памяти ->
Данная функция используется для своеобразной защиты от патчинга вашего файла, но исключительно самого бинарника. Но использовать эту функцию на пару с мануалмапом (некоторые виды мануалмапа) или runpe у вас не выйдет так как вмп будет говорить что файл поврежден.
Защита импорта ->
Скрывает импорты в вашей программе.
Защита ресурсов ->
Тут я думаю очевидно как и в случае с импортами.
Упаковать файл ->
Позволяет уменьшить размер нашего файла после протекта.
Дальше рассмотрим бегло то что может пригодится.
Обнаружение отладчика без использования sdk дерьмо полное, вмп будет обнаруживать его только при условии что вы запустите файл в отладчике, если аттачить в уже запущенный, то считайте что никакого обнаружения - нет.
Удалять отладочную информацию ->
полезная штука, думаю вам знакомо когда открываешь файл в ide, а он просит у тебя pdb файлик с названием сурса, вот с помощью этого мы от этого избавимся, сорри за тафталогию.
Сегменты BM, так как вмп создает сегменты в промутированном коде или например там где в целом протектор поднасрал мы можем выбрать название этих сегментов, ну к примеру если вы рофлер и фанат интериума, то можно поставить темида например). Остальное рассматривать не вижу смысла.
Плюсов у данного способа в сравнении с тем что мы рассмотрим далее я не вижу. Разве что это проще и быстрее, не более.
Комплексную и нормальную защиту из этого не построишь.
Способ 2. VMProtectSDK.
ВМП как и темида предоставляет собственное апи для нашей программы.
https://vmpsoft.com/support/user-manual/working-with-vmprotect/preparing-a-project/sdk-functions/
Бля вмп вы че там ебанулись?

Ну раз уж сайт вмп пока лежит, придется пояснять самому.
Рекомендую прочитать предыдущий способ, так как в нем я поясняю за функции протектора.
Во первых, сдк находится в папке с самим протектором.
Папка Lib -> библиотеки и длл файлы для проекта.
Папка Include -> заголовочные файлы с определениями функций.
В моем случае я беру заголовочный файл для C и библиотеку для WIndows x64.
После подключения сего деяния в проект, мы можем создать пару дефайнов для удобства.
говно код???:
Код:
#define ENABLE_VMP



#ifdef ENABLE_VMP

#define VMP_ULTRA VMProtectBeginUltra

#define VMP_VIRT VMProtectBeginVirtualization

#define VMP_MUTATION VMProtectBeginMutation

#define VMP_END VMProtectEnd;

#else

#define VMP_ULTRA(string)

#define VMP_VIRT(string)

#define VMP_MUTATION(string)

#define VMP_END

#endif
Это пригодится нам для быстрого отключения вмп в случае чего.

VMProtectBegin(...) данная функция создает маркер, в зависимости от самой функции мы наложим на определенный участок кода виртуализацию, мутацию, либо и то и другое. Согласитесь это уже выглядит гораздо лучше, чем просто выбор функций.
Вызов довольно прост: VMP_ULTRA("имя маркера")
тоже самое касается вирты и мутации. Чтобы вмп понял где нужно закончить наложение протекта используется VMProtectEnd, оно указывает где заканчивается блок защищаемого кода. Вызываем также через VMP_END.
И так. С маркерами разобрались. Я думаю вы сами сможете определить что в какую функцию сувать, а стоп нет. Не сможете. Ведь гайд уже подходит к завершению, а я до сих пор не расписал отличий между мутацией и виртой. Давайте это исправим.
Мутация - используется там где нужна максимальная оптимизация и быстродействие, но при этом нужна хотя бы какая-то защита. На сложность анализа почти никак не влияет.
Виртуализация - уже изрядно убивает производительность, но при этом многократно усложняет анализ.
Ультра (виртуализация + мутация) - Убивает оптимизацию намертво, но при этом анализировать даже отдельные участки кода становится довольно тяжкой задачей.
Теперь я думаю вы сами решите какие функции чем крыть.
И так, неужели ради одних лишь маркеров мы подключали сдк? Конечно нет, если сайт вмп встанет вы можете ознакомится со всеми функциями там, но я расскажу о трех из них.
VMProtectIsDebuggerPresent(bool) ->
Данная функция принимает бул аргумент и возвращает бул. Аргумент влияет на то будет ли вмп отслеживать кернел отладчики, то есть драйверные.
Данная функция весьма неплоха, вызывать также можете где вам угодно в коде и если она вернет true, то уже делать ваши темные дела. Да, использовать как полноценный антидебаг вряд ли стоит, но от сциллыхайд точно защитит) И в отличии от обнаружения устанавливаемого в протекторе, ловить оно будет там где вы будете вызывать в коде.
VMProtectIsValidImageCRC ->
Гроза всех пастеров на районе. Если модуль смаплен или запущен через ранпе, то юзать нет смысла. Проверяет CRC Image и служит подобием защиты от патчинга. Реально опасный хрен.
VMProtectIsVirtualMachinePresent ->
Проверяет запущена ли программа в виртуальной среде. VMWare, Sandboxie и т.д.
Только лишь благодаря этим трем функциям (больше нету ничего интересного) и маркерам вы можете усложнить кряк вашей программы в огромное количество раз. Но это все еще не полноценная защита, но она послужит весьма огромной занозой в заднице реверсера при правильном арбузинге всего этого.

Кряк последней версии вмп: https://yougame.biz/threads/258142/
 
Последнее редактирование:
Сверху Снизу