Как повысить безопасность моего проекта Unity?
Одним словом, мой проект состоит из:
- Безопасный веб-сервис RESTful API (размещенный на Heroku), обрабатывающий запросы / ответы для базы данных. Он принимает и возвращает данные JSON
- Настольное приложение Unity, которое также является чат-ботом API Twitch и взаимодействует с веб-сервисом для обновления состояния игры, а также состояния базы данных.
- ВАЖНО: Эта игра предназначена для запуска стримерами Twitch, и в нее играют пользователи в чате Twitch.
Итак, мой вопрос... Несмотря на то, что мой веб-сервис защищен, что я могу сделать, чтобы кто-то не просто перепроектировал мое приложение Unity, чтобы выяснить, как правильно взаимодействовать с моим веб-сервером?
Зашифрованные HTTP трафик останавливает перехвата пакетов, но это вопрос спорный сервис, если вы все еще можете использовать те же методы, приложение использует для взаимодействия с данными. Возможно, я слишком параноик, но существует множество инструментов, специально предназначенных для проектов Unity & C#, так что на самом деле это не потребует особых усилий.
У меня была идея использовать API-интерфейс Twitch, чтобы проверить, активно ли пользователь ведет потоковую игру, и разрешить ему запускать игру только в том случае, если веб-служба не может найти дублирующийся IP-адрес в базе данных с флагом isStreaming. задавать. Это работает в теории... но на практике любой может создать на своей машине фальшивую учетную запись Twitch и фальшивый или "пустой" поток, а затем запустить какой-нибудь код, созданный в результате обратного инжиниринга из игры.
Что еще я мог сделать, чтобы минимизировать способность хакера взаимодействовать с моей базой данных?
1 ответ
Простой ответ
- Unity-совместимый код обфускации
Благодаря системе плагинов Unity для этого есть несколько достойных вариантов. Некоторые являются платными опциями, которые существуют в Asset Store, а также оплаченными / бесплатными опциями третьих сторон, которые просто не связаны с Unity (но все еще могут работать). Некоторые из бесплатных опций, такие как ConfuserEx, также имеют открытый исходный код, что позволяет вам вносить изменения в пользовательский код, чтобы скрыть вашу работу.
Более сложный ответ
- Я сделал простую библиотеку классов C# и наполнил ее бессмысленной функциональностью (для тестирования)
- Я скомпилировал сборку релиза библиотеки
- Я запутал его через ConfuserEx, используя агрессивные настройки (Максимальные настройки были выплевывать Unity
Invalid IL code
ошибки) - Я добавил
Assets/Plugins
папку в мой проект Unity, и поместил туда скомпилированную библиотеку - Я создал новый C# скрипт для тестирования библиотеки изнутри Unity
... И хотя декомпилированный код был непонятным, он все же работал, как и ожидалось, в Unity. Я использовал инструмент декомпилятора IL/C# (например, JustDecompile), чтобы сравнить различия между запутанным двоичным файлом и исходным двоичным файлом.
Так что, если бы я действительно хотел, я мог бы выполнить те же самые шаги для всех моих важных фрагментов кода (или даже для большей части моего клиентского проекта), а также реализовать любые вышеупомянутые меры безопасности... И, надеюсь, это Теперь для кого-то это будет слишком тяжелой работой, чтобы понять внутреннюю работу моего проекта.