LINUX.ORG.RU

Редактирование прошивки роутера TP-Link C1200

 


0

2

Приветствую всех. Приобрел данный роутер в надежде поставить OpenWRT, но попалась неподдерживаемая версия железа (V2 на чипе Broadcom).

Начал ковырять оригинальную прошивку.Оказалось что оригинальная прошивка основана на openwrt, но с закрытым доступом по ssh от имени админа.

Я попробовал отредактировать официальную прошивку. Прошел binwalk, определил где squashfs раздел, отредактировал конфиг ssh, но роутер не принимает образ.

binwalk до

DECIMAL HEXADECIMAL DESCRIPTION --------------------------------------------------------------------------------
68940 0x10D4C LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 432868 bytes
179473 0x2BD11 TRX firmware header, little endian, image size: 1933312 bytes, CRC32: 0x6DF7B0F2, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x0, rootfs offset: 0x0
179501 0x2BD2D LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 4682720 bytes
2112786 0x203D12 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 12133997 bytes, 1922 inodes, blocksize: 131072 bytes, created: 2018-01-18 12:22:56
14249768 0xD96F28 XML document, version: «1.0»
14258414 0xD990EE XML document, version: «1.0»
14259845 0xD99685 Unix path: /var/run/appflow/tccpipe</listen_path>
14263891 0xD9A653 Unix path:/usr/share/miniupnpd/firewall.include</path>
14268555 0xD9B88B Unix path: /cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thu
14273898 0xD9CD6A Unix path: /usr/local/bin/jiggle_firewall</exec>
14274744 0xD9D0B8 Unix path: /usr/local/bin/apply_appflow</exec>

Порядок действий: 1) dd if=full_clean of=squash-img bs=1 skip=2112786 count=12136982
2) unsquashfs squash-img
3) Редактирование конфига
4) mksquashfs squashfs-root squash-img-mod -comp xz
5) cp full_clean full_mod
6) dd if=squash-img-mod of=full_mod bs=1 seek=2112786

DECIMAL HEXADECIMAL DESCRIPTION --------------------------------------------------------------------------------
68940 0x10D4C LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 432868 bytes
179473 0x2BD11 TRX firmware header, little endian, image size: 1933312 bytes, CRC32: 0x6DF7B0F2, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x0, rootfs offset: 0x0
179501 0x2BD2D LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 4682720 bytes
2112786 0x203D12 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 12131629 bytes, 1922 inodes, blocksize: 131072 bytes, created: 2018-02-07 07:23:38
14249768 0xD96F28 XML document, version: «1.0»
14258414 0xD990EE XML document, version: «1.0»
14259845 0xD99685 Unix path: /var/run/appflow/tccpipe</listen_path>
14263891 0xD9A653 Unix path: /usr/share/miniupnpd/firewall.include</path>
14268555 0xD9B88B Unix path: /cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thu
14273898 0xD9CD6A Unix path: /usr/local/bin/jiggle_firewall</exec>
14274744 0xD9D0B8 Unix path: /usr/local/bin/apply_appflow</exec>

Ответ на: комментарий от joy4eg

Спасибо. Уже добрался до UART и ставлю эксперименты через CFE. Может знаешь, где можно подробно почитать откуда загрузчик берет данные о mtd разделах, где берет смещения для ядра и тд?

RUVanillaBear ()
Ответ на: комментарий от RUVanillaBear

Может знаешь, где можно подробно почитать откуда загрузчик берет данные о mtd разделах, где берет смещения для ядра и тд?

В загрузчике, скорей всего, все захардкоджено.
Либо же через переменные (если он умеет парсить cmdline ядра).
А ядро же, может брать смещения разделов несколькими путями:


  • Хардкод в драйвере флешки (там раньше было, а может и осталось для бюджетных моделей)
  • DTS. Специальный файлик с настройками борды, там указываются все разделы.
  • cmdline. Загрузчик передает ядру информацию разделах через cmdline, например mtdparts=0:384k(U-Boot),128k(Env1),128k(Env2),128k(ASIC),1M(Linux),4M(Ramdisk),-(User_Data)
  • Возможно что-то еще :)
joy4eg ★★★★★ ()
Ответ на: комментарий от joy4eg

Спасибо. Если смотреть дамп самой флэш, ну или оригинальную прошивку, то находится область с данными вида

partition factory-boot base 0x00000 size 0x40000 partition fs-uboot base 0x40000 size 0x40000 partition os-image base 0x80000 size 0x200000 partition file-system base 0x280000 size 0xc80000 partition default-mac base 0xf00000 size 0x00200 и тд.

Если же делать show devices в CFE, то есть только 4 раздела. flash0.bootloader flash0.trx flash0.os flash0.nvram

Если правильно понимаю, то бутлоадер тупо идет на flash0.os и какая структура у этой области, его мало волнует.

Я одно понять не могу, если корень это squashfs, а overlay является tmpfs, то как происходит изменение настроек?

RUVanillaBear ()
Ответ на: комментарий от joy4eg

вот вывод cat /proc/mounts

rootfs / rootfs rw 0 0 /dev/root / squashfs ro,relatime 0 0 devtmpfs /dev devtmpfs rw,relatime,size=62548k,nr_inodes=15637,mode=755 0 0 proc /proc proc rw,noatime 0 0 sysfs /sys sysfs rw,noatime 0 0 tmpfs /tmp tmpfs rw,nosuid,nodev,noatime,size=62656k 0 0 devpts /dev/pts devpts rw,noatime,mode=600 0 0 root /overlay tmpfs rw,noatime,mode=755 0 0 /dev/root /mnt squashfs ro,relatime 0 0 root /mnt tmpfs rw,noatime,mode=755 0 0 none /etc ramfs rw,relatime 0 0 none /proc/bus/usb usbfs rw,relatime 0 0

только странно, что overlay пустой

RUVanillaBear ()