Ver Mensaje Individual
Antiguo 21/02/2008, 19:56   #13
SantiPHREACK 
Usuario PREMIUM+
 
Fecha de ingreso: 13/abr/2006
Mensajes: 223
SantiPHREACK está en el buen camino
Wenas, como veo esto un poco parado y poca colaboración, me he puesto a repasar el desensamblado que pusimos del dichoso boot, y he corregido algunos errores del trocito que nos interesa, y quedaría mas o menos así:

[CODE]....
0xBFC0DD04: 21208002 -> 02802021 move $a0, $s4 # Mueve registro -> mov s4 to a0
0xBFC0DD08: 21282002 -> 02202821 move $a1, $s1 # Mueve registro -> mov s1 to a1
0xBFC0DD0C: 3180063C -> 3C068031 lui $a2, 0x8031 # Carga del inmediato superior -> a2 = 0x8031 << 16
0xBFC0DD10: 73360C0C -> 0C0C3673 jal 0x8031D9CC # Salto y enlace -> goto 0xBFC0D9CC
[B]0xBFC0DD14: A0F2C624 -> 24C6F2A0 la $a2, 0xF2A0 # Carga de Dirección de memoria -> a2 = 0x8031F2A0 -> KEY ??[/B]
0xBFC0DD18: F0FF0624 -> 2406FFF0 li $a2, 0xFFFFFFF0 # Carga valor inmediato -> a2 = 0xFFFFFFF0 -> VI ??
0xBFC0DD1C: 24302602 -> 02263024 and $a2, $s1, $a2 # AND -> a2 = (s1 & a2)
0xBFC0DD20: 21308602 -> 02863021 addu $a2, $s4, $a2 # Suma, sin signo -> a2 += (s4 + a2)
0xBFC0DD24: 0001C624 -> 24C60100 addiu $a2, 0x100 # Suma con inmediato, sin signo -> a2 += (a2 + 0x100) ->
0xBFC0DD28: 21208002 -> 02802021 move $a0, $s4 # Mueve registro -> mov s4 to a0
0xBFC0DD2C: 09F8E002 -> 02E0F809 jalr $s7 # Salto y enlace a registro -> goto reg s7
0xBFC0DD30: 2128C002 -> 02C02821 move $a1, $s6 # Mueve registro -> mov s6 to a1
0xBFC0DD34: 0A004054 -> 5440000A bnezl $v0, 0xBFC0DD64 # Salto si no es menor -> if (v0 !> v0) go to 0xBFC0DD64
0xBFC0DD38: 21A80000 -> 0000A821 move $s5, $0 # Mueve registro -> mov zero to s5
0xBFC0DD3C: 59370C08 -> 080C3759 j 0xBFC0DD64 # Salto a direccion -> goto address 0xBFC0DD64
0xBFC0DD40: 2110A002 -> 02A01021 move $v0,$s5 # Mueve registro -> mov s5 to v0
...[/CODE]

Os cuento, el problema que tuve es que al estar desensamblado a mano, en el Offset 0x0DD14 que hay "24C6 F2A0", interprete dicha instrucción "24C6" como una Suma sin signo erróneamente, ya que no me fije que dos instrucciones mas arriba le cargaba a ese mismo registro el comienzo de una dirección de memoria "0x8031", con lo cual la instrucción correcta seria un "la", es decir la carga del Offset "0x8031F2A0" en el registro a2, y sabiendo que a partir de 0x80310000 es la zona de la SRAM donde se almacena la copia de dicho Boot, y equivale al Offset [B]0xBFC0F2A0[/B] de la flash, entonces la dirección que nos interesaría seria "0xF2A0" a secas, y al ir a dicha dirección para ver que es lo que contiene, sorpresa jeje, es una cadena de [B]16 Bytes[/B] que no son código ejecutable ni ningún valor de configuración, y que curiosamente solo la tienen los boots a partir de la vers 0.9.6 que fue cuando empezaron a cifrar los maincodes lo de moresat. xD

[CODE]Offset [B]0xF2A0[/B]: "[B]92...................11[/B]" -> ByteFlopeado = [B]0xF2A0:[/B] "[B]93...................55[/B]" -> KEY ??[/CODE]

Con lo cual me da que pensar que esos 16 Bytes son los que utiliza el boot para descifrar el maincode antes de descomprimirlo, osea la "Key" necesaria jeje, y si nos fijamos un poco mas en el desensamblado, se pueden deducir otros dos parámetros interesantes xD

[CODE][B]"0xFFFFFFF0"[/B] -> Que podría ser el Vector de Inicio necesario para realizar las rondas ??
[B]"0x100" = 256 Bytes[/B] -> Que seguramente sera el tamaño de sector de cada ronda ??[/CODE]

[B]PD:[/B] Yo he probado esa "supuesta" clave ByteFlopeada y sin ByteFlopear con todos los algoritmos simétricos públicos en modo CBC por si era otro, pero sin éxito, osea que como ya vimos anteriormente, seguramente se tratara de una modificación propia que le han realizado al [B]XTEA[/B], con lo cual no queda mas remedio que seguir depurando el desensamblado para intentar portarlo a C u otro lenguaje mas comprensible e ir compilandolo con pequeñas variaciones hasta que demos con la variación del algoritmo que le han hecho.
SantiPHREACK está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir