11. Integridad en archivos
Partidas de guardado
Ni no kuni
Comprueba constante de 8 bytes al final del archivo
0212E8A4 LDR R0, =0xFFF8 ; Ptr de constante final
0212E8A8 ADD R1, SP, #0x30+const_0 ; Donde se guardara la constante
0212E8AC MOV R2, #8 ; Tamaño de la constante
0212E8B0 STR R3, [SP,#0x30+var_20]
0212E8B4 BL lee_partida
0212E8B8 CMP R0, #0 ; Si ha habido error salir
0212E8BC BEQ salida ; |
0212E8C0 LDR R2, [SP,#0x30+const_0] ; Lee los primeros 4B de la const
0212E8C4 LDR R3, [SP,#0x30+const_4] ; Lee los siguientes 4B de la const
0212E8C8 LDR R1, =0x7D9A32EC ; Los compara con los valores del juego
0212E8CC LDR R0, =0x84A53F0B ; |
0212E8D0 CMP R3, R1 ; |
0212E8D4 CMPEQ R2, R0 ; |
Comprueba constante de 2 bytes al inicio del archivo
12. Integridad en archivos
Partidas de guardado
Ni no kuni
MAC con secreto “nnkn”
0212EADC LDR R1, =0x2141D28 ; Obtiene dirección de contraseña (1)
0212EAE0 MOV R5, R0
0212EAE4 LDR R0, [R1] ; | (1)
0212EAE8 ADD R4, SP, #0x20+var_20 ; Dirección donde guardar el nuevo resumen (2)
0212EAEC LDR R12, [R0,#-0x1D4] ; Obtiene la contraseña
0212EAF0 ADD R3, R5, #0xC000 ; Obtiene dirección de escritura de contraseña
0212EAF4 LDR R2, =0xFFE2 ; Número de bytes calcular el SHA1
0212EAF8 MOV R0, R4 ; | (2)
0212EAFC ADD R1, R5, #2 ; Comienzo para calcular el SHA1
0212EB00 STR R12, [R3,#0x5EC] ; Escribe la contraseña
0212EB04 BL calcula_sha1
0212EB08 ADD R1, R5, #0x3E4 ; Obtiene dirección del resumen original (3)
0212EB0C MOV R0, R4 ; Dirección del nuevo resumen
0212EB10 ADD R3, R5, #0xC000 ; Obtiene dirección de escritura de contraseña
0212EB14 MOV R4, #0 ; Borra contraseña (4)
0212EB18 ADD R1, R1, #0xFC00 ; | (3)
0212EB1C MOV R2, #0x14 ; Número de bytes a comparar (los del resumen)
0212EB20 STR R4, [R3,#0x5EC] ; | (4)
0212EB24 BL compare
0212EB28 CMP R0, #0 ; Comprueba si el resultado es que son iguales
0212EB2C MOVEQ R4, #1 ; | ... en ese caso devuelve true (1)
0212EB30 MOV R0, R4 ; | ... si no devuelve false (0)
13. Integridad en archivos
Archivos con código
Pokémon Blanco
● Archivos protegidos con algún algoritmo
● Sólo se comprueba si hay un bit del firmware activo
● En DeSmuME deshabilitado por defecto
//firmware makes system think it's booted from card
//-- EXTREMELY IMPORTANT!!! This is actually checked by some things. (which things?)
//Thanks to cReDiAr
_MMU_write08<ARMCPU_ARM7>(0x02FFFC40,0x1);
Línea 2305 del archivo NDSSystem.cpp
25. Comunicación Wi-Fi
Comprobación de certificado
Autoridad de Certificación
No haya expirado
No hay errores al leer el certificado
Firma correcta
No comprueba el host
Parte de la CA de Nintendo
1 x Nintendo
3 x CyberTrust
2 x GlobalSign
2 x VeriSign
2 x Thawte
26. Conclusiones
Ingeniería inversa => Análisis de seguridad
Técnicas de cifrado e integridad para evitar
modificaciones
Aspectos de seguridad en comunicación
Wi-Fi
27. ● Reversing iOS apps for fun and profit
● Whatsapp – iOS password generation
● Save Nintendo WiFi
● DWC Network Server Emulator
● Simple HTTPS server in Python + Create CA and Certs
Referencias
28. Benito Palacios Sánchez
Seguridad en Redes de Comunicación
Universidad de Granada
Ingeniería inversa.
Seguridad en juegos de
Nintendo DS