Page 1 of 1

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

Posted: Mon Jul 15, 2013 7:28 am
by V.I.R.U.S.
Приветствую!

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

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

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

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

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

Как именно шифровать я не знаю, не силен в криптографии, особенно исполняемого кода.
Но думаю, все это довольно не сложно реализуется. Т.к. шифрование уже есть!

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

Posted: Mon Jul 15, 2013 7:49 am
by Admin
А чем не устраивает поле UserData под хранение типа редакции продукта?

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

Posted: Mon Jul 15, 2013 8:09 am
by V.I.R.U.S.
Admin wrote:А чем не устраивает поле UserData под хранение типа редакции продукта?
Это все устраивает)))

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

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

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

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

Так вот!
Тут как раз и поможет мое предложение. В после ввода лицензионного ключа, проверки его валидности - мы считывает UserData, определяем тип лицензии в ключе, если-же он подходит под редакцию "Pro", то расшифруем функцию "Save".

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

Posted: Mon Jul 15, 2013 8:16 am
by Admin
Кто запрещает проверять UserData на доступный тип редакции не только снаружи функции Save, но и внутри её?

Code: Select all

void Save()
{
VMProtectGetSerialNumberData(&data);
if (data.UserData[0] != PRO_EDITION)
  return;
...
}

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

Posted: Mon Jul 15, 2013 8:22 am
by V.I.R.U.S.
Как вариант, можно реализовать вот что

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

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

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

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

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

P.S.
Этот вариант тоже хорош, но управляемое шифрование кода - тоже хорошее предложение!

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

Posted: Mon Jul 15, 2013 8:23 am
by V.I.R.U.S.
Admin wrote:Кто запрещает проверять UserData на доступный тип редакции не только снаружи функции Save, но и внутри её?

Code: Select all

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