SuccessVM
@SuccessVM
Программирование - творчество

Как реализовать защиту приложения по его «железу» и дальнейшей авторизацией на сервере?

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

Задача:

Обезопасить ПО, чтобы вначале шло подключение к моему серверу и только после авторизации на моём сервере, клиент подключался к партнёру.

Планирую сервер на инфраструктуре .net core операционная система Debian. Рассматриваю также вариант с Azure, но на данном этапе в этом нет необходимости.

Цели:

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

Данная мера необходима для того, чтобы пользователи не смогли обманывать систему, постоянно регистрируя новые демо аккаунты, повторной переустановкой ОС или создания виртуальных машин. Это хороший стимул для приобретения\продления платной подписки.

Мой сервер, также будет собирать статистику по клиенту, но в будущем.
--
Вопросы:

  1. Как лучше реализовать данную задачу, понимая тот факт, что данные подключения к партнёрскому серверу необходимо передавать по сети, только после авторизации на моём сервере?

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

  2. Какое подключение лучше реализовать в данном случая, http или сокет, просьба написать ссылки на интересные библиотеки по реализации сокет соединений (C#, .net), если есть?

  3. Как передавать такие данные, шифровать их или нет, какие готовые решения существуют, просьба написать ссылки на такие решения (C#, .net), если есть?

  4. Какие готовые решения существуют для получения всех основных характеристик «железа» ПК, процессов, жесткий диск, видеокарта, мат. плата и т.д, дальнейшее конвертирование данных характеристик в уникальный ключ? Интересуют библиотека на платформе .net, язык C#.
  • Вопрос задан
  • 2152 просмотра
Пригласить эксперта
Ответы на вопрос 2
Вы ведь новости читаете, крэк группы выкладывают свои труды регулярно для новинок ИГР, Софта.

.net и c/c++/asm откроют за пару часов при желании.
К железу привязываться - звонки с жалобами, HDD/CPU/Motherboard заменил и программа не запускается. Отломают быстрее чем напишите.

Всю важную проверку на сервер, клиент при желании сломает все.
Логин-пароль должно хватать, или думать что нить, но при росте популярности обойдут.

VM - vmware есть настройки, обнаружение VM сработает если вы сами его напишите или не слишком распространенный способ использовать будите.

Клиент не должен подключаться к партнеру на прямую, узнают через wireshark/netstat/... ip, и вас обойдут в этой цепи.
Данные шифровать через https, проблем не будет, firewall пропустит.

Флаги установки программы на ПК обходят быстро, снимают снимок состояния ПК, ставят ваше ПО, удаляют его, делают еще 1 снимок. Сравниваются 2 снимка, находят флаг присутствия установки программы. У MS такая утилита даже есть, название забыл.

Хочется защиты - используйте виртуальные машины (~VMProtec), квалификация средняя и выше нужна для их взлома.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Создавайте трехзвеньевую структуру, и реализуйте всю бизнес-логику у себя на сервере, клиент просто для просмотра. Как пример Diablo 3, все реализовано на сервере близардов, сама игра лишь рисует данные полученные от сервера, как итог, никто и не ломал, нет смысла.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы