Все больше и больше игр движутся по маршруту, управляемому данными, а это означает, что вокруг простых манипуляций должен быть уровень безопасности. Я видел это, когда игры полностью объединяют свои ресурсы (аудио, искусство, данные), и мне интересно, как они справляются с этим? Существуют ли приложения / библиотеки, которые будут объединять и помогать вам управлять ресурсами внутри? Если нет, то есть ли хорошие ресурсы, которые вы бы указали для упаковки / распаковки / шифрования?
Этот конкретный вопрос вращается вокруг C ++, но я был бы открыт, чтобы услышать, как это делается и в C # / XNA.
Просто чтобы прояснить - я не собираюсь разрабатывать решение для предотвращения взлома. На фундаментальном уровне мы все манипулируем 0 и 1. Но мы хотим, чтобы 99% людей, которые играют в игру, просто не изменяли XML-файлы, используемые для создания игрового мира. Я видел множество игр, объединивших все свои ресурсы. Мне просто любопытно, какие методы они используют.
источник
Ответы:
Хорошая стратегия состоит в том, чтобы создать свой собственный формат архива с нуля и сделать его индексированным с таблицей, указывающей на порции данных, вместо того, чтобы хранить целые последовательные файлы в вашем архиве, затем зашифровывать таблицу индексов и сжимать каждый порцию отдельно, используя LZMA / Bzip2.
Другой подход заключается в том, чтобы использовать биты процедурных генераторов данных здесь и там (если вы захотите зайти так далеко, вы даже можете получить «параметры» для указанных генераторов с онлайн-сервера в качестве дополнительной меры), и выгрузив часть работы на GPU вы также можете предотвратить полный дамп памяти и компенсировать потерю производительности.
Тем не менее, я нахожу, что такие методы обычно снижают производительность и тратят время на разработку, при этом конечному пользователю ничего не предлагая, кроме потенциальных проблем и ненужных ошибок.
Тем не менее, ничто не на 100% безопасно.
источник
Не отправляйте конфиденциальные данные.
Там нет никакого способа , чтобы отправить зашифрованные данные так , что только игра может получить к нему доступ. Вы можете очень сильно постараться, но вы быстро попадаете в проблемы DRM.
Если вы хотите держать свои игровые активы подальше от посторонних глаз.
xor
файлmy_level.zip.xor
, использоватьmy_level.map
).Это остановит 95% вредных пользователей. Остальные 5% получат это независимо от того, что вы делаете.
Вам не нужно на самом деле молнии и
xor
. Вместо этого вы можете использовать lzma и использовать AES с известным ключом. Дело в том, чтобы не тратить на это много времени.источник
That will stop 95% of mischeivieous users.
выходить из этого, хотя я верю, что есть еще люди, которые действительно получат это, я был бы признателен, если бы не все и каждый мог. В наши дни большинство 10-летних детей знают, как открывать файлы в блокноте и переименовывать его ...Тратить много времени на это, вероятно, глупо. Существуют инструменты для сбора данных текстуры и модели непосредственно из графического процессора, и звуки можно легко направить на виртуальное устройство с обратной связью. Все, что должно быть по-настоящему защищено, должно жить на сервере и работать только через вызов / ответ. Проверка данных клиента - это еще одна история, более похожая на Valve -verify_all. Это все еще сложно, так как вы не можете доверять локальному исполняемому файлу для его принудительного исполнения (или, по крайней мере, вы не можете доверять ему больше, чем доверяете своей античит-системе конечной точки, что также является глупой идеей).
источник
Моя работа связана с защитой от взлома. Я знаю кого-то, кто взломщик игр старой школы. Он взламывает игры, как дыхание. Вы не можете остановить таких людей, как он. Если ваша игра достаточно популярна, несколько взломанных версий игры появятся на торрент-сайтах всего через несколько дней после релиза, независимо от того, что вы делаете. Мой совет - просто сделать минимум, чтобы не пускать среднего Джо, который думает, что, возможно, захочет нанести удар этой вещи с реверс-инжинирингом.
источник
Хороший вопрос, но на этот вопрос нелегко ответить.
Исходя из моего опыта с безопасностью данных, вы должны думать о следующем:
1) Что вы защищаете, от кого и каково влияние, если эти данные небезопасны - безопасность гораздо больше относится к оценке рисков, чем к системным техническим решениям
2) Я предполагаю, что ваша платформа является настольной (например, Windows / OSX) в этом случае у вас есть другое проблемное пространство, чем проприетарное оборудование, такое как PS3 / Xenon, которые имеют свои собственные попытки защиты на уровне ядра (является ли это действительным решением, открытым для обсуждения)
3) Шифрование! = безопасность. Шифрование только гарантирует, что ваши данные не могут быть прочитаны , но и не гарантирует, что ваши данные не могут быть записаны или воспроизведены / проксированы.
Если ваши требования состоят в том, чтобы защитить ваши данные от подделки, вам нужно подумать о хешировании ваших данных (желательно с SHA-256 или SHA-512). Чтобы повторить итерацию, подумайте, почему это важно и что вы получаете от повышения безопасности своего система.
Также стоит знать, что добавление технологии шифрования к вашему продукту может иметь юридические последствия из-за экспортных ограничений (технология шифрования классифицируется как технология ограничения вооружений, верите или нет), поэтому рекомендуется использовать библиотеки, которые преодолели эти юридические проблемы.
Наконец - никогда, никогда не используйте свою собственную технологию шифрования - используйте хорошо известные, документированные, исследованные алгоритмы, такие как AES, Blowfish, RSA и т. Д.
ps Открытый / закрытый ключ не подходит или не подходит для шифрования больших объемов данных, поэтому DRM / PGP и т. д. используют гибридную симметричную систему RSA +, т. е. защищают симметричный ключ с помощью RSA, а затем выполняют стандартное симметричное шифрование с использованием этого ключа.
Это очень большой сложный предмет, и я определенно не сделал это справедливо
надеюсь, это поможет
источник
Если вам нужен пример формата, который был спроектирован и создан (возможно, чрезмерно усиленный) для того, чтобы он был маленьким (сжимаемым), смехотворно безопасным и гибким, вам следует обратиться к формату Blizzard MPQ.
http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format
Общий формат архива выглядит следующим образом:
Данные файла данных файла заголовка архива - Специальные файлы Таблица блоков хэш-таблицы Таблица расширенных блоков Сильная цифровая подпись
Этот формат имеет ВСЕ. Блокируемая, расширенная блокируемая, данные разбиваются на сектора (для упрощения потоковой передачи), поддержка 7 (!) Алгоритмов сжатия (если вы считаете сжатие звука), которые можно произвольно комбинировать, слабая цифровая подпись, сильная цифровая подпись и так далее.
Если бы вы купили API от Blizzard, который занимается файловой архитектурой, вы получили бы все, что вам когда-либо понадобится, и многое другое.
источник
Поскольку это было недавно возрождено, ваш вопрос (и, следовательно, все ответы на данный момент), кажется, имеет дело только с загрузкой файла, которая настолько же безопасна, как исполняемый файл, который хочет его загрузить. На ПК нет ничего действительно защищенного (вы просто задерживаете людей), вы можете проверять данные на серверах, но даже эта проверка может быть удалена, так что модифицированные exe-файлы можно запускать независимо от того, что. Консоли по-прежнему «довольно» защищены, поэтому в большинстве случаев я генерирую хэш важных файлов, затем подписываю хэш с закрытым ключом, встраиваю открытый ключ в код и проверяю защищенный хэш для файла.
Я думал, что добавлю еще одну атаку в разговор, с чем я столкнулся только в прошлом году, потому что я не склонен много загружать на ПК. Cheat Engine - очень аккуратная маленькая программа, которая почти автоматизирует создание ваших собственных хаков (а это значит, что каждый может ее использовать). Он довольно продвинут в том, что он может делать, многие хаки / читы, которые я видел, что люди продают, сделаны этим или чем-то очень похожим на то, что я видел (все массовые). С некоторой работой вы можете защитить себя от подобных вещей снова, я думаю, все зависит от того, насколько популярна игра и если кто-то заботится о том, чтобы беспокоиться.
Оппс, забыл упомянуть, что хорошей библиотекой для шифрования (в C ++) является LibTomCrypt .
источник