El ROM Hacking, ingeniería inversa en videojuegos, es un tema que cada vez más estudios de videojuegos dedican recursos para evitar. El objetivo: proteger los textos para evitar fan-traducciones, los sprites para que sean reutilizados en otros juegos, los mapas para que se hagan mods o las comunicaciones inalámbricas para hacer trampas. Se ofrecerá un resumen de la situación actual y de los algoritmos descubiertos (así como del procedimiento) en algunos videojuegos conocidos.
7. @pleonex en el “mundillo”
○ @GradienWords
■ Ni no kuni: El mago de las tinieblas
(Nintendo DS)
8. @pleonex en el “mundillo”
○ @GradienWords
■ Ni no kuni: El mago de las tinieblas
(Nintendo DS)
■ Xenosaga I (PS 2, en proceso)
■ +3 proyectos secretos en proceso
12. ROM Hacking
1. Cabecera estándar
a. Magic stamp
b. Tamaño fichero
c. Reservado
d. Puntero de datos
2. Cabecera DIB
a. Tamaño DIB
b. Ancho
c. Alto
d. Planos de color
e. BPP
3. Paleta
4. Píxeles
26. Fan traducciones
Traducciones no oficiales de juegos
○ De fans a fans
Parches gratuitos sobre copias originales del juego
TraduSquare: comunidad de fan-traducciones al español
27. Fan traducciones
Datos de juegos de Nintendo DS (fuente Wikipedia)
● Total: 1842
● Por regiones
○ Japón: 865 (47.0 %) (-977)
○ EEUU: 1274 (69.2 %) (-568)
○ Europa: 1172 (63.6 %) (-670)
● En todas las regiones: 386 (20.1 %)
● Solo en Japón: 383 (20.8 %)
● Solo en EEUU: 206 (11.1 %)
36. Cifrado en textos: Pokémon Perla/Diamante
ushort clave = 0x91BD3 * (num + 1);
for (int i = 0; i < data.Length; i ++) {
data[i] = data[i] ^ clave ;
clave = (ushort)(clave + 0x493D);
}
Cifrado XOR sobre todo el bloque de datos
● Clave diferente para cada bloque y dinámica
Tabla de codificación propia para el texto
37. Cifrado en textos: Pokémon Conquest
Cifrado XOR en el archivo
const string Key = "MsgLinker Ver1.00";
for (int i = 0; i < data.Length; i++)
data[i] ^= (byte)Key[i % Key.Length];
38. Cifrado en textos: Ni no kuni
● 99% de los textos están sin cifrado / ofuscación
● Cifrado en 4 archivos con nombres de:
○ Objetos
○ Monstruos (únimos)
○ Ataques
43. Integridad de partidas: Ni no kuni
1. Primeros 16-bits: 00 28
2. Últimos 8 byte: 0B 3F A5 84 EC 32 9A 7D
3. SHA-1 sobre el fichero
a. Pero antes... en 0xC5EC se escribe 6E 6B 6E 6E
son las consonantes del juego ‘nnkn’
b. Después vuelve a poner a 00 esos bytes
c. Comprueba el hash con el almacenado en el fichero
44. Comunicaciones inalámbricas: Nintendo DS
Protocolos comunicación
● HTTP con NAS
● HTTPS con servidor DLC
● Certificados en el juego:
○ Nintendo
○ VeriSign
○ CyberTrust
○ Thawte
○ GlobalSign
48. ● Objetivo: retrasar o desmotivar modificaciones
○ Estas técnicas no evitan la piratería
● Mejores técnicas: ofuscación y algoritmos nuevos
● Tenemos el ensamblador, tenemos el control