Задать вопрос
@prog199708

Как определить, что пользователь использует официальную версию клиента программы?

Надо определить, что пользователь использует официальную версию клиента, а не посторонние копии, как это можно сделать
  • Вопрос задан
  • 13495 просмотров
Подписаться 2 Простой 5 комментариев
Решения вопроса 1
@rPman
Только разместив ключевую часть алгоритма его работы на своем сервере, требуя доступ приложению к нему по сети, можно получить какие то гарантии, в пределах стоимости ревносинжегеринга и воспроизведения ее пользователем самостоятельно.

Вырожденный и достаточно простой способ реализации - запуск всего приложения на своем сервере с предоставлением удаленного доступа (например по ms rdp) и тщательной настройкой рабочего места пользователя на сервере в режиме киоск (что бы нельзя было получить доступ к файлам программы для их копирования).

Все иные простые способы будет взломаны, как только это кому либо понадобится достаточно сильно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
mayton2019
@mayton2019
Bigdata Engineer
Вопрос должен звучать так -
Купил ли пользователь лицензию или достаточное число лицензий?


А то что он сделал копию у соседа - это вобщем-то не должно вас волновать.
Ответ написан
Комментировать
radhab20
@radhab20
Мир вам!
Это вопрос, над которым бьются лучшие программисты человечества, но пока вроде как ничего не получается
Ответ написан
Комментировать
@0CYBEaR0
Можно использовать аналог DRM. Например, при установке программы генерировать пару открытый-закрытый ключ, шифровать закрытым ключом ключевые файлы программы (например, библиотеку, ответственную за вызов платных функций или основное приложение, если используется лаунчер для его запуска). После установки юзер должен соединиться с сервером, предъявить свой открытый ключ и зарегистрировать его (это можно и автоматически делать используя, например, фингерпринт устройства). Ввод кода лицензии на стороне клиента говорит серверу, что этот код сопоставляется этому открытому ключу.

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

P.S. забыл добавить. При таких раскладах все вычислительные мощности возложены на юзера, а проверка лицензии - жалкие килобайты трафика
Ответ написан
@Le0Wolf
C# Developper
Необходимо защитить от взлома или просто достаточно просто проверки лицензии?
Если первое - то это дорого и долго и один фиг 100% защиту создать невозможно. Если второе, то тупо создать какую то структуру, которая содержит всю информацию о лицензии, потом сериализовать ее в бинарный формат, после чего сформировать подпись, используя закрытый ключ, подпись тоже сериализовать и добавить к основному тексту. Полученный массив байт преобразовать в base64 или что то подобное - это будет лицензионный ключ. В приложение зашить открытый ключ и с помощью него проверять корректность подписи. Если подпись корректна, то можно проверять и тело ключа, например, на предмет окончания срока его действия. Примерно так работает абсолютное большинство проверок лицензии,но тут есть и минус - простой подменой публичного ключа в коде программы пользователь может заставить ее работать со своим ключём (примерно так кейгены работают - они патчат приложение и потом генерируют ключ, который будет валиден для нового открытого ключа). Задачу взлома можно усложнить, шифруя публичный ключ, разделяя его на блоки, используя всякую математику и пр. Но это уже выходит за рамки "простого" вопроса
Ответ написан
Комментировать
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
Если есть авторизация пользователя, возможность проверки оплаты и ограничение на количество одновременно обращающихся IP адресов от это пользователя - вообще не должно быть важно, официальный клиент или нет. Всегда нужно считать, что клиент взломали или используют самописный. Главное - API сервера, что оно позволяет делать.
Ответ написан
Комментировать
@Raderd
Двух факторная аутентификация, желательно с номером телефона и дополнительно google authenticator.проверка всех файлов на целостность в онлайн режиме,вход через номер телефона каждый раз,если это все отключили, пролечили, тогда предоставлять доступ только определенным айпи адресам, часть кода программы сделать не загружаемым в компьютер.невозможность запуска программы через ВПН.невозможность запуска программы без антивируса.использовать только последнюю версию Виндоус с последними апдейтами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы