Как повысить безопасность моего проекта 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), чтобы сравнить различия между запутанным двоичным файлом и исходным двоичным файлом.

Так что, если бы я действительно хотел, я мог бы выполнить те же самые шаги для всех моих важных фрагментов кода (или даже для большей части моего клиентского проекта), а также реализовать любые вышеупомянутые меры безопасности... И, надеюсь, это Теперь для кого-то это будет слишком тяжелой работой, чтобы понять внутреннюю работу моего проекта.

Другие вопросы по тегам