Page 1 of 1

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

Posted: Mon Jun 29, 2020 11:08 pm
by ivan_3
Привет всем.

Мы разрабатываем научное приложение, которые читает входные файлы со скриптами 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. Если что-то описал недостаточно понятно, задавайте вопросы, постараюсь дать больше деталей.

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

Posted: Tue Jun 30, 2020 3:37 pm
by Admin
Я бы из BIN сделал DLL и вынес бы туда функции расшифровки и выполнении самого скрипта. Алгоритмы расшифровки менял бы "на автомате" при каждой сборке скрипта в DLL. Внутри DLL после этого можно добавить лицензирование с проверкой серийников и всего остального.

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

Posted: Tue Jun 30, 2020 8:04 pm
by ivan_3
Код выполнения скрипта дергает различные С++ методы внутри главного приложения, поэтому проблематично это вынести в отдельную 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();
}



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