Инфраструктура лицензирования ПО
От: r0nd  
Дата: 27.10.23 12:15
Оценка:
Как защитить свое приложение на основе ключей? Предполагается что будут а)ключи лицензии и б)ключи триальные на какое-то количество дней. Есть ли статьи, где это прочитать можно? Может кто-то находил примеры реализации клиент/сервера, видео в интернете или что почитать? Интересуют подводные камни, может быть базовые решения итд
...<< Dementor 1.5.0 ✪ Lets Play a Game ⚁⚂⚃⚃⚄>>
Re: Инфраструктура лицензирования ПО
От: drVanо Россия https://vmpsoft.com
Дата: 27.10.23 12:31
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Как защитить свое приложение на основе ключей? Предполагается что будут а)ключи лицензии и б)ключи триальные на какое-то количество дней. Есть ли статьи, где это прочитать можно? Может кто-то находил примеры реализации клиент/сервера, видео в интернете или что почитать? Интересуют подводные камни, может быть базовые решения итд


Подводный камни с триальными ключами:
1. Если вы планируете триальную метку хранить на стороне пользователя, то пользователь ее может стереть.
2. Если пользователь будет использовать VM, то для обхода триала будет просто запускаться с "чистого" снепшота.

Подводный камни с ключами лицензий:
1. Если планируется использовать ассиметричные алгоритмы (RSA, etc.), то нужно как-то защитить открытый ключ от подмены.
Re: Инфраструктура лицензирования ПО
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 27.10.23 14:26
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Как защитить свое приложение на основе ключей? Предполагается что будут а)ключи лицензии и б)ключи триальные на какое-то количество дней. Есть ли статьи, где это прочитать можно? Может кто-то находил примеры реализации клиент/сервера, видео в интернете или что почитать? Интересуют подводные камни, может быть базовые решения итд


На этом форуме это неоднократно обсуждали. Кто-то говорил какими программами пользуется. Кто-то приводил алгоритмы, но такие примитивные. Можно поискать старые темы на форуме. Я так понял, что суть сводится к тому, что или берёшь готовую программу протектор. Или изобретаешь свой велосипед по сути повторяя алгоритмы протектора.

Чисто для галочки какое-нибудь ассиметричное шифрование где в сообщении запишешь электронную почту пользователя, идентификатор и версию программы, время её работы и прочее, что по сути никак не защитит, но выразит намерение программиста продавать, а не дарить.

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

Чисто для ознакомления можно почитать Жарков Станислав. Shareware. Профессиональная разработка и продвижение программ.

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

Например, я купил программу MyTestX Pro, мне дали ключ в виде файла "mtxuser.key".
################### MYTESTXPRO REGISTRATION DATA KEY ###################
#Email: your@email.com#
#Name: Vasya Pupkin#
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF01234567
########################################################################

Я изменил данные, если что. Но видно, что есть открытая и зашифрованная часть. Открытая я не знаю для чего, видимо чтобы файлы ключи можно было различить визуально без программы.

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

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

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

А если взять тот же Qt, он кроссплатформенный, а с 5-ой версии поддерживает ещё и смартфоны. Это значит нужна защита для разных платформ. И я заметил такую фишку, что если мне не дают возможности легко купить приложение, то я его не куплю с ещё большей вероятностью, чем если цена мягко говоря завышена.

Когда в Россию пришли системы оплаты США, то я через ту же банковскую карту с Visa тратил в различные магазины США. Не только в них, ещё подкидывал немножко деньжат российским лохализаторам в ММО, опять же российским ритейлерам софта. А теперь там где я не могу оплатить по нормальному я и не оплачиваю.

Ну то есть какой-нибудь алиэкспресс как работал, так и работает. Это чисто для примера, хотя это не софтовый магазин, а площадка для магазинов. Я беру банковскую карту и оплачиваю. А такие магазины как стим, бэтл.нет, ориджин, гугл плей, ебей и прочие теперь сосут. Им не помогают системы защиты потому, что они не дают по нормальному покупать.

Потому есть ещё интересное направление покупка изнутри приложений как в ММО, вплоть до псевдовалюты. В общем я о том, что недостаточно защищать программу, надо дать людям возможность её легко купить. А сложно покупать будут не только лишь все, мало кто будет это делать.

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

Психология здесь такая, что тот кто не хочет покупать, тот и не купит, или всеми силами постарается этого избежать. А если остальные люди не покупают, то или цена завышена относительно ценности программы для покупателя, или он просто не может купить это приложение, потому что продавец не может подключить адекватную систему оплаты.

Немного по теме, раньше говорят дрочили на asprotect, но это же винда. Что-то ещё вроде обсуждали.

Ещё старьё.
https://www.rsdn.org/account/info/95629
https://matrixfailure.wordpress.com/2012/09/13/выбор-протектора-для-программы/
http://rsdn.org/forum/shareware/4319992.all
Автор: Matrix_Failure
Дата: 25.06.11


Или вот, попробуй купи программу в России и не надорвись.
https://www.rsdn.org/account/info/20355
https://vac.muzychenko.net/en/

И так далее. Короче ладно, я всё равно этой темой не особо интересовался. Просто кто только это уже не обсуждал.
Re[2]: Инфраструктура лицензирования ПО
От: r0nd  
Дата: 27.10.23 17:27
Оценка:
Здравствуйте, velkin, Вы писали:

Спасибо за информацию. Очень объемно вышло.

V>На этом форуме это неоднократно обсуждали.


Я искал, но топиков на эту тему не так много мне удалось найти:

Конечно, интересно было бы послушать какого-нибудь приптоаналитика(архитектора), который бы расказал на примере (например) нафига они делали одно и не делали (очевидное) другое, или почему они не замечают что есть куча кейгенов. Какую инфу они собирают и почему. А про RSA я могу и сам рассказать. То есть нужна более высокоуровневое понимание/информация мне.
...<< Dementor 1.5.0 ✪ Lets Play a Game ⚀⚂⚃⚅⚅>>
Re[3]: Инфраструктура лицензирования ПО
От: Stanislav V. Zudin Россия  
Дата: 27.10.23 18:10
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Конечно, интересно было бы послушать какого-нибудь приптоаналитика(архитектора), который бы расказал на примере (например) нафига они делали одно и не делали (очевидное) другое, или почему они не замечают что есть куча кейгенов. Какую инфу они собирают и почему. А про RSA я могу и сам рассказать. То есть нужна более высокоуровневое понимание/информация мне.


Способ защиты зависит от целевой аудитории.
Собственный сервер очень заманчивая штука, но есть технические и организационные нюансы. Если предполагаются корпоративные клиенты, то скорее всего фигвам, кто согласится на подобную активацию. Более того, могут потребовать стандартное решение для лицензирования — Flexera (AKA FlexLM) (но это не в РФ). Писал про него тут
Автор: Stanislav V. Zudin
Дата: 02.08.22
.

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

Заказывали когда-то аудит для нашего софта, выяснили, что при включенном RTTI софт декомпилируется вплоть до имён классов и функций.
Это здорово упрощает взлом.

Камрад velkin выше писал

Например, я купил программу MyTestX Pro, мне дали ключ в виде файла "mtxuser.key".

################### MYTESTXPRO REGISTRATION DATA KEY ###################
#Email: your@email.com#
#Name: Vasya Pupkin#
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567
0123456789ABCDEF0123456789ABCDEF01234567
########################################################################


Я изменил данные, если что. Но видно, что есть открытая и зашифрованная часть. Открытая я не знаю для чего, видимо чтобы файлы ключи можно было различить визуально без программы.


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

А кто-то, действительно, в зашифрованном виде хранит и служебную информацию, и данные о пользователе.
_____________________
С уважением,
Stanislav V. Zudin
Re: Инфраструктура лицензирования ПО
От: BlackEric http://black-eric.lj.ru
Дата: 27.10.23 18:45
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Как защитить свое приложение на основе ключей? Предполагается что будут а)ключи лицензии и б)ключи триальные на какое-то количество дней. Есть ли статьи, где это прочитать можно? Может кто-то находил примеры реализации клиент/сервера, видео в интернете или что почитать? Интересуют подводные камни, может быть базовые решения итд


Вот я когда-то делал: Простейшая защита десктопной шароварной программы для начинающих
Автор: BlackEric
Дата: 17.05.17
. Ломается просто, но для начала пойдет.
Работает без какой-либо привязки к сети.
https://github.com/BlackEric001
Re[2]: Инфраструктура лицензирования ПО
От: bnk СССР http://unmanagedvisio.com/
Дата: 27.10.23 19:15
Оценка: 8 (2)
Здравствуйте, BlackEric, Вы писали:

R>>Как защитить свое приложение на основе ключей? Предполагается что будут а)ключи лицензии и б)ключи триальные на какое-то количество дней. Есть ли статьи, где это прочитать можно? Может кто-то находил примеры реализации клиент/сервера, видео в интернете или что почитать? Интересуют подводные камни, может быть базовые решения итд


BE>Вот я когда-то делал: Простейшая защита десктопной шароварной программы для начинающих
Автор: BlackEric
Дата: 17.05.17
. Ломается просто, но для начала пойдет.

BE>Работает без какой-либо привязки к сети.

У меня до сих пор так (RSA подпись ключа)
Поскольку софт B2B, его и не ломает никто особо.
Суть:

Сервер ключей
PPG => запрос ключа => сделать JSON: {user: "John Doe", timestamp: "29.09.2023", product: "FooBar", version: "10"} => подписать используя приватный ключ => base64 encode => отправить пользователю

Программа
Пользователь вводит ключ => base64 decode => расшифровываем используя (вшитый) публичный ключ => получаем JSON => ОК

Понятно что это все в случае если лицензия — не подписка.
Также это легко ломается изменением бинарника (удалением проверок ключа)
Отредактировано 27.10.2023 19:32 bnk . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.