Решение для авторизации приложения на сервере (C/C++)

Требуется запускать клиентское приложение, только если оно успешно авторизуется на сервере.
Т.е. в каждое приложение будет вшита лицензия. Лицензия + ИП адрес = ключ

Осуществить проверку ключа на сервере и запускать приложение только после авторизации.

Мои догадки по этому поводу:
На сервере и клиенте есть одинаковый механизм шифрования, о которых не знает пользователь, например, что-то вроде hash(hash(key)).
При запуске клиентское приложение будет отправлять служебную информацию: ключ + ип адрес + системное время запуска + еще какие-то данные. ИП и ключ будут проверяться на сервере и при успешном прохождении авторизации - отправлять клиенту tokenFromServer = hash(hash(key + metadata)). Клиент в свою очередь также делает token = hash(hash(key + metadata)), которые отправляет на сервер.
Если tokenFromServer == token, то запускать приложение.

Насколько такой метод подвержен взлому, какие альтернативы, есть ли готовые решения?
  • Вопрос задан
  • 2932 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
То есть достаточно найти то место, где находится сравнение (tokenFromServer == token) и заменить код операции с == на !=
Ответ написан
gibboncho
@gibboncho
1) Можно вырезать проверку в клиенте, как сказал уже Rsa97.
2) Даже если проверка будет "посложнее", через дизассемблирование можно увидеть механизм шифрования...
Единственное решение, на мой взгляд, это перенести часть логики из софта на сервер + использовать обфускатор и защиту от отладки
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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