Powrót do strony głównej

Modyfikacja firmware D-Link DWR-M921 RTL8197F

Artykuł analizuje bootlog routera D-Link DWR-M921 na chipsecie RTL8197F. Opisana struktura partycji MTD, inicjalizacja USB i WLAN, ograniczenia modyfikacji firmware. Zaproponowane wektory dla wdrożenia customowego oprogramowania jak AdGuardHome.

Bootlog i modyfikacja firmware D-Link DWR-M921
Advertisement 728x90

# Analiza i modyfikacja firmware routera D-Link DWR-M921 na RTL8197F

Router D-Link DWR-M921 korzysta z układu Realtek RTL8197F z 128 MB DDR2 o taktowaniu 400 MHz oraz 8 MB pamięci SPI NOR Winbond w25q64. Procesor MIPS 24Kc (00019385) działa z częstotliwością 999 MHz pod kontrolą Linuksa 3.10.90, skompilowanego za pomocą gcc 4.4.7 z Realtek MSDK.

Interfejs UART na płycie pozwala przechwycić log rozruchu, który ujawnia strukturę partycji MTD:

  • 0x00000-0x30000: "boot+cfg+linux"
  • 0x30000-0x80000: "rootfs"
  • 0x80000-0xb0000: "boot+cfg+linux2" (wyłączony)
  • 0xb0000-0x100000: "rootfs2" (wyłączony)

Aktywny bootbank=1. Jądro ładuje się z adresu 0x80a00000, a rootfs montowany jest jako squashfs na /dev/mtdblock1.

Google AdInline article slot

Szczegóły inicjalizacji podsystemów

Log rozruchu pokazuje sekwencyjną inicjalizację:

  • Pamięć i pamięć podręczna: 114 MB dostępne z 128 MB, SLUB z HWalign=32.
  • Kontrolery USB: EHCI (magistrala 1), OHCI (magistrala 2), DWC OTG (magistrala 3) z poprawkami PHY dla oscylatora 40 MHz.
  • Sieć: Realtek WLAN (RFE TYPE=0, 512 deskryptorów RX/TX), FastPath v1.03, VLAN 802.1Q.
  • Systemy plików: squashfs 4.0, exFAT 1.2.9, NTFS R/W.
  • Sterowniki: PPP, L2TP, GobiNet/Serial dla modemów, nf_conntrack.

Konkretne rejestry USB PHY:

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

Porty Ethernet eth0-eth4 mapowane są na VLAN z FastPath dla przyspieszenia.

Google AdInline article slot

Struktura firmware i ograniczenia

Firmware zorganizowany jest w schemacie dual-bank, ale drugi bank jest wyłączony (niedostępny). Brak otwartych źródeł D-Link oraz niepełne wsparcie OpenWRT dla RTL8197F komplikują modyfikacje. Próby kompilacji ze starych Realtek SDK (rtl819x na SourceForge) kończą się niepowodzeniem.

Kluczowe parametry z logu rozruchu:

  • Kernel command line: console=ttyS0,38400 root=/dev/mtdblock1
  • DRAM: 128MB DDR2@400MHz
  • Flash: w25q64@29MHz (max_speed_hz=29000000Hz)
  • CPU: 660.68 BogoMIPS

Możliwe wektory modyfikacji

  • Dump przez UART/JTAG: Przechwycenie pełnego obrazu do inżynierii odwrotnej.
  • Patching squashfs: Rozpakowanie rootfs, wdrożenie AdGuardHome lub innych pakietów.
  • Haki bootloadera: Modyfikacja U-Boot lub proprietary loadera dla alternatywnego root.
  • Eksploity SDK: Wykorzystanie Realtek MSDK do generowania kompatybilnych obrazów.
  • Odzyskiwanie TFTP: Jeśli dostępne, ładowanie zmodyfikowanych obrazów przez sieć.

RTL8197F obsługuje PCIe (ale linkup nieudany), USB OTG i GPIO dla dostępu niskopoziomowego.

Google AdInline article slot

Co ważne

  • Układ RTL8197F: MIPS 24Kc@999MHz, 128MB RAM, ograniczone wsparcie OpenWRT.
  • Partycje MTD: Aktywne tylko boot+cfg+linux (0x300KB) i rootfs (0x500KB).
  • Poprawki USB PHY: Krytyczne dla stabilności EHCI/OHCI/DWC OTG.
  • WLAN Realtek: RFE=0, 512 deskryptorów, Adaptivity 9.3.4.
  • Wersja jądra: 3.10.90 (2021), przestarzałe sterowniki (gcc 4.4.7).

— Editorial Team

Advertisement 728x90

Czytaj dalej