This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Безопасность приложений - это широкая тема, охватывающая все: от безопасных практик разработки до защиты контента вашей игры после ее выпуска. В этом руководстве рассматривается ряд областей в контексте безопасности приложений при использовании движка, инструментов и сервисов Defold:
Большинство разработчиков беспокоит вопрос, как защитить свои разработки от кражи. С юридической точки зрения авторское право, патенты и товарные знаки могут использоваться для защиты различных аспектов интеллектуальной собственности видеоигр. Авторское право дает владельцу исключительное право распространять творческую работу, патенты защищают изобретения, а товарные знаки защищают названия, символы и логотипы.
Также может быть желательно принять технические меры предосторожности для защиты творческой работы в игре. Однако важно помнить, что как только игра оказывается в руках игрока, найти способы извлечь ассеты становится возможно. Это можно сделать путем реверс-инжиниринга игрового приложения и файлов, а также с помощью инструментов, извлекающих текстуры и модели в момент их отправки на GPU или когда другие ассеты загружаются в память.
По этой причине наша общая позиция заключается в том, что если пользователи действительно настроены извлечь ассеты игры, они смогут это сделать.
Разработчики могут добавить собственную защиту, чтобы усложнить, но не сделать невозможным, извлечение ассетов. Обычно это включает разные способы шифрования и обфускации для защиты и сокрытия игровых ассетов.
Применение обфускации исходного кода - это автоматизированный процесс, при котором исходный код намеренно делается трудным для понимания человеком без влияния на результат работы программы. Цель обычно состоит в защите от кражи, а также в усложнении читерства.
В Defold можно применять обфускацию исходного кода либо как шаг перед сборкой, либо как встроенную часть процесса сборки Defold. При обфускации перед сборкой исходный код обрабатывается инструментом обфускации до запуска процесса сборки Defold.
Обфускация во время сборки, напротив, встраивается в процесс сборки с помощью плагина Lua builder. Плагин Lua builder принимает исходный код на вход и возвращает обфусцированную версию исходного кода на выходе. Один из примеров обфускации во время сборки показан в расширении Prometheus, основанном на Lua-обфускаторе Prometheus, доступном на GitHub. Ниже приведен пример использования Prometheus для агрессивной обфускации фрагмента кода (обратите внимание, что такая тяжелая обфускация повлияет на производительность Lua-кода во время выполнения):
Пример:
function init(self)
print("hello")
test.greet("Bob")
end
Обфусцированный результат:
local v={"+qdW","ZK0tEKf=";"XP/IX3+="}for o,J in ipairs({{1;3};{1,1},{2,3}})do while J[1]<J[2]do v[J[1]],v[J[2]],J[1],J[2]=v[J[2]],v[J[1]],J[1]+1,J[2]-1 end end local function J(o)return v[o+45816]end do local o={["/"]=9;["8"]=48;["9"]=1;q=38,o=62;V=33;y=43,d=61,B=50,L=54;v=2;["0"]=21,n=31;p=63;R=5;N=3;i=10;e=35;C=7;l=56;a=47,J=58;m=59;["2"]=36;z=11;M=12;Z=26;O=18;["5"]=20;s=8,["4"]=30,P=55;w=4;U=29;Q=28;r=24,h=41;G=45;c=19;W=34,k=57;T=14,t=44,S=0;f=60;F=42,E=27;u=40;X=25,j=17;["3"]=23,b=13;["1"]=53;Y=32,A=22,K=6,["+"]=16,["6"]=46;["7"]=51;I=37;D=52;H=15,x=49,g=39}local J=type local x=string.sub local d=v local l=string.len local W=string.char local L=table.insert local w=table.concat local h=math.floor for v=1,#d,1 do local X=d[v]if J(X)=="string"then local J=l(X)local H={}local S=1 local k=0 local K=0 while S<=J do local v=x(X,S,S)local d=o[v]if d then k=k+d*64^(3-K)K=K+1 if K==4 then K=0 local o=h(k/65536)local v=h((k%65536)/256)local J=k%256 L(H,W(o,v,J))k=0 end elseif v=="="then L(H,W(h(k/65536)))if S>=J or x(X,S+1,S+1)~="="then L(H,W(h((k%65536)/256)))end break end S=S+1 end d[v]=w(H)end end end local function o(o)test[J(-45815)](o)end function init(v)print(J(-45813))o(J(-45814))end
Во время процесса сборки Defold игровые ресурсы обрабатываются и преобразуются в форматы, подходящие для использования во время выполнения движком Defold. Текстуры компилируются в формат Basis Universal, коллекции, игровые объекты и компоненты преобразуются из человекочитаемого текстового представления в бинарные аналоги, а исходный код Lua обрабатывается и компилируется в байткод. Другие ассеты, например звуковые файлы, используются как есть.
Когда этот процесс завершен, ассеты по одному добавляются в игровой архив. Игровой архив представляет собой большой бинарный файл, а местоположение каждого ресурса внутри архива хранится в файле индекса архива. Формат описан здесь.
Перед тем как исходные файлы Lua добавляются в архив, они также при необходимости шифруются. Шифрование по умолчанию в Defold представляет собой простой блочный шифр, используемый для того, чтобы строки в коде не были сразу видны при просмотре игрового архива бинарным редактором. Его не следует считать криптографически безопасным, поскольку исходный код Defold доступен на GitHub, а ключ шифра виден в исходниках.
Можно добавить собственное шифрование для исходных файлов Lua, реализовав плагин Resource encryption. Такой плагин состоит из части для сборки, которая шифрует ресурсы как часть процесса сборки, и части для выполнения, которая расшифровывает ресурсы при чтении из игрового архива. Базовый плагин Resource Encryption, который можно использовать как отправную точку для собственного шифрования, доступен на GitHub.
Файл game.project будет включен в пакет приложения как есть. Иногда может возникнуть желание хранить открытые ключи доступа к API или похожие значения, которые являются чувствительными, но, возможно, не приватными. Чтобы усилить защиту таких значений, их можно включить в бинарный файл приложения вместо хранения в game.project, при этом они по-прежнему будут доступны для функций API Defold, таких как sys.get_config_string() и подобных. Для этого можно добавить native extension в game.project и использовать макрос DM_DECLARE_CONFIGFILE_EXTENSION, чтобы предоставить собственные переопределения для получения значений конфигурации через функции API Defold. Пример проекта, который можно использовать как отправную точку, доступен на GitHub.
Читерство в видеоиграх существует столько же, сколько и сама игровая индустрия. Когда-то чит-коды публиковались в популярных игровых журналах, а для ранних домашних компьютеров продавались специальные чит-картриджи. По мере развития индустрии и самих игр развивались и читеры вместе со своими методами. Вот некоторые из самых популярных механизмов читерства в играх:
Защищаться от читеров трудно, почти невозможно. Даже облачный гейминг, где игры запускаются на удаленных серверах и сразу транслируются на устройство пользователя, не полностью свободен от читеров.
Defold не предоставляет встроенных античит-решений ни в движке, ни в инструментах и вместо этого оставляет эту задачу одной из множества компаний, специализирующихся на античит-решениях для игр.
Сокеты и HTTP-коммуникация в Defold поддерживают безопасные socket-соединения. Для любой серверной коммуникации рекомендуется использовать защищенные соединения, чтобы аутентифицировать сервер и защитить конфиденциальность и целостность любых передаваемых данных во время передачи от клиента к серверу и обратно. Defold использует популярную и широко применяемую реализацию протоколов TLS и SSL с открытым исходным кодом Mbed TLS. Mbed TLS разрабатывается ARM и их технологическими партнерами.
Чтобы предотвратить атаки типа man-in-the-middle на сетевую коммуникацию, можно проверять цепочку сертификатов во время SSL-handshake при установлении соединения с сервером. Это можно сделать, предоставив сетевому клиенту Defold список публичных ключей. Дополнительную информацию о защите сетевой коммуникации см. в разделе о проверке SSL в руководстве по сети.
Хотя для создания игры не обязательно использовать сторонние библиотеки или native extensions, среди разработчиков стало очень распространенной практикой использовать ассеты с официального Asset Portal для ускорения разработки. Asset Portal содержит большой выбор ассетов: от интеграций со сторонними SDK до менеджеров экранов, UI-библиотек, камер и многого другого.
Ни один из ассетов в Asset Portal не проходил проверку Defold Foundation, и мы не несем ответственности за ущерб вашему компьютеру или другому устройству, а также за потерю данных, возникшие в результате использования любого ассета, полученного через Asset Portal. Подробности можно прочитать в наших Условиях использования.
Мы рекомендуем проверять любой ассет перед использованием, а после того как вы убедились, что он подходит для вашего проекта, создать форк или копию ассета, чтобы он не изменился без вашего ведома.
Облачные серверы сборки Defold (также известные как extender servers) были созданы, чтобы помочь разработчикам добавлять новую функциональность в движок Defold без необходимости пересобирать сам движок. Когда проект Defold, содержащий нативный код, собирается впервые, нативный код и связанные с ним ресурсы отправляются на облачные серверы сборки, где создается кастомная версия движка Defold и возвращается разработчику. Тот же процесс применяется, когда проект собирается с использованием кастомного application manifest для удаления неиспользуемых компонентов из движка.
Облачные серверы сборки размещаются в AWS и созданы в соответствии с лучшими практиками безопасности. Однако Defold Foundation не гарантирует, что облачные серверы сборки будут соответствовать вашим требованиям, будут свободны от дефектов, вирусов, будут безопасными или безошибочными, либо что использование вами этих серверов будет непрерывным и безопасным. Подробности можно прочитать в наших Условиях использования.
Если безопасность и доступность серверов сборки вызывают у вас опасения, мы рекомендуем настроить собственные приватные серверы сборки. Инструкции по настройке собственного сервера можно найти в основном readme-файле репозитория extender на GitHub.
Система Defold Live Update позволяет разработчикам исключать контент из основного игрового бандла, чтобы скачивать и использовать его позже. Типичный сценарий использования - скачивание дополнительных уровней, карт или миров по мере продвижения игрока в игре.
Когда исключенный контент скачивается и подготавливается к использованию в игре, движок выполняет криптографическую проверку этого контента перед использованием, чтобы убедиться, что он не был подменен. Проверка состоит из нескольких этапов:
Подробнее об этом процессе можно прочитать в руководстве по Live Update.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB