Организация активации пробной версии
От: Unhandled_Exception Россия  
Дата: 20.03.22 14:39
Оценка:
Всем привет,

Надо сделать такую штуку: пользователь устанавливает мою программу, жмет "активировать пробную версию", и программа сколько-то работает, как полная версия.

Ключи генерю VMProtect-ом.

Сначал думал делать так: программа отправляет на сервер активации hardware id, в ответ получает ключ с зашитым в нем expiration date.

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

Можно запрашивать email и отправлять на него короткий ключ активации (на сервер программа, таким образом, отправляет короткий ключ и hardware id, тогда смысла менять hardware id нет). Как будто бы это выглядит приемлемым решением. Правда, я видел софт, который не запрашивает email, но активирует пробный переиод. Как они это делают?

Другой вопрос, который меня беспокоит, это ddos атаки на сервер активации.

Буду рад, если поделитесь своей практикой и соображениями.

Спасибо!
Re: Организация активации пробной версии
От: Sharowarsheg  
Дата: 20.03.22 14:53
Оценка: 7 (2)
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Можно запрашивать email и отправлять на него короткий ключ активации (на сервер программа, таким образом, отправляет короткий ключ и hardware id, тогда смысла менять hardware id нет). Как будто бы это выглядит приемлемым решением. Правда, я видел софт, который не запрашивает email, но активирует пробный переиод. Как они это делают?


Они просто забили на тех, кто каждый раз посылает новый hardware ID.

U_E>Другой вопрос, который меня беспокоит, это ddos атаки на сервер активации.


Не видел ни разу за примерно десять лет.
Re: Организация активации пробной версии
От: TailWind  
Дата: 20.03.22 15:04
Оценка:
Что-то ты слишком заморочился

Сейчас уже редко кто что-то взламывает

А если взламывает, то забей на них
Они только популярности проге добавляют
Re[2]: Организация активации пробной версии
От: Unhandled_Exception Россия  
Дата: 20.03.22 15:09
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Что-то ты слишком заморочился


Взлом совсем просто как-то выглядит. Фактически получается, что можно сделать кейген, причем вовсе не изучая, как устроена программа. Посмотреть как устроен запрос. Потом отправлять произвольный hardware id да и получай новый ключ
Re[3]: Организация активации пробной версии
От: vsb Казахстан  
Дата: 20.03.22 15:17
Оценка: 12 (2) +1
Здравствуйте, Unhandled_Exception, Вы писали:

TW>>Что-то ты слишком заморочился


U_E>Взлом совсем просто как-то выглядит. Фактически получается, что можно сделать кейген, причем вовсе не изучая, как устроена программа. Посмотреть как устроен запрос. Потом отправлять произвольный hardware id да и получай новый ключ


Зашей hardware id в ключ. В программе сравнивай hardware id из ключа с реальным. Тогда как минимум надо будет менять логику в твоей программе тем или иным образом.
Re[4]: Организация активации пробной версии
От: Unhandled_Exception Россия  
Дата: 20.03.22 15:19
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Зашей hardware id в ключ. В программе сравнивай hardware id из ключа с реальным. Тогда как минимум надо будет менять логику в твоей программе тем или иным образом.


Вот, точно. Отличная идея!
Re[3]: Организация активации пробной версии
От: Sharowarsheg  
Дата: 20.03.22 15:59
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

TW>>Что-то ты слишком заморочился


U_E>Взлом совсем просто как-то выглядит. Фактически получается, что можно сделать кейген, причем вовсе не изучая, как устроена программа. Посмотреть как устроен запрос. Потом отправлять произвольный hardware id да и получай новый ключ


Да, пока код из полной версии не выполняется на сервере. Тогда ситуация меняется радикально — чтобы выполнить код, клиент должен предъявить годный ключ. Это, правда, не работает с триалами по времени.
Отредактировано 20.03.2022 16:00 Sharowarsheg . Предыдущая версия .
Re[3]: Организация активации пробной версии
От: TailWind  
Дата: 20.03.22 16:05
Оценка: +1
U_E>Взлом совсем просто как-то выглядит. Фактически получается, что можно сделать кейген, причем вовсе не изучая, как устроена программа. Посмотреть как устроен запрос. Потом отправлять произвольный hardware id да и получай новый ключ

Зашифровать запрос
Или в хвост ему добавить контрольную сумму, хитро расчитываемую

Я честно сказать думал вы так и делаете. Это же очевидно )
Re: Организация активации пробной версии
От: wantus  
Дата: 20.03.22 16:47
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Сначал думал делать так: программа отправляет на сервер активации hardware id, в ответ получает ключ с зашитым в нем expiration date.


В ответ надо посылать набор key-value pairs, подписанный private ключом сервера активации. "Ключом" эту икебану называть не стоит, это скорее "лицензия".

Public ключ сервера зашивается в программу.

В лицензию по минимуму добавляется expiry и hardware id, и программа должна проверять (а) подпись (б) expiry (в) hardware id.

В лицензию можно прописывать дополнительные поля. Например, они могут докупить какую-то конкрентую фичу и это будет прописано в лицензии отдельным полем.

Если есть желание, то можно и email адрес или ФИО покупателя прописать.

Как это всё соотносится с тем, как работает vmprotect — без понятия.

U_E>Другой вопрос, который меня беспокоит, это ddos атаки на сервер активации.


Premature optimization. Будет DDoS атака — будешь решать На практике шансов что она будет — ноль.
Re[2]: Организация активации пробной версии
От: wantus  
Дата: 20.03.22 16:51
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Что-то ты слишком заморочился

TW>Сейчас уже редко кто что-то взламывает

Ломают то, что легка ломается. Если ломается с трудом, то ломают только, если есть $ заказ. Ничего не поменялось.

TW>А если взламывает, то забей на них

TW>Они только популярности проге добавляют

Urban legend. Это засирает google results и загружает саппорт всякими долбо##ами. Если есть возможно защитить от взлома, то думать тут особо нечего и это надо делать.
Re: Организация активации пробной версии
От: autopsist  
Дата: 20.03.22 17:39
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Всем привет,


U_E>Надо сделать такую штуку: пользователь устанавливает мою программу, жмет "активировать пробную версию", и программа сколько-то работает, как полная версия.

U_E>Ключи генерю VMProtect-ом.

При покупке генерим и лицензию вмпротектом (ну длинная такая последовательность) и активационный ключ (короткий). Оба пишутся в базу. Короткой ключ отсылается клиенту.
Клиент вводит короткий ключ, прога отправляет его на сервер и получает ответ. Еси ответ ОК, то из ответа берется лицензия и вставляется в реестр. Если нет, то действует сообразно (ну там ошибка и тп)
Естественно до отправки ключа есть проверка похож ли ключ на ключ и соответствует ли он программе, длина тоже проверяется, чтобы огромные данные не слали зря.

U_E>Другой вопрос, который меня беспокоит, это ddos атаки на сервер активации.


У нас пока не было, но это тоже можно регулировать самому. Несколько попыток без правильного результата — бан айпишника на какое-то время на пример.
Переборы ключей были, но у нас это даже до запроса в базу не доходит, отсеивается скриптом на сервере.
Re: Организация активации пробной версии
От: bnk СССР http://unmanagedvisio.com/
Дата: 20.03.22 19:21
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Буду рад, если поделитесь своей практикой и соображениями.


IMHO большинство проблем исчезают, если использовать приватный и публичный ключи (второй зашить в программу, а первый держать у себя на сервере), как выше посоветовали.
Можно зашивать все нужные данные прямо в ключ (он подписывается приватным ключом). Потом отправляется с сервера, а софтина использует публичный ключ для его расшифровки.

Проблема здесь что получится длинный "ключ" (лицензия на самом деле).
С другой стороны, зачем тебе короткий ключ? Раньше он был нужен чтобы его руками вводить под диктовку. А сейчас?

hardware id я бы не советовал. Точнее, как именно ты его собираешься вычислять?
Есть неиллюзорные шансы получить массу гемора с оборудованием и злых клиентов.

В общем, я не заморачиваюсь (но у меня софт B2B, компании практически не пользуются паленым софтом, если им нужна поддержка)
Если кто решит ломать, будут ломать код, а не ключ.
Отредактировано 20.03.2022 19:23 bnk . Предыдущая версия .
Re: Организация активации пробной версии
От: drVanо Россия https://vmpsoft.com
Дата: 21.03.22 05:52
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Надо сделать такую штуку: пользователь устанавливает мою программу, жмет "активировать пробную версию", и программа сколько-то работает, как полная версия.

U_E>Ключи генерю VMProtect-ом.
U_E>Сначал думал делать так: программа отправляет на сервер активации hardware id, в ответ получает ключ с зашитым в нем expiration date.
U_E>Но ведь очень легко злоумышленнику на сервер отправлять произвольные hardware id. Таким образом, можно каждый день получать новый ключ, делая триал вечным.

HWID отправленный на сервер активации нужен:
1. Для поиска ранее выданного триального ключа для данного HWID. Если найден ранее выданный ключ, то сервер активации отправляет его.
2. Для генерации нового ключа с привязкой к HWID при этом сам HWID будет зашит внутрь ключа и на стороне защищенной программы VMProtect также проверит соответствие HWID компьютера с HWID в ключе.

U_E>Можно запрашивать email и отправлять на него короткий ключ активации (на сервер программа, таким образом, отправляет короткий ключ и hardware id, тогда смысла менять hardware id нет). Как будто бы это выглядит приемлемым решением. Правда, я видел софт, который не запрашивает email, но активирует пробный переиод. Как они это делают?


Обычно для триальной версия активируется вшитым в саму программу триальным кодом активации (на стороне сервера активации у этого кода устанавливается требуемый триальный период) и email пользователя серверу активации нафиг не нужен.
Отредактировано 21.03.2022 5:52 drVanо . Предыдущая версия .
Re[4]: Организация активации пробной версии
От: drVanо Россия https://vmpsoft.com
Дата: 21.03.22 08:06
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Зашей hardware id в ключ. В программе сравнивай hardware id из ключа с реальным. Тогда как минимум надо будет менять логику в твоей программе тем или иным образом.


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