Page 1 of 3

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

Posted: Thu Jun 16, 2011 11:25 pm
by kalashnikovartem
Добрый день.

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

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

С уважением.

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

Posted: Fri Jun 17, 2011 2:14 am
by Admin
1. Да, мы отслеживаем попытки взлома программ наших клиентов. В некоторых случаях действительно защищенные программы ломают, но при более детальном изучении оказывается, что из всех возможностей VMProtect-а используется только упаковка или разработчик забыл включить в защиту критичный код.
2. VMProtect защищен собой.
3. Все что вы встречаете в инете - это лицензионные версии, купленные "добрыми" кардерами и выложенные в общий доступ. Это значит, что если программу трудно взломать, то её проще купить по ворованной кредитке :))

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

Posted: Fri Jun 17, 2011 3:31 am
by kalashnikovartem
Спасибо за оперативный ответ.

Еще вопрос:

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

С уважением.

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

Posted: Fri Jun 17, 2011 4:40 am
by Admin
Да, мы можем предложить вам такую услугу, но стоимость её будет в разы больше стоимости лицензии VMProtect.

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

Posted: Fri Jun 17, 2011 4:44 am
by kalashnikovartem
А какие будут условия?
Что необходимо от меня кроме оплаты?
Должен ли я буду предоставить исходники программы?

С уважением.

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

Posted: Fri Jun 17, 2011 5:59 am
by Admin
Вы составляете ТЗ, в котором подробно описываете что и как вам необходимо защитить. По требованиям из вашего ТЗ будет ясно - нужен ли будет доступ к исходникам или нет. После согласования ТЗ мы выставляем вам счет на свои услуги и после его оплаты приступаем к работе.

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

Posted: Fri Sep 02, 2011 2:34 am
by kalashnikovartem
Совсем недавно один из членов команды RED CREW выложил в своём блоге исходники загрузчика для обхода защиты VMProtect. Подробно об этом можно почитать здесь и здесь.

Вопрос к разработчикам: Что это значит для пользователей Вашего продукта и какие потенциальные угрозы это несет?

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

Posted: Fri Sep 02, 2011 3:57 am
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) - поэтому имеем вот такой вот результат.

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

Posted: Fri Sep 02, 2011 4:21 am
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

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

Posted: Fri Sep 02, 2011 12:43 pm
by Cinemaizer
Подобные посты - "как не надо организовывать защиту" и топики - "общие рекомендации по организации защиты", надо подавать под грифом - крайне рекомендовано для прочтения, как отче наш :) Это я не сарказма ради, а вполне серьезно. Мне как начинающему пользователю VMProtect Ultimate например это очень пригодилось, хотя обратил внимание не сразу...

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

Posted: Sat Apr 07, 2012 8:00 pm
by mtechno
Прочитал всю справку, но так и не понял как добавить маркер в списках процедур в проекте накрытия протектором?

Нахожу только VMProtectEnd().
Image

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

Posted: Sun Apr 08, 2012 2:41 am
by Admin

Code: Select all

#include "VMProtectSDK.h"
...
VMProtectBegin(NULL);
// your code here
VMProtectEnd();
Еще рекомендую посмотреть примеры из папки Examples

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

Posted: Sun Apr 08, 2012 4:25 pm
by mtechno
Все нашлось. спасибо!

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

Posted: Sun Nov 17, 2013 4:05 am
by denis84
Скажите, почему я не должен ВСЕ процедуры заворачивать в VMProtectBegin - VMProtectEnd ?

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

Posted: Sun Nov 17, 2013 5:20 am
by Admin
Скажите, почему я не должен ВСЕ процедуры заворачивать в VMProtectBegin - VMProtectEnd ?
Вы защищаете только те функции, которые критичны для анализа и взлома (например проверка регистрации или каких-то ограничений в триальной версии вашей программы). Какой смысл например виртуализировать стандартный рантайм компилятора, если его никто изучать или ломать не будет?