Приветствую!
Как известно, в VMP есть такая функция, как привязка кода к серийному номеру. Участок кода автоматически шифруется, и дешифруется только при правильном лицензионном ключе...
Но не всегда (я конечно не знаю, как поступают другие) нужно расшифровывать какие то участки кода при правильном ключе. Правильный ключ, с точки зрения VMP, может быть ограниченной версии скажем.
К примеру, различные редакции продукта - "Program Lite", "Program", "Program Pro", в виде одного приложения - и определенный функционал должен быть предоставлен в зависимости от ключа.
Или например, демо-версия прихожения - зашифрованный код, в определенный момент тоже может понадобиться.
Вот что я предлагаю
Со стороны SDK:
Добавить функцию VMPDecryptCode(Password: PWideChar; Code: Pointer): HRESULT;
Со стороны протектора:
Добавить в контекстное меню защищаемой процедуры/функции - элемент "Зашифровать паролем". Появляется небольшое окошко, куда вводится нужный пароль.
Как именно шифровать я не знаю, не силен в криптографии, особенно исполняемого кода.
Но думаю, все это довольно не сложно реализуется. Т.к. шифрование уже есть!
[Предложение]Шифровка процедур/функций
Re: [Предложение]Шифровка процедур/функций
А чем не устраивает поле UserData под хранение типа редакции продукта?
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: [Предложение]Шифровка процедур/функций
Это все устраивает)))Admin wrote:А чем не устраивает поле UserData под хранение типа редакции продукта?
Вот представим самую простейшую ситуацию:
Есть к примеру "Блокнот Lite" и "Блокнот Pro". Последняя версия, позволяет сохранить данные в файл.
Данные о редакции хранятся как раз в UserData.
Пусть за сохранение в файл, отвечает так-же простейшая процедура.
procedure Save;
В обоих случаях, серийный номер (правильный + активный) с точки зрения VMProtect позволяет сохранять данные в файл; процедура привязана к серийному номеру, но успешно дешифрована и активирована.
Так вот!
Тут как раз и поможет мое предложение. В после ввода лицензионного ключа, проверки его валидности - мы считывает UserData, определяем тип лицензии в ключе, если-же он подходит под редакцию "Pro", то расшифруем функцию "Save".
Re: [Предложение]Шифровка процедур/функций
Кто запрещает проверять UserData на доступный тип редакции не только снаружи функции Save, но и внутри её?
Code: Select all
void Save()
{
VMProtectGetSerialNumberData(&data);
if (data.UserData[0] != PRO_EDITION)
return;
...
}
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: [Предложение]Шифровка процедур/функций
Как вариант, можно реализовать вот что
Усовершенствовать систему лицензирования.
Добавить в серийный номер дополнительное поле, отвечающее за редакцию лицензии приложения.
В сам VMProtect, скажем на новую вкладку, добавить редактор этих самых редакций.
Пока представляется мне список из двух столбцов: Индекс и Имя.
В контекстное меню защищаемой процедуры/функции добавить пункт "Привязка к редакции".
Нажатие на который открывает окошко, в котором есть CheckBox с доступными редакциями. Выбираются нужные.
Код шифруется практически по полной аналогии с "Привязкой к серийному номеру", за тем исключением, что добавляется еще одна зависимость - от наличии нужной редакции в серийном номере.
Что касается лицензионного ключа непосредственно, то лишние 1-2 байта информации, погоды не сделает) Именно столько надо под Индекс редакции. Да даже и 4 байта ничего не поменяют.
P.S.
Этот вариант тоже хорош, но управляемое шифрование кода - тоже хорошее предложение!
Усовершенствовать систему лицензирования.
Добавить в серийный номер дополнительное поле, отвечающее за редакцию лицензии приложения.
В сам VMProtect, скажем на новую вкладку, добавить редактор этих самых редакций.
Пока представляется мне список из двух столбцов: Индекс и Имя.
В контекстное меню защищаемой процедуры/функции добавить пункт "Привязка к редакции".
Нажатие на который открывает окошко, в котором есть CheckBox с доступными редакциями. Выбираются нужные.
Код шифруется практически по полной аналогии с "Привязкой к серийному номеру", за тем исключением, что добавляется еще одна зависимость - от наличии нужной редакции в серийном номере.
Что касается лицензионного ключа непосредственно, то лишние 1-2 байта информации, погоды не сделает) Именно столько надо под Индекс редакции. Да даже и 4 байта ничего не поменяют.
P.S.
Этот вариант тоже хорош, но управляемое шифрование кода - тоже хорошее предложение!
-
- Posts: 24
- Joined: Sun Apr 03, 2011 5:12 am
Re: [Предложение]Шифровка процедур/функций
Шифрование - дополнительная защита.Admin wrote:Кто запрещает проверять UserData на доступный тип редакции не только снаружи функции Save, но и внутри её?
Code: Select all
void Save() { VMProtectGetSerialNumberData(&data); if (data.UserData[0] != PRO_EDITION) return; ... }