Как защитить динамическую библиотеку C++ от использования без разрешения?

Мы создаем плагин Unity3D. Любая игра, которая использует наш плагин, когда она построена для какой-либо платформы, также включает наш плагин в форме динамической библиотеки для этой платформы. Например, когда Android apk экспортируется из Unity, он будет содержать нашу библиотеку xyz.so. Библиотека написана на C++.

Как мы можем защитить нашу динамическую библиотеку от кражи? Кажется, что любой может "распаковать" пакет apk Android, взять нашу библиотеку, получить экспорт, взять документацию из нашей бесплатной пробной версии и, наконец, использовать библиотеку, не будучи лицензированным клиентом. Существуют ли модели защиты, которые рекомендуются в этом случае использования?

1 ответ

Решение

Ну, хотя это намного сложнее, чем с Managed Code, код C++ можно разобрать и, таким образом, сломать. Это, однако, тяжелая работа, и она того стоит, только если у вас большая масса потребителей. Люди с такими навыками скорее взломают самую последнюю популярную игру AAA, чем тратят свое время на стороннюю библиотеку Unity.

Это, как говорится: да, вы должны быть в состоянии защитить свою библиотеку. Просто имейте валидатор лицензионного ключа в вашей библиотеке C++. Библиотека отказывается работать, пока не будет предоставлен лицензионный ключ, который она смогла успешно проверить.

Лицензия может быть

License =
{
    key=[ Owner-Identification, App-Identifier ],
    verification=(Signed hash of key)
}

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

Если у вас есть этот код в вашей библиотеке и вы запутываете его с помощью инструментов обфускации C++, вы должны быть в полной безопасности. Если вы не запутываете, вы все равно должны быть в полной безопасности.

Редактировать: вы даже можете сделать испытания с этой моделью. Просто добавьте срок действия лицензии к key и ваша библиотека может перестать работать, когда это время прошло.

Одна из возможных реализаций может быть:

Файл, содержащий оба key в открытом тексте (чтобы ваш код и, при желании, даже человек мог его прочитать и понять), а также содержит хеш со знаком (хэш key, зашифрованный с помощью вашего закрытого ключа).

Код будет читать key и вычислите его хэш, используя тот же алгоритм хэша. Это также расшифровывает подписанный хеш с помощью открытого ключа. Если оба хэша одинаковы, код может быть уверен, что key действителен и может перейти к проверке его содержимого: key не истек (Expire-Time), является key предназначен для этого конкретного приложения (App-Id) и т. д.

Другие вопросы по тегам