Этот проект не претендует на 100%'ную защиту, однако является хорошим шаблоном для создания вашей собственной защиты
Проект предоставляется "как есть" без гарантий защиты от конкретных читов, отсутствия крашей и совместимости
Трижды подумайте стоит ли устанавливать защиту если у вас в команде нет компетентных специалистов, которые смогут решить возникшие проблемы
- Установите Visual Studio 2019 и JDK
- Установите переменную окружения JAVA_HOME с указанием пути до вашей JDK
- Откройте проект в Visual Studio и настройте конфиг в Config.h
- Выберите ReleaseStatic и x86. Выполните сборку. После чего измените архитектуру на x64 и повторите сборку.
- Неподписанные билды будут лежать в ReleaseStatic для x86 и x64/ReleaseStatic для x64.
- Рекомедуется подписать exe и dll файлы для минимизации ложноположительных срабатываний. Самоподписанные сертификаты тоже подойдут, если они грамотно составлены
- Скопируйте wrapper(32/64).exe и AntiInject(64/32).dll в папку guard лаунчесрвера. Укажите guardType wrapper. Перезапустите лаунчсервер и сделайте билд
- Проблема: Масштабирование окна майнкрафта на Windows на экранах с высоким DPI
Решение: укажите поддержку высокого DPI в манифесте wrapper(Свойства->Инструмент манифеста->Ввод и вывод->Поддержка DPI) (уже сделано мной) - Проблема: Низкий FPS на ноутбуках с NVIDIA Optimus
Решение: В панели управления NVIDIA укажите файлу wrapper'a дискретную видеокарту по умолчанию - Проблема: Краш при использовании оверлея NVIDIA Experience (не подтверждено)
Решение: Выключить оверлей NVIDIA Experience(по умолчанию выключен)
По умолчанию функционал, связанный с лицензиями вырезан, но вы можете его вернуть если хотите разрабатывать собственную закрытую защиту
Всё что написано дальше относится только к разработчикам своей защиты, которые хотят её защитить от кражи и установки на чужие проекты
- Вам понадобится скачать репозиторий libsodium и собрать его под Windows
- Добавьте путь к папки с .h файлами libsodium в "Включаемые каталоги"(раздел Ктаталоги VC++)
- Добавьте путь к папкам с библиотекой libsodium в "Каталоги библиотек"(раздел Ктаталоги VC++)
- Добавьте зависимости от libsodium в Компоновщик->Ввод->Дополнительные зависимости
- Раскомментируйте закомментированные строки в LicenseChecker.cpp и GravitGuard.cpp
- С помощью своей утилиты или стандартного средства libsodium создайте первую пару ключей. Это будут мастер ключи для подписи лицензий
- Отдельно создайте еще одну пару ключей. Это будут ключи под конкретный проект.
- Укажите публичную часть мастер ключа в LicenseChecker.cpp (вручную, побайтово в HEX)
- Сгерерируйте лицензию для себя с помощью LicenseGenerator
- Установите в launcher-modules модуль защиты, который будет передавать при запуске переменную окружения GUARD_SIGNATURE
- Сформируйте GUARD_SIGNATURE путем подписи с помощью своей утилиты или libsodium "ключа сборки" который находится в LicenseChecker.cpp и поставляется с билдом.
Всё что написано дальше относится только к разработчикам своей защиты, которые хотят её защитить от кражи и установки на чужие проекты
Лицензия состоит из заголовка, названия проекта, публичного ключа проекта и подписи ed25519 Википедия. Отзыва лицензии не предусмотрено
Подпись гарантирует, что лицензия была выдана тем, кто владеет мастер ключем для генерации лицензии, а так же связывает публичный ключ проекта с его названием.
Лицензия находится в папке с dll и exe и является публичной(любой игрок может её прочесть)
- Первый шаг - валидация лицензии. Если лицензия валидна, т.е. имеет правильный формат и корректную подпись она запоминается в памяти
- Второй шаг - проверка названия запускаемого файла. Он должен иметь формат ProjectName(32/64).exe
- Третий шаг - проверка переменной окружения GUARD_SIGNATURE. В ней должна содержаться корректная подпись "ключа сборки", подписанное ключем проекта
- Ключ сборки - находится внутри dll и не должен быть известен третьим лицам.
Всё что написано дальше относится только к разработчикам своей защиты, которые хотят её защитить от кражи и установки на чужие проекты
- Администратор проекта projectName с помощью утилиты создает пару ключей - публичный и приватный ключ проекта. Приватный держит в тайне, а публичный отправляет автору защиты, у которого есть мастер ключ
- Автор защиты с помощью LicenseGenerator и своего приватного мастер ключа формирует файл лицензии и отправляет его администратору проекта вместе с билдом и "ключем билда"
- Администратор проекта после получения билда подписывает с помощью утилиты "ключ билда" своим приватным ключем проекта, а полученную подпись вставляет в конфиг модуля(которая станет переменной окружения GUARD_SIGNATURE при запуске)