Ver Mensaje Individual
Antiguo 06/02/2008, 13:48   #10
SantiPHREACK 
Usuario PREMIUM+
 
Fecha de ingreso: 13/abr/2006
Mensajes: 223
SantiPHREACK está en el buen camino
Cita:
Iniciado por barrigaverde Ver mensaje
pues nada te comento sin nisiquiera saber como va el ida que bueno me ha parecido que no lo hace del todo bien pero algo se entiende eso de a mano ya me diras con que haber si es que lo tengo y no lo he utilizado de todas formas grs por tu atencion saludos
Wenas Barrigaverde, te cuento respecto al IDA Pro, al final ya lo he hecho funcionar mas o menos correctamente, siguiendo las instrucciones de configuración que puso "[B]prc600[/B]" en su manual de "TUTORIAL Analyse Firmware FTE-1_EN.zip", y desensambla perfectamente, el único inconveniente es que no lo hace del tirón y hay que ir indicándole por donde debe seguir, osea que es cuestión de dedicarle horas para conseguir un desensamblado del boot completo xD

Con lo de realizarlo a mano, me refiero a utilizar cualquier Disassembler sencillo para MIPS e ir interpretando su "juego de instrucciones" y registros manualmente.

Yo suelo utilizar el "[B]LemAsm.exe[/B]", que aunque se supone que era para las roms de N64, configurándolo correctamente con el "Byteswap" y "Wordswap" también nos vale a nosotros, y que creo que también hay una versión parcheada para los Humax, aunque prefiero el "[B]ps2dis.exe[/B]" que es automático y tiene muchas mas funciones xD

Y a lo de interpretar el "juego de instrucciones" de los MIPS para ver lo que hace cada instrucción, aquí os pongo un ejemplo del trocito que os comente el otro día, con mas o menos las instrucciones que realiza a cada registro para entenderlo mas fácilmente.


[CODE]BootLoader_SMT01---0.9.9_(2007-10-11).bin
-------------------------------------------------------------------------------------------------------------------------
...
0xBFC0DC84: 37008010 -> 10800037 beqz a0,0xBFC0DCA4 // Salto si es igual a 0 -> if (a0 = 0) go to 0xBFC0DCA4
0xBFC0DC88: 21100000 -> 00001021 move v0,0 // Mueve registro -> mov zero to v0
0xBFC0DC8C: 21800000 -> 00008021 move s0,0 // Mueve registro -> mov zero to s0
0xBFC0DC90: 3180023C -> 3C028031 lui v0,0x8031 // Carga del inmediato superior -> v0 = 0x8031 << 16
0xBFC0DC94: A0F24524 -> 2445F2A0 addiu a1,v0,62112 // Suma con inmediato, sin signo -> a1 += (v0 + 0xF2A0)
0xBFC0DC98: F0FF0624 -> 2406FFF0 li a2,65520 // Carga valor inmediato -> a2 = 0xFFF0

0xBFC0DC9C: 08000426 -> 26040008 addiu a0,s0,8 // Suma con inmediato, sin signo -> a0 += (s0 + 8)
0xBFC0DCA0: 21208500 -> 00852021 addu a0,a0,a1 // Suma, sin signo -> a0 += (a0 + a1)
0xBFC0DCA4: 21100502 -> 02051021 addu v0,s0,a1 // Suma, sin signo -> v0 += (s0 + a1)
0xBFC0DCA8: 00004390 -> 90430000 lbu v1,0(v0) // Carga un byte al registro, sin signo -> v1 += k[v0 + 0]
0xBFC0DCAC: 00190300 -> 00031900 sll v1,v1,0x4 // Desplazamiento lógico a la izquierda -> v1 = v1 << 4
0xBFC0DCB0: 24186600 -> 00661824 and v1,v1,a2 // AND -> v1 = (v1 & a2)
0xBFC0DCB4: 00004290 -> 90420000 lbu v0,0(v0) // Carga un byte al registro, sin signo -> v0 += k[v0 + 0]
0xBFC0DCB8: 02110200 -> 00021102 srl v0,v0,0x4 // Desplazamiento lógico a la derecha -> v0 = v0 >> 4
0xBFC0DCBC: 25186200 -> 00621825 or v1,v1,v0 // OR -> v1 = v1 | v0
0xBFC0DCC0: 00008290 -> 90820000 lbu v0,0(a0) // Carga un byte al registro, sin signo -> v0 += k[a0 + 0]
0xBFC0DCC4: 26104300 -> 00431026 xor v0,v0,v1 // XOR, Or exclusivo -> v0 = v0 ^ v1
0xBFC0DCC8: 000082A0 -> A0820000 sb v0,0(a0) // Almacenamiento de byte -> v0 = k[a0 + 0]

0xBFC0DCCC: 01001026 -> 26100001 addiu s0,s0,1 // Suma con inmediato, sin signo -> s0 += (s0 + 1)
0xBFC0DCD0: 0800022A -> 2A020008 slti v0,s0,8 // Inicializar si menor que con inmediato -> v0 = (s0 < 8)

0xBFC0DCD4: F2FF4054 -> 5440FFF2 bnezl v0,0xBFC0DCB0 // Salto si no es menor -> if (v0 !> v0) go to 0xBFC0DCB0
0xBFC0DCD8: 08000426 -> 26040008 addiu a0,s0,8 // Suma con inmediato, sin signo -> a0 += (s0 + 8)

0xBFC0DCDC: 09002012 -> 12200009 beqz s1,0xBFC0DCFC // Salto si es igual a 0 -> if (s1 = 0) go to 0xBFC0DCFC
0xBFC0DCE0: 21800000 -> 00008021 move s0,0 // Mueve registro -> mov zero to s0
0xBFC0DCE4: 21189002 -> 02901821 addu v1,s4,s0 // Suma, sin signo -> v1 += (s4 + s0)
0xBFC0DCE8: 21105002 -> 02501021 addu v0,s2,s0 // Suma, sin signo -> v0 += (s2 + s0)
0xBFC0DCEC: 08004290 -> 90420008 lbu v0,8(v0) // Carga un byte al registro, sin signo -> v0 += k[v0 + 8]
0xBFC0DCF0: 000062A0 -> A0620000 sb v0,0(v1) // Almacenamiento de byte -> v0 = k[v1 + 0]
0xBFC0DCF4: 01001026 -> 26100001 addiu s0,s0,1 // Suma con inmediato, sin signo -> s0 += (s0 + 1)
0xBFC0DCF8: 2B101102 -> 0211102B sltu v0,s0,s1 // Inicializar si menor que -> v0 += (s0 < s1)

0xBFC0DCFC: FAFF4014 -> 1440FFFA bnez v0,0xBFC0DD10 // Salto si no igual -> if (v0 != v0) go to 0xBFC0DD10
0xBFC0DD00: 21189002 -> 02901821 addu v1,s4,s0 // Suma, sin signo -> v1 += (s4 + s0)
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 0x00D9CC // Salto y enlace -> goto 0xD9CC
0xBFC0DD14: A0F2C624 -> 24C6F2A0 addiu a2,a2,60956 // Suma con inmediato, sin signo -> a2 += (a2 + 0xF2A0)
0xBFC0DD18: F0FF0624 -> 2406FFF0 li a2,62112 // Carga valor inmediato -> a2 = 0xFFF0
0xBFC0DD1C: 24302602 -> 02263024 sltu a2,a2,v0 // Inicializar si menor que -> a2 += (a2 < v0)
0xBFC0DD20: 21308602 -> 02863021 addu a2,s4,a2 // Suma, sin signo -> a2 += (s4 + a2)
0xBFC0DD24: 0001C624 -> 24C60100 addiu a2,a2,256 // Suma con inmediato, sin signo -> a2 += (a2 + 256)
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
0xBFC0DD44: 21204002 -> 02402021 move a0,s2 // Mueve registro -> mov s2 to a0
0xBFC0DD48: 2128C002 -> 02C02821 move a1,s6 // Mueve registro -> mov s6 to a1
0xBFC0DD4C: 09F8E002 -> 02E0F809 jalr s7 // Salto y enlace a registro -> goto reg s7
0xBFC0DD50: 21308002 -> 02803021 move a2,s4 // Mueve registro -> mov s4 to a2
0xBFC0DD54: 0100422C -> 2C420001 sltiu v0,v0,1 // Inicializar con inmediato si es menor que -> v0 += (v0 < 1)
0xBFC0DD58: 23100200 -> 00021023 negu v0,v0 // Niega el valor, sin signo -> v0 += v0
0xBFC0DD5C: 24A8A202 -> 02A2A824 and s5,s5,v0 // AND -> s5 = (s5 & v0)
0xBFC0DD60: 2110A002 -> 02A01021 move v0,s5 // Mueve registro -> mov s5 to v0

0xBFC0DD64: 3000BF8F -> 8FBF0030 lw ra,48(sp) // Carga de palabra -> ra = k[sp + 48]
0xBFC0DD68: 2C00B78F -> 8FB7002C lw s7,44(sp) // Carga de palabra -> s7 = k[sp + 44]
0xBFC0DD6C: 2800B68F -> 8FB60028 lw s6,40(sp) // Carga de palabra -> s6 = k[sp + 40]
0xBFC0DD70: 2400B58F -> 8FB50024 lw s5,36(sp) // Carga de palabra -> s5 = k[sp + 36]
0xBFC0DD74: 2000B48F -> 8FB40020 lw s4,32(sp) // Carga de palabra -> s4 = k[sp + 32]
0xBFC0DD78: 1C00B38F -> 8FB3001C lw s3,28(sp) // Carga de palabra -> s3 = k[sp + 28]
0xBFC0DD7C: 1800B28F -> 8FB20018 lw s2,24(sp) // Carga de palabra -> s2 = k[sp + 24]
0xBFC0DD80: 1400B18F -> 8FB10014 lw s1,20(sp) // Carga de palabra -> s1 = k[sp + 20]
0xBFC0DD84: 1000B08F -> 8FB00010 lw s0,16(sp) // Carga de palabra -> s0 = k[sp + 16]

0xBFC0DD88: 0800E003 -> 03E00008 jr ra // Salto a registro -> goto reg ra
0xBFC0DD8C: 3800BD27 -> 27BD0038 addiu sp,sp,56 // Suma con inmediato, sin signo -> sp += (sp + 56)
...
-------------------------------------------------------------------------------------------------------------------------
[/CODE]


[B]PD: [/B]Mas cosas, aunque no tiene nada que ver con el tema, te cuento que lo que comentabas respecto a la lista de clones y configuraciones que llevan los firms en su interior, ya he descubierto para que es jeje, y es simplemente la tabla de identificación de cada byte de la supuesta "[B]Eepron 24c02[/B]" que llevan los MAXs y algunos clones, es decir, es la identificación de cada uno de esos 32 Bytes de esa supuesta eepron y que dependiendo del valor en hexadecimal de cada byte el deco identifica el tipo de Tuner, flash, mando, audio, modelo, etc del clon en concreto, es decir su configuración, por eso si alguno tiene esa eeprom corrupta, no le funcionaria el tuner ni mando correctamente y por mucho que lo flashe no podrá repararlo si no se reprograma correctamente los valores de esa supuesta eeprom xD
Ya tengo localizado lo que significa cada valor en hex de cada byte y su posición en dicha eeprom, y seguramente le incluiré al ALi-Fixer una pequeña utilidad para analizar si el contenido de dicha eepron es correcto simplemente pegando esos 32 bytes y que muestre todos los parámetros de su configuración xD
SantiPHREACK está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir