Пакет пользовательского содержимого для файлов

13

Я собираюсь купить несколько моделей пакетов с веб-сайта для создания прототипа моей игры. В контракте говорится, что я должен защищать их, чтобы не дать общественности получить к ним доступ.

Я помню, как работал с играми Valve, они использовали .gcf (файл игрового контента), который в основном представлял собой архив всего контента для каждой игры. Они упакованы в звук / материалы / модели / карты / и т. Д. Я подумал, что не может быть плохой идеей разработать что-то похожее на это, и просто написать небольшой инструмент, позволяющий мне добавлять / удалять файлы из него.

Проблема в том, что я действительно понятия не имею, как начать что-то подобное. Я пробовал Google, но я даже не знал, что искать. Если у кого-то есть идеи, ссылки, которые могут быть полезны, или что-то еще, я был бы очень признателен.

Эйдан Найт
источник

Ответы:

9

Храните ваши данные в слегка неясном архивном формате, таком как 7-Zip .

Дайте им другое расширение файла, чтобы обычный пользователь не мог легко открыть их с помощью zip-программы.

Используйте PhysFs для чтения и доступа к этим файлам. Он также позволяет вам работать с файлами в вашем локальном каталоге, так что вы можете легко тестировать новые ресурсы, не перестраивая ваши пакеты. Настоятельно рекомендуется.

Рассмотрим очень тривиальное шифрование контента, например. XOR шифрование . Напишите небольшой пакетный файл или скрипт для сборки ваших пакетов, шифруя данные по мере их поступления, и используйте ту же функцию для расшифровки данных в вашей игре.

Это не будет держать определенного пользователя вне - ничего не будет. Но это будет достаточно хорошо, чтобы удовлетворить требования ваших моделей пакетов.

Kylotan
источник
Кто-то порекомендовал мне вчерашних врачей. Хорошая маленькая библиотека.
Greyfade
8

Если вы просто создаете прототипы, то я не буду беспокоиться о том, чтобы упаковать ваши активы в файл GCF / ZIP / PAK; публика не увидит ваш прототип!

Кроме того, GCF от Valve обеспечивает такую ​​же защиту вашего контента, как и ZIP-файл, то есть ноль. Файл не зашифрован; Вы можете скачать GCFScape, чтобы просмотреть и извлечь его содержимое.

Это не стоит положить усилия в создании собственного пакета файловой системы , если у вас есть конкретные потребности прямо сейчас , не удовлетворяются ZIP файлы или собственный механизм доступа к файлам в ОС; на самом деле, единственные причины, о которых я могу думать, это:

  • Обфускация контента (для сохранения ваших файлов без необходимости использования; я все еще рекомендую использовать его для ваших текущих потребностей),
  • Хранение дополнительных метаданных для каждого файла в зависимости от игры, чтобы каким-то образом помочь вашему контенту управлять данными,
  • Обход ограничений файловой системы ОС, таких как необходимость быстрого доступа к тысячам небольших файлов или обеспечение непрерывного доступа к данным. (Это де-факто нужно при работе на консолях.)
Блэр Холлоуэй
источник
Я полностью согласен. Проблема в том, что я не смогу выпустить демоверсию без какой-либо защиты. ЗИП слишком хорошо известен, ПАК примерно такой же. По крайней мере, с пользовательским форматом (Valve требуется ключ CTX, который жестко запрограммирован в игровом движке для доступа к файлам GCF), средний джо не сможет просто запустить на нем инструмент извлечения и войти.
Aidan Knight
Woops, не понимал, что ввод не будет идти по линии. В любом случае, я обнаружил этот nemesis.thewavelength.net/index.php?p=35, который, похоже, является Lib с открытым исходным кодом, который обеспечивает функциональность GCF, независимую от игр Valve. Проблема, которую я вижу здесь, заключается в том, что она слишком надежна, и я искал что-то более простое, чтобы просто создать базовую версию для дальнейшего развития. (Если честно, то, как он кодирует, заставляет мою голову болеть)
Эйдан Найт,
4
Из любопытства упоминается ли в этом контракте, как вы должны защищать их контент?
Блэр Холлоуэй
2
в этом-то и дело! Так как вы не можете обеспечить его безопасность, вам обязательно (если вы не глупы) точно знать, что эти некомпетентные люди хотят от вас. В противном случае, что бы вы ни делали, так как это не сработает, вы можете быть привлечены к ответственности (за то, что вы не сделали то, что не могло быть сделано в первую очередь).
о0 '.
3

Это требование, ну, фигня.

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

Вы не можете добавить безопасность. Я повторяю: вы просто не можете добавить безопасность . Вы можете только добавить безвестность, а безвестность совершенно бессмысленна, поскольку, как я уже сказал, пользователь с достаточным умением и решительностью просто сломает ее.

Не подписывайте ничего, что просит вас о том, что нельзя сделать.

о0' .
источник
1
Непрозрачность не лишена смысла, потому что у большинства пользователей нет «достаточных навыков и решимости». То же самое касается обеспечения безопасности вашего дома: любой, кто действительно хочет туда попасть, может сделать это, но все равно считается, что делать это неудобно для них.
Kylotan
Контрапункт: неизвестность не имеет смысла, потому что, в отличие от проникновения в ваш дом, если кто-то проник в вашу игру, он может сделать это тривиально. (С другой стороны - Obscurity не является бессмысленным, потому что Бретту нужны модели. Я просто не думаю, что аналогия хорошо держится.)
Если кто-то украл кусок золота из вашего дома, у него есть ваш кусок золота. Если кто-то извлечет вашу драгоценную модель из вашего файла данных, он может сделать столько копий, сколько пожелает. Так что, нет, этот пример не работает, так как здесь совершенно не важно, сколько людей взломают вашу бесполезную защиту: достаточно одного.
о0 '.
Одного достаточно, при условии, что другие будут достаточно внимательны, чтобы перестать смотреть на свои локальные файлы и выходить в интернет, чтобы посмотреть, и при условии, что кто-то приложил усилия для публикации материалов в Интернете (что является незаконным, в то время как просмотр вашей локальной копии - нет) или публикации инструкции, которые предполагают, что у вас есть терпение, чтобы пройти с ними. Каждый по нитке.
Kylotan
1
Каждая маленькая помогает для чего ? Запрещать пользователям просматривать ваши данные и ничего не делать с ними так бессмысленно, что мне грустно. Это идиотское требование наверняка существует для предотвращения повторного использования этих данных другими людьми, поэтому вам нужно заботиться только о решительных людях, которые будут стараться и добиваться успеха (потому что, как я уже сказал, в конечном итоге они просто не могут потерпеть неудачу) ,
о0 '.
1

Часто я замечаю, что пакеты с пользовательским содержимым, как правило, представляют собой архивы .zip или .rar с другим расширением. Конечно, это бесполезно, если веб-сайт хочет какое-то специальное шифрование.

Кристофер Хоренштейн
источник
Да, Ogre уже поддерживает загрузку ресурсов через zip-файл. Кто-то упомянул в чате только что переписать zip-файл, но с количеством инструментов для их взлома, это действительно не мой первый выбор. Мне бы очень хотелось сделать что-то похожее на файлы .gcf, которые использует Valve, но я даже не знаю, что искать, чтобы начать.
Эйдан Найт
Если кто-то взломает ваш zip-файл, какова ваша проблема? В самом деле. Они могут взломать все, что вы можете бросить в них. Ты пытался. Где вы проводите черту за то, за что эти лицензиары могут считать вас ответственными?
Neverender
1

Несколько идей:

1] Использовали ли вы стандартный формат модели (например, .obj или .x) или вы используете собственный формат модели при загрузке непосредственно в игру? Если у вас есть нестандартный формат, и вам нужно будет перепроектировать формат вашей модели, чтобы получить его в полезной форме, то у вас уже есть некоторый уровень защиты от оппортунистического риппера активов.

2] Идея Kylotan о шифровании XOR превосходна, за исключением того, что вы можете зашифровать с использованием последовательности, сгенерированной псевдослучайным числом (возможно, засеянной хэшем в имени файла), чтобы избежать длинных последовательностей нулей в ваших исходных данных, показывающих вашу строку шифрования. Конечно, вам придется дешифровать файлы на месте сразу после их загрузки, но разбиение зашифрованного файла на блоки с возможностью перезапуска позволит вам начать дешифрование на месте в нескольких потоках, если это действительно стало нагрузкой во время загрузки. , Но я серьезно сомневаюсь, что этот уровень «защиты» необходим - особенно, как говорили другие, решительный риппер справится с этим. например. перехватывая вызовы отрисовки, используя обходную библиотеку DLL, и непосредственно считывая буферы вершин / индексы.

3] Вам нужно будет спросить у исходного провайдера активов об их требованиях к защите, но это может быть просто вопрос о защите авторских прав на активную заставку вашей программы и / или ваше лицензионное соглашение.

jpaver
источник