Защита программы протектором VMProtect
-
- Posts: 5
- Joined: Thu Jun 16, 2011 11:12 pm
Защита программы протектором VMProtect
Добрый день.
Я разработал серьезный продукт и хочу его защитить VMProtect(ом).
Меня интересуют следующие вопросы:
1. Ведете ли Вы какую-нибудь статистику по взломам программ, использующих VMProtect?
2. Чем защищен сам протектор?
3. В интернете неоднократно встречал ссылки на ломанный протектор, значит ли это,
что и защищенную программу будет легко взломать?
С уважением.
Я разработал серьезный продукт и хочу его защитить VMProtect(ом).
Меня интересуют следующие вопросы:
1. Ведете ли Вы какую-нибудь статистику по взломам программ, использующих VMProtect?
2. Чем защищен сам протектор?
3. В интернете неоднократно встречал ссылки на ломанный протектор, значит ли это,
что и защищенную программу будет легко взломать?
С уважением.
Re: Защита программы протектором VMProtect
1. Да, мы отслеживаем попытки взлома программ наших клиентов. В некоторых случаях действительно защищенные программы ломают, но при более детальном изучении оказывается, что из всех возможностей VMProtect-а используется только упаковка или разработчик забыл включить в защиту критичный код.
2. VMProtect защищен собой.
3. Все что вы встречаете в инете - это лицензионные версии, купленные "добрыми" кардерами и выложенные в общий доступ. Это значит, что если программу трудно взломать, то её проще купить по ворованной кредитке )
2. VMProtect защищен собой.
3. Все что вы встречаете в инете - это лицензионные версии, купленные "добрыми" кардерами и выложенные в общий доступ. Это значит, что если программу трудно взломать, то её проще купить по ворованной кредитке )
-
- Posts: 5
- Joined: Thu Jun 16, 2011 11:12 pm
Re: Защита программы протектором VMProtect
Спасибо за оперативный ответ.
Еще вопрос:
Все тонкости протектора и его использования знает только разработчик, т.е. - Вы.
Существует ли у Вас услуга "защита под ключ", т.е. я передаю Вам программу, а Вы делаете ей максимальную защиту, но при этом я плачу только за услугу, а не за лицензию на протектор?
С уважением.
Еще вопрос:
Все тонкости протектора и его использования знает только разработчик, т.е. - Вы.
Существует ли у Вас услуга "защита под ключ", т.е. я передаю Вам программу, а Вы делаете ей максимальную защиту, но при этом я плачу только за услугу, а не за лицензию на протектор?
С уважением.
Re: Защита программы протектором VMProtect
Да, мы можем предложить вам такую услугу, но стоимость её будет в разы больше стоимости лицензии VMProtect.
-
- Posts: 5
- Joined: Thu Jun 16, 2011 11:12 pm
Re: Защита программы протектором VMProtect
А какие будут условия?
Что необходимо от меня кроме оплаты?
Должен ли я буду предоставить исходники программы?
С уважением.
Что необходимо от меня кроме оплаты?
Должен ли я буду предоставить исходники программы?
С уважением.
Re: Защита программы протектором VMProtect
Вы составляете ТЗ, в котором подробно описываете что и как вам необходимо защитить. По требованиям из вашего ТЗ будет ясно - нужен ли будет доступ к исходникам или нет. После согласования ТЗ мы выставляем вам счет на свои услуги и после его оплаты приступаем к работе.
-
- Posts: 5
- Joined: Thu Jun 16, 2011 11:12 pm
Re: Защита программы протектором VMProtect
Да там особо и разбирать то нечего.
"And if you scroll down, you will see the typical VMP errors checks:" - крякер ошибочно думает, что сообщения типа "Can not find file...", "Can not read..." это сообщения защиты. На самом деле это код программы, который просто ничем не защищен. В результате имеем классический патч в виде безусловного перехода, который перепрыгивает все вызовы VMPrortectGetCurrentHWID и VMPrortectSetSerialNumber. Есть подозрение, что разработчик использовал в качестве защиты только одну упаковку и совершенно не позаботился о защите критичных участков своей программы (я даже не говорю про привязку кода к серийнику или хотябы минимальные проверки в виде VMProtectGetSerialNumberState) - поэтому имеем вот такой вот результат.
"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
Хотелось бы на этом примере показать еще раз как не стоит организовывать защиту программы:
1. Нельзя использовать упаковку как единственный метод защиты. Основная фишка VMProtect - это все-таки виртуализация критичного кода программы и если из всего функционала использовать лишь упаковку, то снятие защиты будет не труднее чем снятие UPX.
2. Разработчики допускают классические ошибки вида:
Что мы здесь видим? Здесь мы видим, что результат работы защищенной функции (в нашем случае это VMProtectSetSerialNumber, но там может быть любая другая пользовательская функция) анализируется уже в незащищенном коде. Т..е. опять имеет классически патч в виде обхода маркера и самой проверки:
В данном примере в маркер должна попадать как минимум сама проверка "if (res)", а как максимум я бы порекомендовал засунуть в маркер еще и код, который инициализирует какие-либо объекты, без которых программа просто не сможет работать:
3. Рассмотрим еще один пример:
Что мы здесь видим? Видим, что foo, результат которой нам очень важен, на самом деле оказывается не защищен из-за особенностей маркеров на захватывать прологи и эпилоги. Т.е. после виртуализации foo мы получим нечто подобное:
Теперь крякеру не составит труда подкорретировать результат функции:
1. Нельзя использовать упаковку как единственный метод защиты. Основная фишка VMProtect - это все-таки виртуализация критичного кода программы и если из всего функционала использовать лишь упаковку, то снятие защиты будет не труднее чем снятие UPX.
2. Разработчики допускают классические ошибки вида:
Code: Select all
(some code)
...
VMProtectBegin('My marker');
int res = VMProtectSetSerialNumber(...);
VMProtectEnd();
if (res) {
MessageBox(...,'Invalid serial number');
}
...
(some code)
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)
Code: Select all
VMProtectBegin('My marker');
(important code)
...
int res = VMProtectSetSerialNumber(...);
if (res) {
MessageBox(...,'Invalid serial number');
}
...
(important code)
VMProtectEnd();
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();
}
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
-
- Posts: 7
- Joined: Sat Jun 18, 2011 3:31 pm
- Location: Москва
Re: Защита программы протектором VMProtect
Подобные посты - "как не надо организовывать защиту" и топики - "общие рекомендации по организации защиты", надо подавать под грифом - крайне рекомендовано для прочтения, как отче наш Это я не сарказма ради, а вполне серьезно. Мне как начинающему пользователю VMProtect Ultimate например это очень пригодилось, хотя обратил внимание не сразу...
Re: Защита программы протектором VMProtect
Прочитал всю справку, но так и не понял как добавить маркер в списках процедур в проекте накрытия протектором?
Нахожу только VMProtectEnd().
Нахожу только VMProtectEnd().
Re: Защита программы протектором VMProtect
Code: Select all
#include "VMProtectSDK.h"
...
VMProtectBegin(NULL);
// your code here
VMProtectEnd();
Re: Защита программы протектором VMProtect
Все нашлось. спасибо!
Re: Защита программы протектором VMProtect
Скажите, почему я не должен ВСЕ процедуры заворачивать в VMProtectBegin - VMProtectEnd ?
Re: Защита программы протектором VMProtect
Вы защищаете только те функции, которые критичны для анализа и взлома (например проверка регистрации или каких-то ограничений в триальной версии вашей программы). Какой смысл например виртуализировать стандартный рантайм компилятора, если его никто изучать или ломать не будет?Скажите, почему я не должен ВСЕ процедуры заворачивать в VMProtectBegin - VMProtectEnd ?