Hace poco estuve leyendo un artículo sobre formas inteligentes en que los programadores han protegido sus juegos de los piratas, como los creadores de Game Dev Tycoon . Esto me hizo sentir curiosidad: ¿cómo detectan que la copia del juego en ejecución es, de hecho, una versión pirateada a nivel técnico? La respuesta más cercana que pude encontrar a través de algunas investigaciones fue cómo los cartuchos SNES pueden detectar si están pirateados , pero esa táctica obviamente no se aplica a las PC.
27
Respuestas:
Primero lo primero: no hay forma de que una computadora sepa si un archivo está pirateado o no. La piratería es un término legal / moral y, por lo tanto, no tiene ningún significado en un archivo, que solo se compone de unos y ceros.
Dicho esto, la prevención de la piratería y las contramedidas generalmente se centran en descubrir si un usuario tiene o no algo (generalmente un objeto) que solo se puede obtener si se compró una copia del juego, y hace que sea difícil de duplicar. Hay muchas formas de hacer esto, cada una con ventajas y defectos. Mencionaré algunos:
Los primeros juegos pedían a los usuarios que ingresaran una palabra del manual del juego, que solo debería obtener si compró una caja de juegos. Sin embargo, una fotocopiadora o un escáner vence fácilmente esta técnica.
Más recientemente, las verificaciones de medios son más comunes. La idea es que requiera que el CD del juego esté en la unidad para que el juego se ejecute. Para implementar esto, por ejemplo, puede acceder a archivos de datos críticos desde el CD sin los cuales el juego no puede ejecutarse, o simplemente verificar la existencia de un archivo en el CD. Esto funcionó bastante bien cuando los CD eran difíciles de duplicar, pero las copiadoras de CD y, más recientemente, los emuladores de unidades pueden usarse para derrotar fácilmente esta técnica.
Sin embargo, las copias de CD no son perfectas, por lo que muchas otras técnicas se centran en detectar si el CD es el CD original o una copia. Para implementar esto, un juego puede verificar si hay elementos no estándar que se insertan en el disco del juego durante el tiempo de impresión, pero no pueden ser replicados fácil y confiablemente por una grabadora de CD, en un CD-R. Algunas formas comunes de hacer esto son:
Crear archivos "fantasmas" ficticios en el CD durante la masterización, a los que no se puede acceder desde el sistema de archivos del CD, pero existen, y se pueden leer si sabe dónde encontrarlos. Estos datos están ausentes en las copias de disco archivo por archivo. Sin embargo, al copiar toda la imagen del disco se copiarán estos archivos.
Otra forma es insertar errores intencionalmente en el disco. Los CD contienen códigos de corrección de errores. Al insertar errores en los datos, que un lector de discos puede corregir de manera transparente, el disco funcionará normalmente, pero los errores no se copiarán en el CD-R. Al buscar estos errores intencionales, un juego puede considerar que un CD es una copia original impresa. Sin embargo, las copias de la imagen de disco RAW lo superan
Insertar sectores gemelos, con la misma dirección pero datos diferentes arrojará resultados diferentes cuando se buscan datos hacia adelante y hacia atrás. Es posible verificar la existencia de esto, y duplicar un CD con estos sectores gemelos es muy difícil.
Medición de la posición real de los hoyos en el CD. Una vez más, duplicar un CD con los hoyos en las mismas posiciones es muy difícil.
Sin embargo, muchos emuladores de CD, como Daemon Tools o Alcohol 120%, pueden emular estas características. Debido a esto, muchos editores eligen incluir un paso de detección de emulador de CD y evitar que el juego se ejecute si se detecta un emulador. Sin embargo, la implementación de un detector de emulador está fuera del alcance de esta respuesta.
En lugar de, o además de buscar un CD físico, un juego puede solicitar al usuario que ingrese algunos datos, como una clave de producto . Algunas formas de usar claves de producto son:
Comprobación de características matemáticas en la clave. Sin embargo, esto no evita la duplicación de claves, y si se descubre el algoritmo de verificación o se aplica ingeniería inversa, un pirata puede crear nuevas claves a voluntad que parecerán legítimas para el juego. El software que crea claves a voluntad se llama " keygen ".
Generando un hash basado en el hardware del usuario, envíe este hash y la clave del producto (generalmente una combinación, llamada "clave de instalación") a un servidor propiedad de la compañía de juegos y, en función del hash y el serial, cree una clave de activación . Utilizando métodos numéricos unidireccionales (como la aritmética modular, o algunos métodos con curvas elípticas), un juego puede ver si la clave de activación coincide con el código hash y serial, y solo se ejecuta si coinciden. Esta técnica se llama "activación".
Con la activación, un servidor puede negarse a proporcionar claves de activación para múltiples hashes de hardware con el mismo código de serie. Debido a esto, incluso si el código de serie y la clave de activación se copian, la clave de activación no coincidirá y el juego no se ejecutará en otras computadoras.
Todas estas medidas están destinadas a determinar si el usuario posee o no una copia comprada del juego. Sin embargo, implementarlos requiere un código de programa que verifique esto. Es posible que un pirata modifique el código del juego para deshabilitar u omitir las comprobaciones en lugar de atacar los mecanismos de protección contra copia. El acto de modificar los binarios del juego para eliminar las comprobaciones antipiratería se denomina "cracking".
El craqueo puede consistir simplemente en desmontar el ejecutable del juego, encontrar el lugar donde se realizan las verificaciones relevantes, modificarlo para deshabilitar las verificaciones o ignorar los resultados y volver a armarlo. Algunas formas de contrarrestar las grietas son:
Comprobando el binario con algo de hash. Sin embargo, debe haber un programa que verifique el hash, que a su vez también se puede descifrar.
Cifrar el programa, o simplemente la rutina de verificación, y descifrarlo en tiempo de ejecución. Esto hace que el desmontaje sea más difícil, ya que implica uno o más pasos de descifrado adicionales. SI la clave de descifrado se incluye en el programa (como debe ser, porque sin él, el juego no se puede descifrar), entonces el pirata puede realizar ingeniería inversa del descifrado, encontrar la rutina y romper la protección de copia.
Debido a esto, como editor de juegos, desea hacer que la clave sea lo más difícil de encontrar posible y, opcionalmente, hacer que el algoritmo de descifrado sea difícil de entender. Algunas formas de hacer que la clave sea difícil de encontrar son:
Obscurecerlo creándolo de formas extrañas. Esto simplemente ralentiza el proceso de craqueo.
Cree claves maestras por máquina similares a la protección en serie mencionada anteriormente.
Sin embargo, independientemente del método que use para crear sus claves, las claves mismas estarán en la memoria mientras se realiza el descifrado. Los inspectores de memoria, depuradores y emuladores pueden ayudar a un pirata a encontrar y copiar la clave mientras está en la memoria. El espionaje de la memoria se puede atacar de varias maneras:
Tener un servicio privilegiado que detecta los accesos a la memoria en la región especificada y redirige el direccionamiento a otro lugar. Como esto requiere acceso de anillo 0, y los programas que hacen esto se usan más comúnmente para fines no tan legítimos , el software antivirus generalmente los bloquea. (esta es la razón por la cual muchos juegos y otro software piden desactivar la protección antivirus cuando se ejecutan). Escribir software que haga esto correctamente es extremadamente difícil y puede comprometer fácilmente la estabilidad y la seguridad del sistema operativo host. El escándalo XCP es un buen ejemplo de una implementación incorrecta de este método.
El hardware y los sistemas operativos modernos proporcionan algunas herramientas, como cortinas de memoria , rutas de medios seguras y módulos TP , para facilitar la creación de un programa que descifre los datos, a la vez que sea resistente a la inspección de la memoria.
Hay muchas más técnicas para atacar la piratería, que van desde lo trivial a lo esotérico. Desafortunadamente, es posible que todas estas técnicas no reconozcan una copia genuina, y generalmente son las técnicas más agresivas las que tienen mayores proporciones de falsos positivos.
Como editor de juegos, generalmente desea elegir un conjunto de técnicas cuyo costo de implementación, el tiempo esperado de craqueo y la relación de falsos positivos estén en línea con sus expectativas.
Es un error común pensar que la protección contra la piratería está destinada a ser completamente irrompible. La mayoría de las ventas de juegos ocurren en los primeros meses después del lanzamiento, por lo que un esquema de protección contra la piratería generalmente se considera efectivo si romperlo consume suficiente tiempo para que el editor del juego obtenga una gran cantidad de ganancias antes de que se rompa.
En cuanto a Game Dev Tycoon, no utilizaron ninguna tecnología antipiratería. Simplemente crearon una compilación "rota" y la distribuyeron a través de BitTorrent, como se indica al comienzo del artículo que mencionó.
fuente
Es bastante fácil, solo tiene que ejecutar un MD5 o SHA256 en su propio ejecutable, luego, cuando detecta que la firma ha cambiado de lo que codificó en el binario después de construir la versión final, entonces está claro que alguien hackeó su ejecutable. Entonces, la mayoría de las empresas, ya no solo muestran una ventana emergente (era el caso antes) que dice "PE roto" o "virus detectado" y luego salen del juego, porque esto será contrarrestado muy rápido por los hackers. Debido a que el juego está en pausa en el bucle de mensajes del cuadro de diálogo, es inmediato ver por qué rama se colocó el cuadro de diálogo, y simplemente omita la rama cambiando el código en la verificación de condición.
Hoy en día, las empresas utilizan cambios muy sutiles en la jugabilidad, como multiplicar la vida de los monstruos para que el juego no se pueda jugar, o se integre de manera increíblemente inteligente en este juego de administración, donde administras una compañía de juegos y finalmente pierdes porque demasiados jugadores piratearon tu juego. Nice mise en abyme en este caso. A veces, solo recibe una bandera roja cargada en los servidores de la compañía, y cuando desea llamarlos para obtener ayuda, recibe un discurso o queda atrapado para revelar su identidad.
Pero esto es todo tema, la técnica es hashing. y estas comprobaciones pueden ejecutarse en muchos lugares del binario, de modo que si los hackers encuentran uno y lo borran, no es suficiente.
EDITAR: si solo copia el juego tal como está, puede funcionar si el juego no tiene ninguna medida antipiratería. Funcionaba con juegos muy antiguos, pre grabadoras de CD. Por eso, la mayoría de las veces, el juego debe instalarse para ejecutarse, no solo la carpeta de instalación copiada. Esto implica archivos ocultos colocados un poco en todas partes del sistema y claves de registro. El juego verifica la presencia de estas cosas, que solo pueden ser creadas por el instalador. Y el instalador solo puede ejecutarse desde el CD, que no es copiable debido a bits erráticos que no respetan el sistema de código de corrección de errores en los primeros bytes del disco, que mata a la mayoría de los controladores del reproductor de CD. Algunos softwares de copia, como nero of alcohol, le proponen ignorar los errores, pero lo que queman es una copia corregida, el instalador lo detecta y listo.
EDIT2:
@ Byte56: Maldición, estamos recibiendo comentarios inteligentes aquí :) Sí, es una paradoja y no se puede resolver. Por lo tanto, el hash debe hacerse por parte del binario que no contiene el hash. Y el código de verificación tiene que saber eso, para excluir esa zona cuando se realiza el hashing para autoverificarse. He visto personas que usan etiquetas, como ~~ #### [poner hash aquí] #### ~~ para encerrar su hash y hacer la exclusión. Pero tiene la falla de ser fácil de detectar para los piratas informáticos, por lo que el hash debe ser codificado y dispersado en múltiples ubicaciones. Incluso encriptado por qué no, y la misma operación de camuflaje va a almacenar la clave privada.
fuente
no pueden simplemente poner una partición ext en un juego de mac
Mac no puede leer ext
fuente