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: 60
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

  • MakeImg_v20.rar
    597.1 KB · Visitas: 81
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.
MkImg_RC1.jpg
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

  • MakeImg_RC1.rar
    2.7 MB · Visitas: 83
Atrás
Arriba