desktop

Creador de Imagen Ext4 para modificar Firmware Mstar

D@rkbytes

Moderador general
El sistema de archivos Ext2, Ext3 y Ext4, es bien sabido que es el usado por el Kernel de Linux, así como Windows usa FAT, FAT32, ExtFat, NTFS, etc.
Windows no tiene soporte para el sistema de archivos de Linux, así que no podemos trabajar con este sistema directamente.
No al menos desde Windows 10, porque existen controladores algo aptos para tener este soporte en XP, 2000 y Windows 8.
Windows 10 en su compilación 20211 o versión 2004, incluyó WSL/2, que es un subsistema Linux que inicialmente era Ubuntu, ahora hay más distribuciones (distros).
Windows 11 también incluye este subsistema y es bastante útil para quienes desean utilizar Linux mediante comandos de consola.
De esta forma, con WSL podremos crear imágenes Ext2/3/4 y también montarlas, hasta sincronizarlas.
Cabe mencionar que el comando en consola: "wsl --install" por defecto instalará Ubuntu.
Si requieren más información sobre WSL (Subsistema de Windows para Linux) pueden visitar este enlace: Instalación de Linux en Windows con WSL

Como este tema de las particiones y comandos Linux son complejos y no cualquiera que use Windows los conoce, me dí a la tarea de crear una aplicación para crear imágenes Ext4, que son las requeridas durante la modificación de los firmware Mstar.
La aplicación la inicié creando imágenes físicas Ext2 y Ext3, pero solo como prueba, porque no son compatibles para las imágenes dentro del firmware Mstar.
Así que me dediqué principalmente a las imágenes Ext4 y ya creadas con éxito eliminé todo lo referente a Ext2 y Ext3
Posteriormente le agregué un extractor de archivos Ext2/3/4 que servirá de maravilla para la edición del firmware.

Esta es la aplicación:
MKIMG10.jpg

Paso a explicar su uso...
Al presionar sobre el botón "Browse..." del sector "Create Image", se abrirá el diálogo para guardar un archivo, en este caso, la imagen Ext4 que queremos crear.
Se puede guardar con la extensión .img (por defecto), .bin o cualquier otra extensión (All Files), pero finalmente será una imagen con el sistema de archivos Ext4.
Seleccionada la imagen, ya sea existente o nueva (Se tomará su nombre sin extensión para la etiqueta del volumen.
La etiqueta del volumen se puede editar y omitir, y para eso está la opción: ApplyVolumeName.jpg que estará limitada a 16 bytes o caracteres.
Posteriormente se requerirá el tamaño de la imagen, y para eso tenemos dos opciones...
La primera es escribir el tamaño de la imagen en bytes y la segunda (recomendada) es definir su tamaño en Megabytes.
Si somos buenos con las matemáticas, escribimos el tamaño directamente en bytes, y si no, lo escribimos en megabytes y procedemos a presionar el botón Calculate&Set.jpg Lo cual nos dará el tamaño requerido en bytes y lo establecerá.
Recordemos qué; 1 Megabyte = 1048576 bytes.
Una imagen Ext4, debido a su estructura, no puede ser menor a 5 MB, así que obtendremos un error si queremos crear imágenes de menor tamaño.
Sin embargo, sí podemos crear imágenes de por ejemplo: 5 MB, 5.1 MB, 6 MB, etc. hasta 250 MB que es el límite para esta aplicación gratuita.
No se necesitará más, a menos de que sean imágenes Sparse o LZO descomprimidas, lo cual ya es otra historia.
Ya establecidos los parámetros requeridos, podemos crear la imagen presionando el botón: CreateImage.jpg
La aplicación determinará las mejores opciones para la imagen, y conforme al tamaño la creará de forma automática.
Ya creada la imagen podemos localizarla mediante el botón: LocateImageFile.jpg
Esta acción solo nos abrirá el explorador de archivos, pero seleccionando el archivo que hemos creado, o uno existente, lo cual nos sirve para su montaje.

Ahora podemos proceder a montar la imagen creada, y para eso debemos instalar la aplicación ImDisk Toolkit (Gratutita)
Hacemos click derecho sobre la imagen Ext4 creada y seleccionamos: ImDisk_Mount.jpg
Si estamos en Windows 11 tenemos que ir más abajo y seleccionar: ShowMoreOptions.jpg
Nos aparecerá esta ventana:
ImDisk_Image_Mount.jpg
Aquí dejamos todo tal cual y presionamos el botón "OK"
Tras esto nos aparecerá otra ventana:
ImDisk_Invalid_System.jpg
Presionamos "Salir" para que la imagen sea montada tal cual, pues no debemos darle formato ni desmontar.
Cuando la imagen sea montada la podremos ver en el explorador de discos, pero no la podremos accesar directamente.
Si la queremos accesar, Windows mostrará un mensaje:
Win_Format.jpg
A lo cual debemos presionar "Cancelar"
Como Ext4 no es un sistema de archivos válido para Windows, requeriremos de la aplicación DiskGenius.

Imagen Ext4 montada:
Mounted_Ext4_Image.jpg
Esto es un ejemplo, a ustedes les puede aparecer otra letra de unidad, eso depende de las unidades reconocidas por su sistema.

Si ya tenemos un firmware desempacado, podemos proceder a extraer el contenido de la imagen que queremos modificar.
Para esto nos dirijimos al sector "Extract Image"
Aquí debemos seleccionar la imagen a la cual le queremos extraer su contenido y posteriormente seleccionar un directorio donde serán extraídos los archivos y carpetas.
El directorio de salida se genera de forma automática pero puede editarse o seleccionarse manualmente.
Ya hecho esto, se procede a su extracción, presionando el botón: ExtractFiles.jpg
Tras esto, se listarán los archivos y carpetas extraídos.
Si se selecciona la opción: Detailed.jpg se mostrará una información detallada de la extracción, si no, solo se mostrará el proceso realizado.

Una vez montada la imagen y ya con los archivos extraídos y convenientemente modificados, podemos pasar a agregarlos a la imagen montada.
Esta imagen estará vacía y por lo tanto debemos agregar en ella los todos los archivos, incluyendo los no modificados.
Salvo excepciones de edición podremos no agregar archivos, ya que suelen ser verificados por otro archivo del firmware.
Y este puede comprobar el Hash MD5 o la existencia del archivo, por eso es conveniente verificar muy bien lo que estamos haciendo, o la edición del firmware no funcionará.
Para agregar los archivos a la imagen montada con ImDisk, sin perder el formato Ext4, solo conozco una manera que infortunadamente no es gratis.
Y para esto debemos usar DiskGenius, y vale la pena pagar su licencia si su uso nos proporciona beneficios económicos.
Y es que ya le busqué y rebusqué pero no he encontrado nada que pueda tener acceso a este tipo de partición montada en Windows.
Si saben de algo gratuito, pues sería genial que lo mencionen para seguir continuando con el Freeware.
Quiero decirles que, ya he probado varias aplicaciones y no funcionan para lo que en este caso se requiere.
DiskGenius lo hace sin ningún inconveniente, siempre y cuando la imagen montada tenga un sistema Ext4 perfectamente creado.
De otra forma, la imagen se puede formatear con DiskGenius o WSL y usar como cualquier otra imagen Ext4.
Mi aplicación crea una imagen Ext4 física perfectamente utilizable para Windows o Linux y no necesita ser formateada.
Al menos para el propósito expuesto, que es modificar un firmware Mstar que utiliza imágenes con formato Ext4.

Explicado lo anterior, ejecutamos DiskGenius y seleccionamos la imagen montada con ImDisk, en este caso tvconfig (Etiquetada)
Si no etiquetamos el volumen, aparecerá como "Local Disk X:" donde X será la letra de la unidad asignada por el sistema:
Esto no es algo importante pero nos sirve de referencia y más que nada para saber si ya hemos modificado la imagen, pues podemos etiquetarla con revisiones.
Por ejemplo: tvconfig_v1_rev2, siempre y cuando no sobrepasemos 16 bytes o caracteres.

Pasemos al ejemplo de nuestra imagen tvconfig.img creada con un tamaño de 16 MB, que es el tamaño de la imagen Ext4 que extraímos de un firmware X Mstar.
El tamaño varía dependiendo del firmware y eso lo tenemos que tener en cuenta al crear la imagen, pues debe ser del mismo tamaño.
Aunque podemos crear la imagen de un tamaño mayor, dependiendo de lo que modifiquemos, no es recomendable sobrepasar por mucho este tamaño, porque la eMMC podría estar llena y habrá errores durante la actualización.

En DiskGenius nos posicionamos en la imagen Ext4 creada y la veremos vacía, salvo la clásica carpeta "lost+found" del sistema Ext4, y un journal que no veremos.
Esto nos indica que la imagen está lista para recibir nuestros archivos modificados.
Ahora vamos a la carpeta donde desempacamos y modificamos los archivos de la imagen previamente extraída y los selecionamos todos.
En Windows <= 10 (Alt + E) y en Windows 11 (Alt + A) y ya con los archivos seleccionados, hacemos un Drag & Drop hacia la ventana de archivos (Files) de DiskGenius
Tras esto, DiskGenius nos preguntará que si queremos copiar los archivos a la partición:
DG_Copy1.jpg
Presionamos "Yes" y continuamos...
Ahora mostrará una advertencia, la cual también aceptaremos:
DG_Copy2.jpg
Como estamos copiando archivos dentro de una imagen nueva, y con permisos R/W, no hay problema y continuamos presionando "Yes"
Tras esto, los archivos y carpetas serán copiados a nuestra imagen o partición Ext4 sin problemas, siempre y cuando el tamaño establecido haya sido el correcto.
DG_FileCopying_Completed.jpg
Si no hubo errores podemos presionar el botón "Complete", de otra forma nos será mostrado el error, que seguramente será por falta de espacio, y para eso debemos repetir todo el proceso pero estableciendo un tamaño superior al establecido.
Cuando el proceso de copia sea satisfactorio, ya podemos proceder a cerrar DiskGenius y desmontar la imagen:
ImDisk_Umount.jpg
Ahora la imagen estará libre y podemos reemplazar la imagen original por la modificada y proceder a su reempacado con la aplicación Mstar Firmware Unpacker & Repacker que por ahora va en su versión 1.7.0, pero ya pronto estará lista la versión 1.8.0 con más novedades.
Por cierto, esta aplicación también cuenta con el extractor de imágenes Ext2/3/4

Como siempre, espero que esta información y la aplicación sean de utilidad.
 

Adjuntos

  • MakeImg_V10.rar
    1.4 MB · Visitas: 169
Para agregar los archivos a la imagen montada con ImDisk, sin perder el formato Ext4, solo conozco una manera que infortunadamente no es gratis.
Y para esto debemos usar DiskGenius, y vale la pena pagar su licencia si su uso nos proporciona beneficios económicos.
Y es que ya le busqué y rebusqué pero no he encontrado nada que pueda tener acceso a este tipo de partición montada en Windows.
Si saben de algo gratuito, pues sería genial que lo mencionen para seguir continuando con el Freeware.
Tal vez puedas ejecutar un script de BASH en la terminal WSL.

PD: lo que has hecho es G.E.N.I.A.L !!
 
Actualización v2.0

Con esta actualización podemos realizar todo lo anterior pero sin necesidad de aplicaciones extra.
Ya no necesitaremos montar la imagen con ImDisk ni agregar los archivos con DiskGenius.
Esta nueva versión cuenta con un reempacador de archivos al formato Ext4

MKIMGV20.jpg

Paso a explicar su uso que es relativamente muy sencillo.
Primero debemos seleccionar la imagen Ext4 que hemos extraído previamente con: Mstar Firmware Unpacker & Repacker
Esta acción sirve para obtener información de la imagen.
Al seleccionar la imagen extraída también se establecerá el directorio de entrada, pero se puede cambiar por si la ruta no es válida.
Si el directorio establecido no es el que contiene los archivos de la imagen previamente extraídos, debemos seleccionar el directorio correcto.
Después debemos seleccionar el archivo que será creado: (New Image File)
Se puede seleccionar el mismo archivo extraído, pero será sustituido por el nuevo.
Así que si están seguros de que han modificado los archivos correctamente, pueden seleccionar el archivo extraído.
Como ya tienen los archivos de la imagen, pueden realizar la edición de archivos las veces que sean necesarias y volver a empacar.
La etiqueta del volumen se establece automáticamente y no es necesaria, a menos de que la imagen extraída la tenga.
Por defecto se establece la que contiene la imagen, si no la tiene se establece el nombre del archivo, 16 caracteres como máximo.
También la pueden editar u omitir con:
applyvolumename-jpg.309502

Una vez establecidos los datos necesarios, podemos proceder al reempacado.
Para esto, le picamos la panza al pingüino y se iniciará el proceso.
Si el proceso se realiza con éxito, veremos algo similar a la siguiente información:
MKIMGV20_Info.jpg

Si desean comprobar la imagen creada, pueden abrirla con 7-Zip.
Open with 7-Zip.jpg
 

Adjuntos

  • MakeI mage v2.0.rar
    582.3 KB · Visitas: 70
Actualización v3.0 (RC1)

.- Se corrige un bug de estructura por offset erróneo (s_creator_os) Ext4 Disk Layout
.- Se agrega la opción de poder cambiar el UUID del volumen, así como su etiqueta.
Ante esto, paso a explicar lo siguiente...
El Identificador único del volumen (UUID) está basado en un algoritmo que requiere algunos parámetros para su generación.
Se requiere una estructura basada en la hora local, un nombre de espacio (que puede ser el nombre del proceso), y sobre todo, la etiqueta del volumen.
Con estos parámetros se genera un hash SHA1 de 32 dígitos en hexadecimal (16 bytes).
Por ejemplo: AAB0144446DA8B549AA756F69CDB833F
Esta cadena debe ser formateada de la siguiente forma: AAB01444-46DA-8B54-9AA7-56F69CDB833F
Entonces, hasta el momento todo va bien, ya que un volumen sin etiqueta nos generará un UUID así, por ejemplo:
57F8F4BC-ABF4-655F-BF67-946FC0F9F25B
Sin embargo, y por motivos que desconozco, existen imágenes Ext4 sin etiqueta que llegan a tener el mismo UUID.
Es muy difícil que en modo Batch se puedan crear dos imágenes con el mismo UUID, a menos que el algoritmo usado no sea crítico en cuanto a los segundos de creación.
Pero bueno, existen imágenes con el mismo UUID en el mismo firmware, y es por eso que añadí esta función.
Si existe la comprobación del UUID durante la instalación del firmware, puede ser motivo de error y que no se instale.
Así que por este motivo añadí esta nueva característica.

Paso a explicar cómo funciona...
Al seleccionar una imagen Ext4 válida, se determinará si la imagen contiene etiqueta.
Si la contiene, se mostrará el en campo "Volume Label", y de igual forma se activará la opción "Apply Volume Label".
Si no la contiene, la acción será inversa.
El botón Generate_UUID.jpg depende de dos opciones para la generación del UUID.

From_Volume_Label.jpg y Random_Seed.jpg

Si se selecciona "From Volume Label" se generará el UUID dependiendo de la cadena "Volume Label", exista o no exista.
Si se selecciona "Random Seed", el UUID será generado de forma aleatoria en base a cadenas igualmente aleatorias.

Con la etiqueta del volumen se aplica lo siguiente...
Si el volumen contiene etiqueta pero no se requiere, solo basta deseleccionar la opción Apply_Volume_Label.jpg
No importando si el campo "Volume Label" contenga un nombre para la etiqueta, si "Apply Volume Label" no se selecciona, la etiqueta del volumen será eliminada.

Si requerimos que la imagen contenga el mismo UUID de otra imagen, debemos extraerlo presionando el botón Get_UUID_From_Image.jpg
Con esta acción se obtendrá el UUID de la imagen seleccionada.

Como el sistema de archivos Ext4 depende de una comprobación CRC16 para este bloque, cada acción debe cambiar su CRC.
Así que, no importando qué parte de la estructura sea modificada, será también recalculado su CRC.
C++:
__le16  bg_checksum;            /* crc16(sb_uuid+group+desc) */
struct ext4_group_desc

Por lo tanto, aunque la generación del UUID básicamente esté basado en la etiqueta del volumen, no es algo que impida establecer otro UUID, pues finalmente, el CRC es el que establecerá la integridad del bloque modificado.
Lo mismo pasará con la etiqueta, un cambio en ella también repercutirá en un nuevo CRC (Offset 0x101E) Little Endian.

Como siempre, espero que este tipo de utilidades gratuitas sean de su completo agrado.
Tengan en cuenta que, realizar una aplicación lleva muchas horas de programación y muchos años de estudio.

Este programa lo escribí inicialmente para ediciones propias del Firmware Mstar.
Como me funcionó perfectamente, decidí compartirlo con ustedes.
El esmero y la dedicación tienden a avanzar, y este es el resultado final.
 

Adjuntos

  • Make Image RC1.rar
    2.7 MB · Visitas: 94
Última edición:
Hola, ¿cómo fusiono archivos .ext extraídos en un editor hexadecimal en un solo .img? ¿Existen herramientas útiles?
 

Adjuntos

  • 99c12767-e2bb-4351-a800-35a39a145e14.png
    99c12767-e2bb-4351-a800-35a39a145e14.png
    11.4 KB · Visitas: 2
  • 7130db31-890c-4da1-b783-dd1f5ff159dd.png
    7130db31-890c-4da1-b783-dd1f5ff159dd.png
    4.5 KB · Visitas: 2
Las archivos sparse sí se pueden unir para crear una imagen EXT4
La aplicación MStar Unpacking Tool realiza ese proceso pero internamente, ya que algunos firmware las contienen y se añadió ese soporte.
Si esperas un poco añadiré esa función a esta aplicación.
 
Las archivos sparse sí se pueden unir para crear una imagen EXT4
La aplicación MStar Unpacking Tool realiza ese proceso pero internamente, ya que algunos firmware las contienen y se añadió ese soporte.
Si esperas un poco añadiré esa función a esta aplicación.
¿Puedo dividir un .img en 4 archivos .ext de tamaño original?
 

Adjuntos

  • 99c12767-e2bb-4351-a800-35a39a145e14.png
    99c12767-e2bb-4351-a800-35a39a145e14.png
    11.4 KB · Visitas: 2
No es fácil de explicarlo porque se requieren conocimientos sobre el sistema de archivos Linux.
Es un tema tan extenso que hasta personas que usan Linux cotidianamente desconocen.
Mejor espera a que termine el programa que lo hace de forma automática, porque hacerlo manualmente, incluso usando herramientas especiales, es complicado.
Esas funciones en algún momento pensé incluirlas, pero no les encontré utilidad relevante, y hasta ahora tampoco.
Para que tengas una idea, mira esto: Sparse File
 
Actualización RC2 Rev1.3 x64

.- Se agrega soporte para compresión y descompresión de archivos LZO y Sparse.
.- Funcionalidad para trabajar con un solo archivo o archivos multiparte.


MakeImage_RC2_Rev1.3.jpg

Próximamente se agregará el soporte para archivos LZMA y un generador MD5 por lotes.
 

Adjuntos

  • MakeImage RC2 Rev1.3 x64.rar
    1.8 MB · Visitas: 42
Actualización RC2 Final x64

.- Se agrega la Compresión/Descompresión LZMA.
.- Se agrega el calculador de hash MD5 por archivo único o por lotes, este permite guardar la lista como archivo de texto.

Paso a explicar para qué nos puede servir la función de descompresión LZMA:

Los volcados de memorias SPI Flash de algunos firmware MStar en TV chinos no Smart, tienen varios módulos LZMA.
Dentro de estos módulos se puede encontrar diversa información, como el tipo de panel LCD, el tipo de sintonizador, el nombre original del firmware, etc.
La cabecera de un archivo LZMA es básicamente así:
5D 00 00 01 00
Donde el cuarto byte es el tipo de compresión usado, y va del 1 al 9, por defecto se usa el valor 04
Sin embargo, en este tipo de volcados, la cabecera es diferente, así por ejemplo: 5D 00 00 00 04
Si buscamos estos bytes con un editor hexadecimal, podemos encontrar los módulos, donde cada firma será el inicio LZMA del módulo.
Así que de esta forma podemos ir seleccionando los módulos y guardarlos con extensión .lzma.
Cuando solo encontramos un módulo LZMA, debemos tomar su offset y buscar hacia adelante hasta encontrar los bytes 00 BE EF 00 00, o hasta donde solo se encuentre contenido con 0xFF.
Este será el offset final y entonces seleccionamos desde el offset LZMA hasta donde empiecen los bytes 0xFF, que también guardaremos con la extensión .lzma.

Nota: también podemos buscar únicamente los bytes 5D 00 00 00 y posiblemente obtener módulos LZMA válidos.

Ya teniendo el archivo LZMA guardado en disco, podemos proceder con su descompresión.
Como referencia; el offset general en un archivo con un único módulo LZMA, es en la posición 0x23880
Ya descomprimido podemos abrirlo con el editor hexadecimal para ver su contenido.

No me pregunten si este archivo se puede editar, volver a comprimir y luego reempacar, porque no lo he hecho y no sé si funcione.
Y el motivo principal de que no llegue a funcionar, es porque estos archivos tienen una comprobación de CRC por módulo y general, que aún no sé cómo se obtenga, porque no existe información sobre su estructura.

Adjunto la actualización y un archivo LZMA como ejemplo.
Verán que descomprimido podrán encontrarán información que obviamente no se podrá encontrar en el volcado.
Este tipo de técnica es la que usé en la aplicación Dump Repair v1.9 para encontrar el nombre del firmware, pero automatizada.
 

Adjuntos

  • Make Image RC2 Final x64.7z
    1,016.4 KB · Visitas: 36
  • LZMA_Example_File.7z
    1.5 MB · Visitas: 22
Saludos estimado D@rkbyte.
Estos archivos comprimidos LZMA que se encuentran en el volcado de las memorias spi flash de los tv no Smart de origen chino, casi que se pudiera afirmar que son de importancia medular.
Una vez que se logre entender en toda su plenitud sus características estructurales dentro del dump, ya se podrá dominar la edición de este a toda cabalidad.
He leído sobre este tema en algún foro Ruso y también de Ucrania, donde al parecer hay algunos colegas con conocimientos de programación al igual que usted, incluso algún colega coterraneo mío lo he encontrado en esos foros, en la búsqueda del secreto de como encontrar dentro del dump los datos correspondientes al control remoto, que también tienen la compresión LZMA, valga decir que el estimado colega también comparte este foro, ojalá y tenga éxito en su empeño.
Confío D@rkbyte en su sabiduría y perseverancia que más temprano que tarde usted logrará entender a plenitud su estructura y como en otras ocaciones nos aporte luz para su entendimiento.
 
Atrás
Arriba