Este texto puede contener imprecisiones o declaraciones falsas, este no es realmente mi fuerte pero … creo que la mayoría del razonamiento es correcto. Además, abordaré esto desde la mentalidad de que “la piratería está mal”, ya que está en línea con la pregunta.
La versión TL: DR es:
Cualquier protección de copia en el “lado del cliente” se puede evitar / piratear.
Cualquier protección de copia en el “lado del servidor” se puede evitar / piratear.
Lado del cliente (fuera de línea):
Algunas de las mecánicas más inteligentes se implementaron durante la era c64, pero afaik ningún juego / aplicación que alguien realmente quería descifrar ha sobrevivido. Si la memoria me sirve, esta era cuando se creó la “escena” y los grandes grupos comenzaron a competir por ser los primeros en descifrar un juego. Sin embargo, dado que los juegos se lanzaron una vez, era solo cuestión de tiempo hasta que cualquier juego se descifrara correctamente.
Una buena lectura para comprender cómo funciona el “proceso de craqueo” sería leer “Fixing ET for the Atari 2600”. Aunque la intención es muy diferente, se aplica la misma mecánica. Aquí el juego se soluciona modificando el comportamiento, sin pasar por la protección de copia es lo mismo.
Tradicionalmente, la protección contra copia era algo que se activaba directamente cuando lanzabas el título y si lograbas evitarlo, el juego comenzaría. Algunas de las mecánicas más “inteligentes” consistían en tener una protección contra copia al inicio del juego, y luego tener otra activación más tarde. Hacer creer a las personas que rompieron la primera protección que era buena y luego se dispararía la segunda protección. El principal beneficio de esto fue que creó una “diversión” para los crackers, y que las personas que descargaron el juego obtendrían la copia incorrecta / podrían no molestarse en encontrar la próxima grieta real, etc.
Pantaloon (Fairlight) me habló de una de las protecciones de copia más interesantes de las que ha oído hablar. Puedo recordar los detalles incorrectamente, esta historia fue compartida durante la novena cerveza de la noche.
Algún juego fue enviado en disquete. Cuando ejecutaste el juego, tenía una protección contra copia. Una vez pasado, todo se veía bien. Excepto que la siguiente parte de la protección de copia estaba en el disquete de hardware. Parte del disquete se escribió fuera de los segmentos accesibles. Es decir, si hiciera una copia completa del disquete, esos segmentos no se copiarían. Ese segmento contenía máscaras para modificar la distancia entre objetos específicos en el mundo, lo que significa que si lo estuviera ejecutando desde un “disquete legítimo”, la distancia entre objetos sería diferente en comparación con una versión de copia completa “no legítima”. Sin embargo, como con todo lo demás al que se puede acceder desde el lado del cliente, tan pronto como se encuentre, podría solucionarse simplemente codificando el valor al “valor correcto”.
Lado del cliente con parches:
A continuación, podemos ver cómo funciona el craqueo de un juego: Básicamente se reduce a modificar el código para que “tome otra ruta” o le diga a la aplicación “que la subrutina de protección contra copia se completó con éxito”. Esto generalmente se realiza modificando datos específicos en un lugar específico de la memoria. La liberación de parches, por lo tanto, se modifica donde se puede encontrar “variable”. Es decir, para cada parche lanzado, se debe desarrollar un nuevo crack. Luego, como parte de “compilar” el código, se aseguraría de que el código de ensamblaje sea muy diferente en comparación con la versión anterior.
Esta es también la base para la mayoría de las herramientas modernas de protección contra copia en la actualidad. Pero generalmente se modifica aún más al hacer que el código “evolucione” durante el tiempo de ejecución, lo que significa que algunas variables estarán en “posiciones aleatorias” en la memoria cada vez que se acceda y luego tratarán de que sea REALMENTE difícil rastrear CÓMO se conecta el código y haciéndolo ofuscando el razonamiento detrás de esto. No tengo un buen ejemplo para esto, pero lo intentaré: algún valor reside en la dirección de memoria 10, llegar tradicionalmente sería “cargar la dirección de memoria 10”. Con el DRM moderno que sería “obtener la dirección de memoria x, enmascarada por el valor en la dirección de memoria y, el bit se desplazará por el valor en la dirección de memoria z”. Después de leer el valor, muévalo a otra posición de memoria aleatoria para que no se acceda al mismo lugar la próxima vez y luego modifique los valores y la posición de y & z. Ese valor luego se usaría como una clave para hacer los cálculos de memoria correctos en las rutas posteriores. Luego haga esto entre muchas capas para que sea difícil: 1) No romper el juego y 2) Razonar sobre qué es qué.
Mirar el código de ensamblaje generado por Denuvo hace que mis ojos y mi cerebro sangren. Sin embargo … el juego que usa esa protección todavía se ha descifrado.
Lado del servidor:
La próxima gran cosa sería ofrecer parte del juego o gran parte del juego detrás de un “servidor multijugador”. Este es probablemente el mejor enfoque, ya que se puede omitir cada “capa de protección” en el “lado del cliente”, por lo tanto, restringir el acceso al contenido al pasar por un servidor es mucho más seguro.
Esto ha funcionado bastante bien, sin embargo, en alguna parte necesita enviar datos / activos del servidor al cliente y, por lo tanto, esos datos se pueden duplicar / modificar / guardar / compartir con otros.
En algunos juegos / aplicaciones no es tan malo, para otros es mucho peor. (Por ejemplo, busque “convertir spotify a mp3”).
Dado que, dado que World of Warcraft es solo un juego en línea, te haría pensar que era seguro, pero … hay servidores privados de WoW que puedes descargar. Alguien se ha esforzado por generar su propio código de servidor y luego ha modificado los clientes para que hablen con ese servidor en lugar de con los servidores “públicos”.
Lo mismo se aplica a otros “juegos en línea” como Battlefield, alguien crea un nuevo servidor, modifica el cliente para hablar con ese servidor, todos los que usan ese “cliente descifrado” pueden jugar en el “servidor descifrado”.
Los activos que existen en el cliente siempre se pueden descifrar. Los datos devueltos desde el servidor (al cliente) siempre se pueden almacenar en caché, replicar, guardar y luego proporcionar a un “cliente descifrado de un servidor descifrado”.
Esta sigue siendo la mejor “solución general” que funciona, aunque con respecto a las posibilidades de alojamiento, la cantidad de seguridad que obtienes y sin una mala experiencia de juego.
La solución y el futuro más resistentes:
Transmitir la imagen del juego desde el servidor -> cliente. El cliente autoriza al servidor, el servidor posee todos los activos y nunca envía activos al cliente. El cliente envía “entrada” al servidor, el servidor la recibe, genera un marco y una imagen para enviarla al cliente. Lo que significa que casi todo lo que tiene valor en el servidor y el cliente es simplemente “transmitir una película” (Twitch).
El gran inconveniente de esto es que presenta latencia, por lo que no funcionará para juegos FPS / Action o juegos en los que DEBES tener comentarios constantes, pero para la mayoría de los otros juegos, supongo que esta es una solución correcta, dado que puedes vivir con el ” costo de alojamiento del servidor ”de tener toda la lógica y el procesamiento ejecutados desde el lado del servidor. También puede calcular la lógica de juego en el lado del servidor y luego enviar “flujo de representación” al cliente para utilizar la GPU del cliente.
Sin embargo, dado suficientes “imágenes transmitidas” y suficiente esfuerzo. Supongo que podría generar una solución para proporcionar una “versión agrietada fuera de línea / en línea” donde simplemente mezcle y combine entradas e imágenes para recrear todos los resultados posibles. Y combine eso con un ANN especializado para generar al azar posibles resultados perdidos dado el conjunto masivo de imágenes disponibles y, por lo tanto, incluso esa solución puede ser “descifrada”.
El pensamiento principal que considera relacionado con la protección contra copia es hacerlo “lo suficientemente difícil de romper” para que no se raje durante los primeros días. Luego, para seguir actualizando el juego, cualquier crack quedará “desactualizado”.
La única forma de combatir la piratería es modificar constantemente la “versión actual” para que la “versión descifrada” sea peor de lo que ofrece la compra del producto.
Espero que responda tu pregunta.