
Exportado automáticamente desde code.google.com/p/firmware-mod-kit
Exportado automáticamente desde code.google.com/p/firmware-mod-kit
Kit de Modificación de Firmware
Este kit es una colección de scripts y utilidades para extraer y reconstruir imágenes de firmware basadas en Linux.
Extraer una imagen de firmware en sus partes componentes
El usuario realiza la modificación deseada al sistema de archivos del firmware o a la interfaz web (webif)
Reconstruir el firmware
Flashear el firmware modificado en el dispositivo y brickearlo (ja)
ADVERTENCIA: Vas a brickear tu dispositivo al usar este kit (quizás no, pero mejor decir que lo harás). Brickear significa convertir efectivamente en un 'ladrillo' no funcional. La recuperación a veces es posible sin modificaciones de hardware. A veces requiere modificaciones de hardware (por ejemplo, cabezales seriales o JTAG soldados a la PCB). A veces simplemente no es factible, o costaría más en costo total de recuperación de lo que vale la unidad.
NO uses este kit si no estás preparado para que tu router se brickee!
EULA: Al descargar o usar este kit, aceptas asumir la responsabilidad por las consecuencias del uso o mal uso del Kit de Modificación de Firmware. Estas incluyen el bricking de tu dispositivo. Los autores de este kit te han advertido debidamente. Este kit es solo para ingenieros de software de sistemas embebidos.
El Kit de Modificación de Firmware permite la deconstrucción y reconstrucción sencilla de imágenes de firmware para varios dispositivos embebidos. Aunque se enfoca principalmente en routers basados en Linux, debería ser compatible con la mayoría de los firmwares que utilizan formatos y sistemas de archivos comunes como TRX/uImage y SquashFS/CramFS.
Para usar el Kit de Modificación de Firmware, debes tener un cliente de subversion, herramientas de desarrollo estándar de Linux (gcc, make, etc.), el módulo python-magic, y los paquetes de desarrollo zlib y lzma. Si estás ejecutando una distribución de Linux que usa apt-get, por ejemplo Ubuntu o Debian, usa:
Para Ubuntu 18.04 y anteriores:
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic autoconf
Para Ubuntu 20.04 y posteriores:
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python3-magic autoconf python-is-python3
Para RedHat:
yum groupinstall "Development Tools"
yum install git zlib1g-dev xz-devel python-magic zlib-devel util-linux
Para Arch Linux:
Hay un paquete AUR en https://aur.archlinux.org/packages/firmware-mod-kit/
Para otras distribuciones, debes instalar los paquetes equivalentes usando el gestor de paquetes de tu distribución.
git clone https://github.com/rampageX/firmware-mod-kit.git
cd firmware-mod-kit/src
make
Binwalk 2.1.1
[Back in firmware-mod-kit directory]
cd src/binwalk-2.1.1
sudo python2 setup.py install
El Kit de Modificación de Firmware es solo compatible con la plataforma Linux. Con algunas pequeñas modificaciones, debería funcionar en otras plataformas POSIX.
Clona el repositorio del Kit de Modificación de Firmware usando Git.
El Kit de Modificación de Firmware es una colección de utilidades y scripts de shell. Las utilidades se pueden usar directamente, o los scripts de shell se pueden usar para automatizar y combinar operaciones comunes de firmware (por ejemplo, extraer y reconstruir). Los scripts principales para facilitar las operaciones de firmware se enumeran a continuación.
Scripts principales:
| Script | Descripción |
|---|---|
| extract-firmware.sh | Script de extracción de firmware |
| build-firmware.sh | Script de reconstrucción de firmware |
Scripts secundarios:
| ddwrt-gui-extract.sh | Extrae archivos de la GUI web del firmware DD-WRT extraído. |
|---|---|
| ddwrt-gui-rebuild.sh | Restaura archivos modificados de la GUI web al firmware DD-WRT extraído. |
El Kit de Modificación de Firmware utiliza un directorio de trabajo 'hard coded' llamado 'fmk'. El script de extracción extrae a esta carpeta, y el script de reconstrucción reconstruye desde esta carpeta. Se permite el uso de directorios de trabajo alternativos para algunas operaciones, pero no todas. Ampliaremos eso en el futuro. Por ahora, si tienes múltiples directorios de trabajo, sugerimos que renombres aquellos en los que no estés operando actualmente.
La extracción automatizada de firmware generalmente funciona con la mayoría de las imágenes de firmware que emplean cabeceras de firmware uImage/TRX y utilizan sistemas de archivos SquashFS o CramFS. Actualmente, extract-firmware.sh es el método preferido de extracción ya que admite más tipos de firmware que el script anterior old-extract.sh. Sin embargo, old-extract.sh todavía está incluido y funciona con muchos formatos de firmware.
El uso tanto de extract-firmware.sh como de build-firmware.sh es sencillo:
./extract-firmware.sh firmware.bin
Por defecto, la salida de extract-firmware.sh se ubicará en el directorio 'fmk', mientras que old-extract.sh colocará los datos extraídos en el directorio de trabajo especificado.
Qué script de construcción usar depende de qué script de extracción se utilizó. Si extrajiste una imagen de firmware con extract-firmware.sh, entonces debes usar build-firmware.sh para reconstruirla. Del mismo modo, si se usó old-extract.sh, entonces se debe invocar old-build.sh al reconstruir una imagen:
./build-firmware.sh [-nopad] [-min]
El nuevo firmware generado por build-firmware.sh se ubicará en 'fmk/new-firmware.bin', mientras que old-build.sh generará imágenes de firmware en varios formatos diferentes y las guardará en el directorio de salida especificado.
El interruptor opcional -nopad le indicará a build-firmware.sh que NO rellene el firmware hasta su tamaño original.
El interruptor opcional -min usará el tamaño máximo de bloque squashfs de 1MB. Esto disminuirá el tamaño de la imagen de firmware a costa de recursos adicionales de CPU y RAM utilizados en el dispositivo de destino. No uses este interruptor a menos que sea necesario. Este es un tamaño de bloque muy grande para sistemas embebidos. El tamaño de bloque squashfs original del firmware se conserva al reconstruir, y se debe usar el tamaño de bloque original a menos que estés seguro de lo que haces. Un tamaño de bloque demasiado grande puede parecer funcionar bien, pero el rendimiento en tiempo de ejecución del firmware puede verse afectado en todas o algunas cargas.
Una característica muy única del Kit de Modificación de Firmware es su capacidad para extraer y reconstruir archivos de la GUI web de DD-WRT. Esto se automatiza mediante los scripts ddwrt-gui-extract.sh y ddwrt-gui-restore.sh.
Una vez que hayas extraído una imagen de firmware DD-WRT usando extract-firmwware.sh, puedes extraer los archivos web ejecutando:
./ddwrt-gui-extract.sh
Esto creará un directorio llamado 'www' y extraerá los archivos web allí. Puedes modificar los archivos como desees, pero no puedes añadir ni eliminar archivos.
Cuando termines de editar, puedes reconstruir los archivos web ejecutando:
./ddwrt-gui-rebuild.sh
A veces, con entusiasmo flashearás un firmware de terceros como Gargoyle o DD-WRT solo para descubrir que carece de las características que necesitas, no funciona tan bien como el firmware del proveedor, o tiene problemas funcionales. En esta situación, es posible que quieras volver al firmware del proveedor, ¡pero no tengas forma de hacerlo!
Así es como el Kit de Modificación de Firmware puede ayudarte a volver a un firmware de proveedor. El proceso es el siguiente:
Una vez que hayas vuelto al firmware del proveedor, entonces acepta imágenes de firmware del proveedor nuevamente.
Este ejemplo demuestra cómo extraer una imagen de firmware, reemplazar su demonio telnet existente por uno personalizado, y luego construir una nueva imagen de firmware:
./extract-firmware.sh firmware.bin
cp new-telnetd fmk/rootfs/usr/sbin/telnetd
./build-firmware.sh
A continuación se muestra un ejemplo de los comandos a ejecutar para extraer una imagen de firmware DD-WRT, modificar la página de índice web y construir una nueva imagen de firmware:
./extract-firmware.sh firmware.bin
./ddwrt-gui-extract.sh
echo "HELLO WORLD" > www/index.asp
./ddwrt-gui-rebuild.sh
./build-firmware.sh
Linksys tiene pies de página personalizados con comprobaciones de checksum, por lo que este script fue escrito para intentar automatizar el proceso de calcular el checksum de la imagen y cambiar el pie de página en consecuencia. La nueva imagen se escribirá en modified_checksum.img. Ejecuta esto después de modificar y build-firmware.sh.
./linksys_footer.sh modified_firmware.img
El Kit de Modificación de Firmware consiste en una colección de herramientas útiles cuando se trabaja con imágenes de firmware embebido. Estas incluyen las que se enumeran a continuación, aunque hay MUCHAS MÁS que no se listan aquí.
| Herramienta | Descripción |
|---|
| AsusTRX | Una versión extendida de ASUSTRX que puede construir tanto archivos TRX 'normales' como, opcionalmente, aquellos con un encabezado de estilo ASUS addver añadido. También puede, de manera única, forzar desplazamientos de segmentos en el TRX (con el interruptor -b) para compatibilidad con dispositivos Marvell ASUS como el WL-530g. Esta herramienta reemplaza tanto la herramienta trx 'normal' como addver. Las versiones actuales incluidas son: 0.90 beta. |
| AddPattern | Utilidad para anteponer un encabezado HDR0 estilo Linksys a un TRX. |
| AddVer | Utilidad de ASUS para añadir un encabezado a una imagen TRX que contiene información de versión. ASUSTRX incluye esta capacidad. Versión actual: sin versionar. |
| Binwalk | Escanea imágenes de firmware en busca de tipos de archivo conocidos (encabezados de firmware, kernels comprimidos, sistemas de archivos, etc.) |
| CramFSCK | Verificador y extractor de imágenes de sistema de archivos CRAMFS. Las versiones actuales incluidas son: 2.4x. |
| CramFSSwap | Utilidad para intercambiar el endianness de una imagen CramFS |
| CRCalc | Utilidad para parchear todos los encabezados uImage y TRX dentro de una imagen de firmware dada. |
| MkSquashFS | Construye una imagen de sistema de archivos squashfs. Las versiones actuales incluidas son: 2.1-r2, 3.0. |
| MkCramFS | Construye una imagen de sistema de archivos cramfs. Próximamente en la próxima versión. Las versiones actuales incluidas son: 2.4x. |
| MotorolaBin | Utilidad que antepone encabezados de 8 bytes a imágenes TRX para dispositivos Motorola WR850G, WA840G, WE800G. Versión actual: sin versionar. |
| Splitter3 | Utilidad para escanear y extraer las partes componentes de una imagen de firmware. |
| Tpl-tool | Utilidad para manipular imágenes en formato de proveedor TP-Link. |
| UnCramFS | Herramienta alternativa para extraer una imagen de sistema de archivos cramfs. Usa cramfsck en su lugar siempre que sea posible, ya que parece ser más confiable. Las versiones actuales incluidas son: 0.7 (para cramfs v2.x). |
| UnCramFS-LZMA | Herramienta alternativa para extraer imágenes de sistema de archivos cramfs comprimidas con LZMA, como las usadas por OpenRG. |
| UnSquashFS | Extrae una imagen de sistema de archivos squashfs con zlib. Las versiones actuales incluidas son 1.0 para imágenes 3.0 y 1.0 para imágenes 2.x (mezcla propia). |
| UnSquashFS-LZMA | Extrae una imagen de sistema de archivos squashfs con lzma. Las versiones actuales incluidas son 1.0 para imágenes 3.0 y 1.0 para imágenes 2.x (mezcla propia). Nota: No todos los parches squashfs-lzma son compatibles entre sí. Estoy trabajando en agregar soporte para todas las variaciones comunes de squashfs-lzma. |
| UnTRX | Divide firmwares estilo TRX en sus partes componentes. También soporta encabezados antepuestos estilo addpattern HDR0. Esto fue desarrollado exclusivamente para este kit. Las versiones actuales incluidas son: 0.45. |
| WebDecomp | Extrae y restaura archivos de la GUI web de imágenes de firmware DD-WRT, permitiendo modificaciones a las páginas web. |
| WRTVxImgTool | Utilidad para generar imágenes de firmware compatibles con VxWorks para la serie WRT54G(S) v5. |