Paquete de contenido personalizado para archivos

13

Estoy a punto de comprar bastantes paquetes de modelos de un sitio web para crear prototipos de mi juego. En el contrato establece que debo protegerlos para evitar que el público tenga acceso a ellos.

Recuerdo haber trabajado con los juegos de Valve, ellos usaron .gcf (archivo de contenido del juego) que básicamente era un archivo de todo el contenido de cada juego. Empacaron en sonido / materiales / modelos / mapas / etc. Pensé que podría no ser una mala idea desarrollar algo similar a esto, y simplemente escribir una pequeña herramienta para permitirme agregar / eliminar archivos.

El problema es que realmente no tengo idea de cómo comenzar con algo como esto. Probé Google pero ni siquiera sabía qué buscar. Si alguien tiene alguna idea, enlaces que puedan ser útiles, o cualquier otra cosa, lo agradecería enormemente.

Aidan Knight
fuente

Respuestas:

9

Almacene sus datos en un formato de archivo ligeramente oscuro, como 7-Zip .

Dales una extensión de archivo diferente para que un usuario casual no pueda abrirlos fácilmente con su programa zip.

Use physfs para leer y acceder a esos archivos. También le permite trabajar con archivos en su directorio local, para que pueda probar fácilmente nuevos recursos sin reconstruir sus paquetes. Muy recomendable.

Considere un cifrado muy trivial en el contenido, por ejemplo. Encriptación XOR . Escriba un pequeño archivo por lotes o script para construir sus paquetes, encriptando los datos a medida que ingresan, y use la misma función para descifrar los datos en su juego.

Esto no mantendrá alejado a un usuario determinado, nada lo hará. Pero será lo suficientemente bueno como para satisfacer los requisitos de sus paquetes de modelos.

Kylotan
fuente
Alguien me recomendó physfs la otra noche. Bonita y pequeña biblioteca.
greyfade
8

Si solo está creando prototipos, entonces no me preocuparía empaquetar sus activos en un archivo GCF / ZIP / PAK; ¡El público no va a ver tu prototipo!

Además, el GCF de Valve proporciona tanta protección para su contenido como lo haría un archivo ZIP, es decir, cero. El archivo no está encriptado; Puede descargar GCFScape para explorar y extraer su contenido.

No vale la pena esforzarse en crear su propio sistema de archivos de paquetes a menos que tenga necesidades específicas en este momento que los archivos ZIP o el mecanismo de acceso a archivos del sistema operativo no satisfacen; de hecho, las únicas razones por las que puedo pensar son:

  • Ofuscación de contenido (mantener sus archivos libres de modificaciones tiene sus usos; todavía sugiero que sea excesivo para sus necesidades actuales),
  • Almacenar metadatos adicionales por archivo de una manera específica del juego para ayudar a impulsar los datos de su contenido de alguna manera,
  • Eludir las limitaciones del sistema de archivos del sistema operativo, como la necesidad de acceder a miles de archivos pequeños rápidamente o garantizar el acceso contiguo a los datos. (Esta es una necesidad de facto cuando se trabaja en consolas).
Blair Holloway
fuente
Concuerdo completamente. El problema es que no podré lanzar una demostración sin alguna forma de protección. ZIP es demasiado conocido, PAK es casi lo mismo. Al menos con un formato personalizado (Valve requiere una clave CTX que está codificada en el motor del juego para acceder a los archivos GCF), Joe no podrá ejecutar una herramienta de extracción y entrar.
Aidan Knight
Woops, no me di cuenta de que enter no iría por una línea. De todos modos, encontré esta némesis.thewavelength.net/index.php?p=35 que parece ser una Lib de código abierto que proporciona funcionalidad GCF independiente de los juegos de Valve. El problema que veo aquí es que es demasiado robusto, y estaba buscando algo un poco más simple solo para crear una versión básica para ampliarla más tarde. (Para ser sincero, la forma en que codifica me duele la cabeza)
Aidan Knight
44
Por curiosidad, ¿este contrato menciona cómo se supone que debes proteger su contenido?
Blair Holloway
2
¡ese es el punto! Como realmente no puede asegurarlo, es obligatorio para usted (si no es estúpido) saber exactamente lo que estos incompetentes quieren que haga. De lo contrario, haga lo que haga, ya que no funcionará, puede ser considerado responsable (de no hacer algo que no podría hacerse en primer lugar).
o0 '.
3

Este requisito es, bueno, una mierda.

Dado que el juego puede acceder a los datos, y el usuario tiene acceso al juego, si tiene la habilidad y la determinación suficientes, logrará realizar una ingeniería inversa del formato que utilizó para almacenar los datos y tomar la clave eventual si fue lo suficientemente tonto para encriptarlo.

No puede agregar seguridad. Repito: simplemente NO PUEDES agregar seguridad . Solo puede agregar oscuridad, y la oscuridad es totalmente inútil, ya que, como dije, un usuario con suficiente habilidad y determinación simplemente lo romperá.

No firme nada que le pregunte algo que no se puede hacer.

o0 '.
fuente
1
La oscuridad no tiene sentido porque la mayoría de los usuarios no tienen "suficiente habilidad y determinación". Lo mismo ocurre con la seguridad de su hogar: cualquiera que realmente quiera entrar puede hacerlo, pero aún así se considera que vale la pena hacerlo incómodo para ellos.
Kylotan
Contrapunto: La oscuridad no tiene sentido porque, a diferencia de irrumpir en tu casa, una vez que alguien ha entrado en tu juego, puede ser trivial para que cualquier otra persona lo haga. (Por otro lado, la oscuridad no es inútil, porque Brett necesita los modelos. Simplemente no creo que la analogía se mantenga bien).
Si alguien roba una pieza de oro de su hogar, tiene su pieza de oro. Si alguien toma su precioso modelo de su archivo de datos, puede hacer tantas copias como desee. Entonces, no, este ejemplo no funciona, ya que aquí no importa cuántas personas quiebren su protección inútil: una es suficiente.
o0 '.
Uno es suficiente, suponiendo que los demás se preocupen lo suficiente como para dejar de mirar sus archivos locales y conectarse en línea para buscar, y proporcionar a alguien que se haya esforzado por publicar las cosas en línea (lo cual es ilegal, mientras que ver su copia local no lo es), o publicar instrucciones, que suponen que tienes la paciencia para seguirlas. Toda pequeña ayuda.
Kylotan
1
¿Cada pequeña ayuda para qué ? Evitar que los usuarios vean sus datos y no hagan nada al respecto es tan inútil que me pone triste. Este requisito idiota ciertamente existe para evitar que otras personas reutilicen esos datos, por lo que solo debe preocuparse por las personas determinadas que se esforzarán y triunfarán (porque, como dije, a la larga simplemente no pueden fallar) .
o0 '.
1

Muchas veces noto que los paquetes de contenido personalizado tienden a ser un archivo .zip o .rar con una extensión diferente. Por supuesto, esto no es bueno si el sitio web quiere algún tipo de cifrado personalizado.

Christopher Horenstein
fuente
Sí, Ogre ya admite la carga de recursos a través de un archivo zip. Alguien mencionó en una sala de chat simplemente la contraseña del archivo zip, pero con la cantidad de herramientas disponibles para descifrarlas, realmente no es mi primera opción. Realmente me gustaría hacer algo similar a los archivos .gcf que usa Valve, pero ni siquiera sé qué buscar en cuanto a comenzar.
Aidan Knight
Si alguien descifra su archivo zip, ¿cómo es ese su problema? De Verdad. Pueden romper cualquier cosa que les arrojes. Intentaste. ¿Dónde traza la línea de lo que estos licenciantes pueden responsabilizarlo?
Neverender
1

Algunas ideas

1] ¿Has utilizado un formato de modelo estándar (por ejemplo, .obj o .x) o utilizas un formato de modelo personalizado al cargar directamente en tu juego? Si tiene un formato personalizado, y uno tendría que aplicar ingeniería inversa al formato de su modelo para obtener una forma útil, entonces ya tiene cierto nivel de protección contra el destripador de activos oportunista.

2] El punto de Kylotan sobre el cifrado XOR es excelente, excepto para tener en cuenta que puede cifrar usando una secuencia generada por un número pseudoaleatorio (posiblemente sembrado por un hash en el nombre del archivo) para evitar largas secuencias de ceros en sus datos de origen que muestran su cadena de cifrado. Por supuesto, tendría que descifrar sus archivos en el lugar inmediatamente después de cargarlos, pero dividir su archivo cifrado en bloques reiniciables le permitirá iniciar el descifrado en el lugar en varios subprocesos si esto realmente se convirtió en una carga de tiempo de carga . Pero dudo seriamente que se requiera este nivel de "protección", particularmente, como otros han dicho, el destripador determinado lo evitará. p.ej. interceptando las llamadas de sorteo mediante el uso de una biblioteca de desvío de DLL y leyendo directamente los búferes de vértices / búferes de índice.

3] Tendría que preguntar al proveedor de activos original sobre sus requisitos de protección, pero podría ser solo una cuestión de agregar una propaganda sobre los derechos de autor de los activos a la pantalla de inicio de su programa y / o su EULA.

jpaver
fuente