Вопрос по правильной организации защиты

Issues related to VMProtect
ivan_3
Posts: 9
Joined: Mon Jun 29, 2020 10:35 pm

Вопрос по правильной организации защиты

Postby ivan_3 » Mon Jun 29, 2020 11:08 pm

Привет всем.

Мы разрабатываем научное приложение, которые читает входные файлы со скриптами lua (которые запакованы в свой формат), затем этими скриптами обрабатывает некоторые данные.
Сами скрипты пишем и упаковываем в некоторый кастомный бинарный формат мы сами. Далее мы поставляем наше приложение клиентам и они покупают лицензию на некоторое количество скриптов. Часть скриптов идет бесплатно.

Т.е. у нас есть 5 бинарных файлов со скриптами lua:
расчет_1.bin - бесплатный
расчет_2.bin - платный
расчет_3.bin - бесплатный
расчет_4.bin - платный
расчет_5.bin - бесплатный

Сейчас у нас в приложении есть одинаковые части для бесплатной и платной версии:
1. чтение файла со скриптами *.bin - 300 строк кода на плюсах
2. выполнение самого скрипта - 2000 строк кода на плюсах

Напомню важный момент, мы хотим чтобы часть скриптов была бесплатна.

Я вижу 2 варианта защиты:
Вариант 1.
Защитить блок чтения файла и выполнения самого скрипта, но при этом для бесплатных продуктов нам тоже нужно будет активировать серийный номер, что вносит ощутимые сложности. Нам нужно формировать ключ все время даже для бесплатных продуктов. Если пользователь пользуется бесплатной часть, а потом хочет платной, то нам нужно будет выгружать бесплатный ключ, а затем загружать платный.

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

Как вы считаете, достаточно ли будет защищено приложение если реализовать Вариант 2?

P.S. Защищать сами скрипты необходимости нет, нужно только защитить работу с бинарными файлами, которые хранят сами скрипты.

P.S.S. Если что-то описал недостаточно понятно, задавайте вопросы, постараюсь дать больше деталей.

Admin
Site Admin
Posts: 1881
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Вопрос по правильной организации защиты

Postby Admin » Tue Jun 30, 2020 3:37 pm

Я бы из BIN сделал DLL и вынес бы туда функции расшифровки и выполнении самого скрипта. Алгоритмы расшифровки менял бы "на автомате" при каждой сборке скрипта в DLL. Внутри DLL после этого можно добавить лицензирование с проверкой серийников и всего остального.

ivan_3
Posts: 9
Joined: Mon Jun 29, 2020 10:35 pm

Re: Вопрос по правильной организации защиты

Postby ivan_3 » Tue Jun 30, 2020 8:04 pm

Код выполнения скрипта дергает различные С++ методы внутри главного приложения, поэтому проблематично это вынести в отдельную dll, т.к. придется поддерживать бинарную совместимость вызовов. У нас сейчас можно файлы со скриптами пользовать в различных версиях приложения, а если это все засунуть в dll, то придется на уровне С++ это поддерживать. Это, конечно, возможно, но привносит много сложностей в разработке.
Правильно ли я вас понял, что у нас в защищенной либе есть защищенный метод Exec:

Code: Select all

class One {
  virtual void FuOne() = 0;
}

class Two {
  virtual void FuTwo() = 0;
}

void Exec(const std::string& script, One* one, Two* two) {
  ReadScript();
  one->FuOne();
  two->FuTwo();
}



Еще момент что код для выполнения бесплатных и платных одинаковый, т.е. одинаковый код будет и в защищенном серийником модуле и в не защищенном.