Cada vez más juegos van por la ruta basada en datos, lo que significa que debe haber una capa de seguridad en torno a la manipulación fácil. Lo he visto donde los juegos agrupan por completo sus activos (audio, arte, datos) y me pregunto cómo están manejando eso. ¿Existen aplicaciones / bibliotecas que lo agruparán y lo ayudarán a administrar los activos dentro? Si no, ¿hay algún buen recurso al que apunte para empacar / desempacar / encriptar?
Esta pregunta específica gira en torno a C ++, pero estaría abierto a escuchar cómo se maneja esto también en C # / XNA.
Para ser claros, no estoy dispuesto a diseñar una solución para evitar la piratería. En el nivel fundamental, todos estamos manipulando 0 y 1. Pero, queremos evitar que el 99% de las personas que juegan al juego simplemente modifiquen los archivos XML que se utilizan para construir el mundo del juego. He visto muchos juegos agrupar todos sus recursos juntos. Simplemente tengo curiosidad sobre los métodos que están utilizando.
fuente
Respuestas:
Una buena estrategia es crear su propio formato de archivo desde cero y hacerlo indexado con una tabla que apunte a fragmentos de datos en lugar de almacenar archivos secuenciales completos en su archivo, luego cifre su tabla de índice y comprima cada fragmento por separado usando LZMA / Bzip2.
Otro enfoque es usar bits de generadores de datos de procedimiento aquí y allá (si desea llegar tan lejos, incluso podría obtener los 'parámetros' para dichos generadores de un servidor en línea como una medida adicional), y descargando parte del trabajo a la GPU también puede evitar volcados de memoria completa y compensar parte del rendimiento perdido.
Sin embargo, encuentro que tales técnicas generalmente obstaculizan el rendimiento y desperdician el tiempo de desarrollo, todo el tiempo no ofrecen nada al usuario final sino problemas potenciales y errores innecesarios.
Sin embargo, nada es 100% seguro.
fuente
No envíe datos confidenciales.
No hay forma de enviar datos cifrados para que solo el juego pueda acceder a ellos. Puede esforzarse mucho, pero rápidamente se mete en los problemas de DRM.
Si quieres mantener tus activos de juego lejos de miradas indiscretas.
xor
el archivomy_level.zip.xor
, no , usemy_level.map
).Eso detendrá al 95% de los usuarios maliciosos. El otro 5% lo obtendrá sin importar lo que haga.
No necesita realmente comprimir y
xor
. En su lugar, podría usar lzma y usar AES con una clave conocida. El punto es no gastar mucho tiempo en ello.fuente
That will stop 95% of mischeivieous users.
hecho de romperlo, aunque creo que todavía hay personas que realmente lo conseguirán, agradecería si no todos y cada uno pudiera hacerlo. En estos días, la mayoría de los niños de 10 años saben cómo abrir archivos en el bloc de notas y cambiarle el nombre ...Pasar una gran cantidad de tiempo en esto es probablemente una tontería. Existen herramientas para capturar datos de textura y modelo directamente desde la GPU, y los sonidos pueden apuntar fácilmente a un dispositivo de bucle virtual. Todo lo que necesita ser verdaderamente seguro necesita vivir en un servidor y trabajar solo a través de desafío / respuesta. Hacer la validación de datos del cliente es otra historia, algo más como Valve's -verify_all. Eso sigue siendo difícil, ya que no puede confiar en el ejecutable local para aplicarlo (o al menos no puede confiar en él más de lo que confía en su sistema anti-trampa de punto final, que también es una idea tonta).
fuente
Mi trabajo es en software antisuperficies. Conozco a alguien que es un cracker de juegos de la vieja escuela. Rompe juegos como respirar. No puedes detener a personas como él. Si su juego es lo suficientemente popular, múltiples versiones crackeadas de su juego llegarán a los sitios de torrents solo unos días después del lanzamiento, sin importar lo que haga. Mi consejo es que hagas lo mínimo para mantener alejado al Joe promedio que cree que podría querer darle una puñalada a esta ingeniería inversa.
fuente
Buena pregunta, pero no es fácil responderla.
Según mi experiencia con la seguridad de los datos, debe pensar en lo siguiente:
1) ¿Qué está protegiendo, de quién y cuál es el impacto si esos datos son inseguros? La seguridad tiene mucho más que ver con la evaluación de riesgos que con las soluciones técnicas sistemáticas
2) Supongo que su plataforma es de escritorio (por ejemplo, Windows / OSX) en ese caso un espacio de problemas diferente que el hardware propietario como PS3 / Xenon que tienen sus propios intentos de seguridad a nivel de kernel (si esta es una solución válida está abierta a debate)
3) Cifrado! = seguridad. El cifrado solo garantiza que sus datos no puedan leerse , no garantiza que sus datos no puedan escribirse, reproducirse o representarse.
Si sus requisitos son hacer que sus datos sean a prueba de manipulaciones, entonces debe pensar en el hash de sus datos (preferiblemente con SHA-256 o SHA-512). Sin embargo, para volver a repetir, piense por qué es importante y qué gana al agregar seguridad a su sistema.
También vale la pena saber que agregar tecnología de encriptación a su producto puede tener implicaciones legales debido a restricciones de exportación (la tecnología de encriptación se clasifica como tecnología de grado de armas restringidas, lo crea o no), por lo que es aconsejable usar bibliotecas que hayan superado estos problemas legales.
Finalmente, nunca use su propia tecnología de encriptación, use algoritmos bien conocidos, documentados e investigados como AES, Blowfish, RSA, etc.
ps La clave pública / privada no es adecuada o práctica para cifrar grandes cantidades de datos, por lo tanto, DRM / PGP, etc., utiliza un sistema simétrico RSA + híbrido , es decir, asegura la clave simétrica con RSA y luego realiza el cifrado simétrico estándar con esa clave
Es un tema complejo muy grande y definitivamente no le he hecho justicia.
Espero que ayude
fuente
Si desea un ejemplo de un formato que fue diseñado y construido (probablemente diseñado en exceso) por ser pequeño (compresible), ridículamente seguro y flexible, debe buscar el formato MPQ de Blizzard.
http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format
El diseño general del archivo es el siguiente:
Archivo de encabezado Archivo de datos Datos de archivo - Archivos especiales Tabla hash Tabla de bloques Tabla de bloques extendida Firma digital fuerte
Este formato tiene TODO. Bloqueable, bloqueable extendido, datos divididos en sectores (para una transmisión sencilla), soporte para 7 (!) Algoritmos de compresión (si cuenta la compresión de sonido) que se pueden combinar arbitrariamente, firma digital débil, firma digital fuerte, etc.
Si comprara la API de Blizzard que se ocupa de la arquitectura de archivos, obtendría todo lo que necesitaría y mucho más.
fuente
Como esto ha sido resucitado recientemente, su pregunta (y, por lo tanto, todas las respuestas hasta ahora) solo parece tratar con la carga del archivo, que es tan seguro como el ejecutable que quiere cargarlo. En la PC no hay nada que sea realmente seguro (solo retrasas a las personas), puedes verificar las cosas en los servidores, pero incluso esa verificación se puede eliminar para que los exe modificados se puedan ejecutar sin importar qué. Las consolas todavía son "bonitas", por lo que en la mayoría de los casos allí genero un hash de archivos importantes, luego firmo el hash con una clave privada, incrusto la clave pública en el código y verifico el hash seguro en el archivo.
Pensé en lanzar otro ataque a la conversación, algo que solo encontré el año pasado ya que no tiendo a enviar mucho en la PC. Cheat Engine es un pequeño programa muy ordenado que casi automatiza la creación de tus propios hacks (lo que significa que cualquiera puede usarlo). Está bastante avanzado en lo que puede hacer, muchos de los trucos / trampas que he visto que la gente vende están hechos por esto o algo muy parecido a lo que he visto (todos los del mercado masivo). Con algo de trabajo que pueda proteger contra cosas como esta nuevamente, supongo que todo depende de cuán popular sea el juego y si alguien se preocupa lo suficiente como para molestarse.
Opps, olvidé mencionar que una buena lib para el cifrado (en C ++) es LibTomCrypt .
fuente