Защита программы протектором VMProtect

Issues related to VMProtect
kalashnikovartem
Posts: 5
Joined: Thu Jun 16, 2011 11:12 pm

Защита программы протектором VMProtect

Post by kalashnikovartem »

Добрый день.

Я разработал серьезный продукт и хочу его защитить VMProtect(ом).
Меня интересуют следующие вопросы:

1. Ведете ли Вы какую-нибудь статистику по взломам программ, использующих VMProtect?
2. Чем защищен сам протектор?
3. В интернете неоднократно встречал ссылки на ломанный протектор, значит ли это,
что и защищенную программу будет легко взломать?

С уважением.
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

1. Да, мы отслеживаем попытки взлома программ наших клиентов. В некоторых случаях действительно защищенные программы ломают, но при более детальном изучении оказывается, что из всех возможностей VMProtect-а используется только упаковка или разработчик забыл включить в защиту критичный код.
2. VMProtect защищен собой.
3. Все что вы встречаете в инете - это лицензионные версии, купленные "добрыми" кардерами и выложенные в общий доступ. Это значит, что если программу трудно взломать, то её проще купить по ворованной кредитке :))
kalashnikovartem
Posts: 5
Joined: Thu Jun 16, 2011 11:12 pm

Re: Защита программы протектором VMProtect

Post by kalashnikovartem »

Спасибо за оперативный ответ.

Еще вопрос:

Все тонкости протектора и его использования знает только разработчик, т.е. - Вы.
Существует ли у Вас услуга "защита под ключ", т.е. я передаю Вам программу, а Вы делаете ей максимальную защиту, но при этом я плачу только за услугу, а не за лицензию на протектор?

С уважением.
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

Да, мы можем предложить вам такую услугу, но стоимость её будет в разы больше стоимости лицензии VMProtect.
kalashnikovartem
Posts: 5
Joined: Thu Jun 16, 2011 11:12 pm

Re: Защита программы протектором VMProtect

Post by kalashnikovartem »

А какие будут условия?
Что необходимо от меня кроме оплаты?
Должен ли я буду предоставить исходники программы?

С уважением.
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

Вы составляете ТЗ, в котором подробно описываете что и как вам необходимо защитить. По требованиям из вашего ТЗ будет ясно - нужен ли будет доступ к исходникам или нет. После согласования ТЗ мы выставляем вам счет на свои услуги и после его оплаты приступаем к работе.
kalashnikovartem
Posts: 5
Joined: Thu Jun 16, 2011 11:12 pm

Re: Защита программы протектором VMProtect

Post by kalashnikovartem »

Совсем недавно один из членов команды RED CREW выложил в своём блоге исходники загрузчика для обхода защиты VMProtect. Подробно об этом можно почитать здесь и здесь.

Вопрос к разработчикам: Что это значит для пользователей Вашего продукта и какие потенциальные угрозы это несет?
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

Да там особо и разбирать то нечего.
"And if you scroll down, you will see the typical VMP errors checks:" - крякер ошибочно думает, что сообщения типа "Can not find file...", "Can not read..." это сообщения защиты. На самом деле это код программы, который просто ничем не защищен. В результате имеем классический патч в виде безусловного перехода, который перепрыгивает все вызовы VMPrortectGetCurrentHWID и VMPrortectSetSerialNumber. Есть подозрение, что разработчик использовал в качестве защиты только одну упаковку и совершенно не позаботился о защите критичных участков своей программы (я даже не говорю про привязку кода к серийнику или хотябы минимальные проверки в виде VMProtectGetSerialNumberState) - поэтому имеем вот такой вот результат.
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

Хотелось бы на этом примере показать еще раз как не стоит организовывать защиту программы:
1. Нельзя использовать упаковку как единственный метод защиты. Основная фишка VMProtect - это все-таки виртуализация критичного кода программы и если из всего функционала использовать лишь упаковку, то снятие защиты будет не труднее чем снятие UPX.
2. Разработчики допускают классические ошибки вида:

Code: Select all

(some code)
...
VMProtectBegin('My marker');
int res = VMProtectSetSerialNumber(...);
VMProtectEnd();
if (res) {
 MessageBox(...,'Invalid serial number');
}
...
(some code)
Что мы здесь видим? Здесь мы видим, что результат работы защищенной функции (в нашем случае это VMProtectSetSerialNumber, но там может быть любая другая пользовательская функция) анализируется уже в незащищенном коде. Т..е. опять имеет классически патч в виде обхода маркера и самой проверки:

Code: Select all

(some code)
...
JMP @1 <- patch here
VMProtectBegin('My marker');
int res = VMProtectSetSerialNumber(...);
VMProtectEnd();
if (res) {
 MessageBox(...,'Invalid serial number');
}
@1:
...
(some code)
В данном примере в маркер должна попадать как минимум сама проверка "if (res)", а как максимум я бы порекомендовал засунуть в маркер еще и код, который инициализирует какие-либо объекты, без которых программа просто не сможет работать:

Code: Select all

VMProtectBegin('My marker');
(important code)
...
int res = VMProtectSetSerialNumber(...);
if (res) {
 MessageBox(...,'Invalid serial number');
}
...
(important code)
VMProtectEnd();
3. Рассмотрим еще один пример:

Code: Select all

int foo()
{
VMProtectBegin('foo');
return VMProtectGetSerialNumber(...);
VMProtectEnd();
}

void main()
{
VMProtectBegin('My marker');
(some code)
...
int res = foo();
if (res) {
 MessageBox(...,'Invalid serial number');
}
...
(some code)
VMProtectEnd();
}
Что мы здесь видим? Видим, что foo, результат которой нам очень важен, на самом деле оказывается не защищен из-за особенностей маркеров на захватывать прологи и эпилоги. Т.е. после виртуализации foo мы получим нечто подобное:

Code: Select all

push ebp
mov ebp, esp
sub ebp, XXXX
...
(virtualized code)
...
pop ebp
ret
Теперь крякеру не составит труда подкорретировать результат функции:

Code: Select all

...
pop ebp
xor eax, eax <- patch here
ret
Cinemaizer
Posts: 7
Joined: Sat Jun 18, 2011 3:31 pm
Location: Москва

Re: Защита программы протектором VMProtect

Post by Cinemaizer »

Подобные посты - "как не надо организовывать защиту" и топики - "общие рекомендации по организации защиты", надо подавать под грифом - крайне рекомендовано для прочтения, как отче наш :) Это я не сарказма ради, а вполне серьезно. Мне как начинающему пользователю VMProtect Ultimate например это очень пригодилось, хотя обратил внимание не сразу...
mtechno
Posts: 15
Joined: Wed Mar 28, 2012 7:49 am

Re: Защита программы протектором VMProtect

Post by mtechno »

Прочитал всю справку, но так и не понял как добавить маркер в списках процедур в проекте накрытия протектором?

Нахожу только VMProtectEnd().
Image
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

Code: Select all

#include "VMProtectSDK.h"
...
VMProtectBegin(NULL);
// your code here
VMProtectEnd();
Еще рекомендую посмотреть примеры из папки Examples
mtechno
Posts: 15
Joined: Wed Mar 28, 2012 7:49 am

Re: Защита программы протектором VMProtect

Post by mtechno »

Все нашлось. спасибо!
denis84
Posts: 46
Joined: Sat Nov 16, 2013 12:26 pm

Re: Защита программы протектором VMProtect

Post by denis84 »

Скажите, почему я не должен ВСЕ процедуры заворачивать в VMProtectBegin - VMProtectEnd ?
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита программы протектором VMProtect

Post by Admin »

Скажите, почему я не должен ВСЕ процедуры заворачивать в VMProtectBegin - VMProtectEnd ?
Вы защищаете только те функции, которые критичны для анализа и взлома (например проверка регистрации или каких-то ограничений в триальной версии вашей программы). Какой смысл например виртуализировать стандартный рантайм компилятора, если его никто изучать или ломать не будет?
Post Reply