Volver al inicio

Modificación de firmware D-Link DWR-M921 RTL8197F

El artículo analiza el bootlog del router D-Link DWR-M921 en el chipset RTL8197F. Describe la estructura de particiones MTD, inicialización de USB y WLAN, limitaciones de modificación de firmware. Se proponen vectores para inyectar software personalizado como AdGuardHome.

Bootlog y modificación de firmware D-Link DWR-M921
Advertisement 728x90

Análisis y guía de modificación del firmware D-Link DWR-M921 (RTL8197F)

El D-Link DWR-M921 funciona con el chipset Realtek RTL8197F, 128 MB de DDR2 a 400 MHz y 8 MB de memoria flash SPI NOR Winbond W25Q64. El procesador MIPS 24Kc (00019385) alcanza 999 MHz bajo Linux 3.10.90, compilado con gcc 4.4.7 del MSDK de Realtek.

La interfaz UART integrada permite capturar el registro de arranque, que revela el esquema de particiones MTD:

  • 0x00000-0x30000: "boot+cfg+linux"
  • 0x30000-0x80000: "rootfs"
  • 0x80000-0xb0000: "boot+cfg+linux2" (deshabilitado)
  • 0xb0000-0x100000: "rootfs2" (deshabilitado)

Bootbank activo=1. El kernel se carga desde 0x80a00000, con rootfs montado como squashfs en /dev/mtdblock1.

Google AdInline article slot

Desglose de la inicialización de subsistemas

El registro de arranque recorre la inicialización secuencial:

  • Memoria y caché: 114 MB libres de 128 MB, SLUB con HWalign=32.
  • Controladores USB: EHCI (bus 1), OHCI (bus 2), DWC OTG (bus 3) con parches PHY para OSC de 40 MHz.
  • Redes: WLAN Realtek (RFE TYPE=0, 512 descriptores RX/TX), FastPath v1.03, VLAN 802.1Q.
  • Sistemas de archivos: squashfs 4.0, exFAT 1.2.9, NTFS R/W.
  • Controladores: PPP, L2TP, GobiNet/Serial para módems, nf_conntrack.

Registros específicos del PHY USB:

port 0 reg e0=e2, e1=31, e2=33, e3=8d, e4=c9, e5=19, e6=c1, e7=91
port 0 reg f0=fc, f1=8c, f2=0, f3=11, f4=9b, f5=4, f6=0

Los puertos Ethernet eth0-eth4 se mapean a VLAN con aceleración FastPath.

Google AdInline article slot

Estructura del firmware y obstáculos

El firmware usa un esquema de doble banco, pero el banco 2 está bloqueado. No hay código abierto de D-Link y el soporte irregular de OpenWRT para RTL8197F complica las compilaciones personalizadas. Intentos con SDK antiguo de Realtek (rtl819x en SourceForge) fallan.

Especificaciones clave del registro de arranque:

  • Línea de comandos del kernel: console=ttyS0,38400 root=/dev/mtdblock1
  • DRAM: 128MB DDR2@400MHz
  • Flash: w25q64@29MHz (max_speed_hz=29000000Hz)
  • CPU: 660.68 BogoMIPS

Vectores de ataque para modificaciones

  • Volcado UART/JTAG: Captura la imagen completa para ingeniería inversa.
  • Parcheo de Squashfs: Descomprime rootfs, inyecta AdGuardHome o paquetes personalizados.
  • Ganchos del cargador de arranque: Modifica U-Boot o el cargador propietario para root alternativo.
  • Exploits del SDK: Aprovecha el MSDK de Realtek para imágenes compatibles.
  • Recuperación TFTP: Carga imágenes modificadas por red si está habilitado.

El RTL8197F incluye PCIe (aunque el enlace falla), USB OTG y GPIO para hacks de bajo nivel.

Google AdInline article slot

Conclusiones clave

  • Chipset RTL8197F: MIPS 24Kc@999MHz, 128MB RAM, soporte limitado de OpenWRT.
  • Particiones MTD: Solo boot+cfg+linux (0x300KB) y rootfs (0x500KB) activos.
  • Parches PHY USB: Esenciales para EHCI/OHCI/DWC OTG estables.
  • WLAN Realtek: RFE=0, 512 descriptores, Adaptivity 9.3.4.
  • Versión del kernel: 3.10.90 (2021), controladores obsoletos (gcc 4.4.7).

— Editorial Team

Advertisement 728x90

Leer después