Решение для авторизации приложения на сервере (C/C++)
Требуется запускать клиентское приложение, только если оно успешно авторизуется на сервере.
Т.е. в каждое приложение будет вшита лицензия. Лицензия + ИП адрес = ключ
Осуществить проверку ключа на сервере и запускать приложение только после авторизации.
Мои догадки по этому поводу:
На сервере и клиенте есть одинаковый механизм шифрования, о которых не знает пользователь, например, что-то вроде hash(hash(key)).
При запуске клиентское приложение будет отправлять служебную информацию: ключ + ип адрес + системное время запуска + еще какие-то данные. ИП и ключ будут проверяться на сервере и при успешном прохождении авторизации - отправлять клиенту tokenFromServer = hash(hash(key + metadata)). Клиент в свою очередь также делает token = hash(hash(key + metadata)), которые отправляет на сервер.
Если tokenFromServer == token, то запускать приложение.
Насколько такой метод подвержен взлому, какие альтернативы, есть ли готовые решения?
Лучше вынести часть функционала на сервер, если уж всё равно нужно постоянное соединение. Тогда для взлома программы надо будет писать свой клон такого сервера.
Есть такой штука как токены. На них можно хранить закрытые ключи. Часть бинарников с функцианальностью можно зашифровать. Не зашефрованной оставить только оболочку. Когда оболочка запускается, ищеться токен и с помоьшью него расшифровывается нужные бинарники в память, и от туда запускаются. Таким образом программа без токена вообще не запуститься. Сломать такое конечно можно, но уже не так просто. Сервер не нужен.
1) Можно вырезать проверку в клиенте, как сказал уже Rsa97.
2) Даже если проверка будет "посложнее", через дизассемблирование можно увидеть механизм шифрования...
Единственное решение, на мой взгляд, это перенести часть логики из софта на сервер + использовать обфускатор и защиту от отладки