[Предложение]Шифровка процедур/функций

Issues related to VMProtect
Post Reply
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

[Предложение]Шифровка процедур/функций

Post by V.I.R.U.S. »

Приветствую!

Как известно, в VMP есть такая функция, как привязка кода к серийному номеру. Участок кода автоматически шифруется, и дешифруется только при правильном лицензионном ключе...

Но не всегда (я конечно не знаю, как поступают другие) нужно расшифровывать какие то участки кода при правильном ключе. Правильный ключ, с точки зрения VMP, может быть ограниченной версии скажем.
К примеру, различные редакции продукта - "Program Lite", "Program", "Program Pro", в виде одного приложения - и определенный функционал должен быть предоставлен в зависимости от ключа.
Или например, демо-версия прихожения - зашифрованный код, в определенный момент тоже может понадобиться.

Вот что я предлагаю

Со стороны SDK:
Добавить функцию VMPDecryptCode(Password: PWideChar; Code: Pointer): HRESULT;

Со стороны протектора:
Добавить в контекстное меню защищаемой процедуры/функции - элемент "Зашифровать паролем". Появляется небольшое окошко, куда вводится нужный пароль.

Как именно шифровать я не знаю, не силен в криптографии, особенно исполняемого кода.
Но думаю, все это довольно не сложно реализуется. Т.к. шифрование уже есть!
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: [Предложение]Шифровка процедур/функций

Post by Admin »

А чем не устраивает поле UserData под хранение типа редакции продукта?
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: [Предложение]Шифровка процедур/функций

Post by V.I.R.U.S. »

Admin wrote:А чем не устраивает поле UserData под хранение типа редакции продукта?
Это все устраивает)))

Вот представим самую простейшую ситуацию:
Есть к примеру "Блокнот Lite" и "Блокнот Pro". Последняя версия, позволяет сохранить данные в файл.

Данные о редакции хранятся как раз в UserData.

Пусть за сохранение в файл, отвечает так-же простейшая процедура.
procedure Save;

В обоих случаях, серийный номер (правильный + активный) с точки зрения VMProtect позволяет сохранять данные в файл; процедура привязана к серийному номеру, но успешно дешифрована и активирована.

Так вот!
Тут как раз и поможет мое предложение. В после ввода лицензионного ключа, проверки его валидности - мы считывает UserData, определяем тип лицензии в ключе, если-же он подходит под редакцию "Pro", то расшифруем функцию "Save".
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: [Предложение]Шифровка процедур/функций

Post by Admin »

Кто запрещает проверять UserData на доступный тип редакции не только снаружи функции Save, но и внутри её?

Code: Select all

void Save()
{
VMProtectGetSerialNumberData(&data);
if (data.UserData[0] != PRO_EDITION)
  return;
...
}
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: [Предложение]Шифровка процедур/функций

Post by V.I.R.U.S. »

Как вариант, можно реализовать вот что

Усовершенствовать систему лицензирования.

Добавить в серийный номер дополнительное поле, отвечающее за редакцию лицензии приложения.

В сам VMProtect, скажем на новую вкладку, добавить редактор этих самых редакций.
Пока представляется мне список из двух столбцов: Индекс и Имя.

В контекстное меню защищаемой процедуры/функции добавить пункт "Привязка к редакции".
Нажатие на который открывает окошко, в котором есть CheckBox с доступными редакциями. Выбираются нужные.
Код шифруется практически по полной аналогии с "Привязкой к серийному номеру", за тем исключением, что добавляется еще одна зависимость - от наличии нужной редакции в серийном номере.

Что касается лицензионного ключа непосредственно, то лишние 1-2 байта информации, погоды не сделает) Именно столько надо под Индекс редакции. Да даже и 4 байта ничего не поменяют.

P.S.
Этот вариант тоже хорош, но управляемое шифрование кода - тоже хорошее предложение!
V.I.R.U.S.
Posts: 24
Joined: Sun Apr 03, 2011 5:12 am

Re: [Предложение]Шифровка процедур/функций

Post by V.I.R.U.S. »

Admin wrote:Кто запрещает проверять UserData на доступный тип редакции не только снаружи функции Save, но и внутри её?

Code: Select all

void Save()
{
VMProtectGetSerialNumberData(&data);
if (data.UserData[0] != PRO_EDITION)
  return;
...
}
Шифрование - дополнительная защита.
Post Reply