Dump Repair Ultimate v1.21.09.25
Después de un arduo estudio al firmware MStar no Smart, surge esta nueva aplicación.
Ultimate puede procesar toda la estructura del firmware y mostrar su información.
Estructura general del firmware:
La estructura del firmware, aunque es muy sencilla, tiene cierta complejidad.
Orden de los archivos compilados:
1.- SBOOT (Small Bootloader)
2.- PM (Power Management)
3.- AP_C (Aplicación del Procesador) C = Comprimido.
4.- Módulos (Archivos del sistema)
5.- Caché (No forma parte del firmware)
Este tipo de firmware no contiene cabecera.
El bootloader es la primer parte del firmware y su tamaño es de 64.0 KB (65536 bytes).
En seguida está el PM y tiene el mismo tamaño que el bootloader.
Posteriormente sigue el AP_C y tiene un bloque de 14336 bytes sin compresión.
En este bloque sin compresión se encuentra la tabla de particiones de los módulos.
Después del AP_C se encuentran los módulos y cada uno está separado por un paddind.
El padding se conforma por cierta cantidad de bytes en 0x00, y es un múltiplo de 8 sobre el tamaño del módulo.
Algunos módulos cuentan con un padding extra, pero viene en el archivo y este se suma durante la compilación al padding calculado.
Por este motivo algunos módulos mostrarán un padding que no corresponde al múltiplo de 8 sobre su tamaño.
Los módulos tienen tres formatos de compresión: LZSS, MSCOMPRESS y MSCOMPRESS7, pero no todos están comprimidos.
Por último está el bloque de caché, y aunque no forma parte del firmware, es utilizado como almacenamiento externo.
Es la parte útil que sobra en la memoria SPI Flash tras la instalación del firmware.
En este bloque se almacenan las variables de entorno, los datos de configuración del usuario y una clave HDCP.
A esta clave no le he encontrado utilidad en este tipo de firmware y funcionan aún sin ella, que es cuando se elimina la caché.
Sin embargo, al ingresar al modo de servicio se puede ver que la busca y muestra un error si no la encuentra.
Sobre esta clave he estudiado poco porque no le encontré relevancia.
Datos clave sobre los módulos:
Anteriormente se creía que los módulos terminaban con la firma 0x00BEEF00, pero esto no es así.
Los módulos pueden terminar con cualquier tipo de bytes según su tipo, enseguida el padding y su CRC-16
Esta creencia hacia que las versiones anteriores no obtuvieran todos los módulos, ya que realizaban la búsqueda basada en esta firma.
Ultimate lee la tabla de particiones, lo cual asegura obtener todos los módulos, su posición, su tamaño, su ID, su compresor y su CRC-16
Por esto ahora es posible realizar una comprobación de integridad de cada módulo.
Con respecto a esto, explico sobre la firma 0x0D0A000000001BDE utilizada para encontrar la caché de algunos volcados.
En realidad no es una firma, sino el final del último módulo con padding y CRC-16, este módulo corresponde al archivo "FreeFontNotice.txt".
Como es un archivo de texto, tenemos qué: 0D = "\r" (Retorno de carro), 0A = "\n" (Salto de línea), 00000000 = 4 bytes de padding y 1BDE es su CRC-16
Y aunque no es una firma, sirve perfectamente como tal, ya que siempre se usa el mismo archivo al final del firmware.
Así que sumando 4 bytes (CRC-32 global) se obtiene el final del firmware o donde empieza el bloque de caché.
Este tipo de módulo final es el que caracteriza al firmware para el SoC MSD3393LU/LUM.
Los firmware del tipo TSUMVXX son en los que el último módulo puede terminar con 0x00BEEF + padding + CRC-16.
Un ejemplo sobre esto con Ultimate:

El último módulo es el 48, y podemos ver que tiene 4 bytes de padding y un CRC-16 de 0x1BDE
En un editor hexadecimal se vería así:

En azúl lo que considerábamos la firma y en rojo el CRC-32 global, el resto es caché.
Ultimate ahora solo usa firmas para encontrar cabeceras con información del firmware, tal cual y como lo hace un script de compilación MStar.
Caraterísticas funcionales:
Con Dump Repair Ultimate se podrán reparar los módulos dañados.
Reescribir los CRC-16 de los módulos de forma automática y manual.
Reparar el AP_C y reescribir el CRC-32 global.
Cuenta con varias herramientas para la reparación:
1.- Calculadora de checksums.
2.- Editor hexadecimal, interno y externo a selección.
3.- Visualizador de logotipos por miniaturas y en pantalla completa.
4.- Utilidades de compresión MStar.
5.- Calculadora de padding.
6.- Información sobre la referencia de archivo del módulo.
Notas importantes:
Como los logotipos se pueden reemplazar directamente desde la ventana principal, esta función no está presente en el visualizador.
Se reforzó el algoritmo de reparación por fuerza bruta.
Las utilidades para los módulos están en el menú contextual de la lista al hacer clic derecho sobre alguno.
La descompresión de módulos LZSS se omite cuando se selecciona descomprimir los marcados.
Esto es porque puede tardar bastante y si se cancela se omitirán los que estén en cola.
La descompresión LZSS se debe realizar por separado, ya sea por selección en la lista, o por extracción en RAW y usando el descompresor.
El padding extra es detectado automáticamente durante el reempacado de los módulos.
La referencia del archivo para cada módulo está limitada a la información del archivo BinInfo.h que se use.
Esta aplicación contiene varios, pero obviamente no corresponderán al 100% con el que se usó en la compilación del firmware.
Por lo tanto, algunos identificadores no podrán ser encontrados.
Si tienen alguna duda sobre su funcionamiento, no duden en preguntarme para orientarlos al respecto.
En breve les daré algunos ejemplos de reparación con esta aplicación.
Espero les sea de utilidad y que tengan en cuenta que esta aplicación es el resultado de un profundo estudio y muchas horas de programación.
Me esmeré por terminarla pronto y entregarla sin limitaciones, de forma gratuita, libre de virus y mucho más completa que la aplicación china.
Ah, se me olvidaba... esta aplicación sí funciona.
Suerte con la reparación de sus volcados dañados.