Возможно ли предотвратить декомпилирование приложения?
Я почитал в разных источниках про декомпиляцию приложений. На многих я встретил такие фразы как "можно", "не совсем все но можно", "иерархию получить нет но прочитать все что в скриптах можно".
Из этого вопрос: можно ли как-то сделать невозможным декомпиляю приложения и невозможным посмотреть что в скриптах написано?
Тут по большей части вопрос о том, как писать приложение (если оно онлайн). Данные-то сохраняются на сервере. Но если можно вскрыть приложение и слать "нужные" данные на сервер, то можно так читить, что мало кому понравится.
Либо само приложение сделать так чтобы его нельзя было вскрыть и подменить данные, а так же запросы шифровать. Либо вторично на самом сервере проверять полученные данные и сопоставлять возможны ли такие изменения...
Да и, тут же, по теме: как фотон к этому относится? Шифрует он чего ли и перепроверяет ли?
P.s. - конечно на данный момент не стоит вопрос о безопасности, но на будущее... может и сами скрипты нужно будет писать по-другому...
То есть абсолютно все может быть взломано?
А если каким-то образом приложение зашифровано так что код может быть понять только дешифровщиком на сервере?
Там выше привели пример что есть возможность зашифровать код, учитывая что оно стоит денег, полагаю сам код невозможно прочитать, иначе какой смысл той программы...
Zimaell, смысл в том чтобы сделать невыгодным взлом по временным/трудовым затратам. А так "ломается" все, даже сверхнавороченая Denuvo. Если же хочется защитить критически важный код, то только выносить на свои сервера и выполнять там. Естественно заморочившись защитой самих серверов.
Ну и да: никогда слепо не доверяйте данным полученным от "клиента", все нужно проверять перед применением/сохранением в бд.
Единственный способ гарантированно защититься от взлома - передавать клиенту итоговую 'картинку', а с клиента пересылать его действия. Вырожденный случай - игроки подключаются к вашему серверу с чем то типа remote desktop (такая возможность достаточно давно появилась в игровых движках).
Конечно нет нужды передавать именно изображение, достаточно транслировать ограниченную информацию об объектах мира, только ту что нужна для отображения - координаты и состояние (например поза игрока), зато можно не передавать информацию об объектах, которые клиент не видит, (тогда не будет возможности видеть противника 'сквозь стены').
Недостаток - некоторая сложность разработки и чувствительность к сетевым проблемам (пользователям будет некомфортно играть на лагах).
Все остальное можно будет взломать, трафик проанализировать. Конечно можно сделать это максимально сложной и дорогой, но это и для вас разработку усложнит.
Но чтобы игроку передавать "итоговую картинку" это нужно чтобы на сервере происходили полностью все просчеты, как это сделать если например игра типа Tower Defence, где куча пушек стреляет в кучу юнитов, это нужно какое-то виртуальное отдельное серверное приложение создавать с виртуальной сценой, а игрокам отдавать итоги, не в курсе таких реализаций, если есть подскажите...
Зачем виртуализировать, это имело бы смысл если бы вы действительно отдавали бы доступ к реальной сессии стандартному remote desktop, такому как rdp или vnc (или что то типа teamviewer/anydesk, кстати с ними у вас были бы проблемы с мышкой, точнее они решаемые но нетривиальным способом) но это дикие расходы на серверное железо и проблемы с лицензиями (дорого использовать rdp например, хотя с производительностью там все ок).
Ваше приложение действительно должно просчитывать для каждого пользователя его видимую область (2д или 3д это уже часности) но заводить для этого какую то виртуализацию не нужно. На самом деле реализация сетевого взаимодействия пользователей в этом случае очень простое, ведь все будет происходить у вас на локальном сервере, контролируемое окружение, никаких рассинхронизаций и прочее.