Warcraft 3 TFT, parche 1.26.
Cuando se lanzó Warcraft 3, hizo uso de un lenguaje de secuencias de comandos patentado llamado JASS. El compilador para este lenguaje de scripting tenía un defecto extremadamente importante: solo verificaba el tipo de la última declaración de retorno.
Lo que esto significaba era que las personas podían tomar una referencia (implementada por una dirección), devolverla como si fuera un número entero y luego devolver un número entero para hacer feliz al compilador.
la función H2I toma el control h devuelve un entero
return h // h es un identificador, no un entero !!!
volver 0
función final
- Si el mundo real fuera un juego, ¿cuáles serían algunos ejemplos de buen diseño de juegos?
- ¿Cuáles son algunos ejemplos de la vida como un videojuego?
- ¿Es Ash Ketchum un buen entrenador de Pokémon?
- ¿Dónde puedo encontrar una buena PC para juegos por un precio de 150 euros o menos?
- ¿Por qué tantos juegos de IPL se pierden, y el destino se decide por una caída o un lanzamiento completo?
Esta función se compiló y esencialmente actuó como un tipo de conversión de una referencia a un “número único” (es decir, la interpretación entera de la dirección).
Cuando las personas crearon mapas personalizados para Warcraft 3, usaron funciones como esta para obtener identificadores únicos para los objetos, y luego usaron esos identificadores como claves en las tablas para almacenar información adicional, como “la cantidad de veces que una unidad ha matado otra unidad “.
Como era de esperar, el mecanismo también podría usarse en la dirección opuesta, para generar una referencia a partir de un número.
la función I2H toma un entero i devuelve el identificador
regreso yo
volver nulo
función final
Las cosas se pusieron emocionantes en 2010, cuando un grupo de personas se dio cuenta de lo que esto podría hacer si lo usa para obtener un código de referencia.
la función I2C toma un entero i devuelve el código
regreso yo
volver nulo
función final
Entonces, ¿qué pasaría si ejecutaras el código obtenido de esta manera? Examinaría la región de memoria dirigida por el parámetro entero y comenzaría a interpretar esa región de memoria como si fuera un código de máquina. Lo que esas personas hicieron ahora fue simple:
- Crea un nuevo mapa personalizado
- Importe algún “modelo 3D” roto, que en realidad no era un modelo, sino un código de máquina que instaló un virus
- Obtenga la dirección del modelo y conviértala en código
- Ejecute ese código mientras se cargaba el mapa
Pero las personas a menudo no juegan mapas que no conocen: en su mayoría jugaron DotA y algunos otros mapas (FF, BS, BT, TD, HD, … si estuvieras allí, sabes lo que soy hablando sobre). Entonces, para propagar rápidamente los virus, abusaron de un segundo error en Warcraft 3. Para ser precisos, un error en la pantalla de selección de juegos. Lo que hizo la pantalla de selección de juegos fue enumerar todos los mapas personalizados que estaban esperando a los jugadores, con el nombre del mapa y un pequeño icono de vista previa. La idea era que los mapas que aún no había descargado se mostrarían con un signo de interrogación, en lugar del icono de vista previa real. Excepto que la pantalla de selección del juego solo usaba el nombre del mapa personalizado para determinar si ya lo había descargado o no. Entonces, simplemente usando el mismo nombre que algunos de los mapas grandes, como “DotA_3.64.w3x” (o cualesquiera que sean los nombres), esas personas podrían engañar al juego y a los jugadores para que crean que esos mapas son el verdadero negocio.
Para hacer que la ilusión sea perfecta, los mapas personalizados infectados se mantuvieron en un tamaño pequeño, para que la descarga real se completara mientras la pantalla pasaba de la pantalla de selección de juegos al lobby de mapas personalizados. De esa manera, un jugador solo pudo notar el fraude después de que comenzó el juego, momento en el que el virus ya estaba instalado. Nadie estaba a salvo.
La ventisca estaba en llamas. Ellos tenían que hacer algo. Y lo que hicieron fue el temido parche 1.26. Se dirigieron a desarrolladores de mapas personalizados y les advirtieron con algunas semanas de anticipación: vamos a arreglar tus mapas. No más “error de retorno”. No más H2I. No más moldes de tipo simple. Arregla tus mapas o muere. Y murieron, lo hicieron … Algunos mapas grandes, como DotA y Battleships Crossfire, estaban en mantenimiento activo y se arreglaron antes de que el parche se pusiera en línea. Pero muchos otros grandes mapas quedaron imposibles de jugar de la noche a la mañana. La sección de mapas personalizados se redujo de más de 7 géneros a un pequeño puñado de mapas. Los mapeadores abandonaron el juego en masa. Starcraft II no pudo capturarlos. Es por eso que TheHelper.net, una de las comunidades de mapeo más grandes de la época, pasó de cientos de publicaciones diarias a quizás veinte por año.