ASUS RT-G32 : разбираем прошивку. Часть вторая.


Tagged ,

Вторая часть начатой мной разборки заводской прошивки ASUS RT-G32.

Дальнейшие действия я производил на Debian Linux. Итак мы имеем 2 файла linux.bin.l7 и rootfs. Ядро представляет интерес только если кто-то соберется запустить прошивку на эмуляторе, а вот корневая файловая система, то что нам надо.

Как я уже говорил, rootfs имеет squashfs тип файловой системы. Как и любой другой образ, данную файловую систему можно смонтировать в каталог, но есть еще и возможность распаковать содержимое rootfs без монтирования! Для работы с этой ФС в Linux есть пакет squashfs-tools, который позволяет как создавать, так и распаковывать файлы данной ФС.
Ставим пакет:

$ sudo apt-get install squashfs-tools

После чего смотрим статистику нашего файла:

$ unsquashfs -s ./rootfs
Reading a different endian SQUASHFS filesystem on ./rootfs
Found a valid big endian SQUASHFS 2:1 superblock on ./rootfs.
Creation or last append time Thu Nov 26 23:00:40 2009
Filesystem is not exportable via NFS
Inodes are compressed
Data is compressed
Fragments are compressed
Check data is not present in the filesystem
Fragments are present in the filesystem
Always_use_fragments option is not specified
Duplicates are removed
Filesystem size 1939.65 Kbytes (1.89 Mbytes)
Block size 65536
Number of fragments 33
Number of inodes 757
Number of uids 1
Number of gids 0

Файл читается правильно, но при попытке просмотра содержимого или распаковки, вываливается ошибка:

$ unsquashfs -i ./rootfs
Reading a different endian SQUASHFS filesystem on ./rootfs
zlib::uncompress failed, unknown error -3
zlib::uncompress failed, unknown error -3
FATAL ERROR aborting: uncompress_inode_table: failed to read block

Чтобы понять в чем причина, я потратил некоторое время, перерыл много сайтов и нашел причину. Как я понимаю, при просмотре статистики файла, есть такая строка :
Found a valid big endian SQUASHFS 2:1 superblock on ./rootfs.
В которой SQUASHFS 2:1 означает версию файловой системы. В данном случаем это версия 2.1. Установленная нами версия unsquashfs работает с ФС версией 3.x.
В поисках более сторой программы наткнулся на firmware_mod_tools, с помощью которого разбирают dd-wrt прошивки. В его состав в том числе входят различные версии unsquashfs. Сливаем и распаковываем архив.

$ wget http://www.bitsum.com/files/firmware_mod_tools.tar.gz
$ tar xzf firmware_mod_tools.tar.gz

Заходим в сорцы и собираем:

$ cd src
$ make

После того как все собралось, копируем файл rootfs в src/squashfs-2.1-r2 и пробуем распаковать.

$ cp ./rootfs ./src/squashfs-2.1-r2/
$ cd ./src/squashfs-2.1-r2/ && ./unsquashfs -dest ./rootfs

и получаем туеву хучу ошибок типо
FATAL ERROR aborting: uncompress_inode_table: failed to read block
zlib::uncompress failed, unknown error -3

А дело в том что просто /unsquashfs пробуем распаковать ФС так, если бы она была упакована gzip, однако это не так.
На самом деле делать надо так :

# ./unsquashfs-lzma -dest ./rootfs

Права рута нужны чтобы распаковался каталог dev. Как я и говорил в прошлой части статьи, rootfs была упакована lzma.
На выходе мы получаем директорию squashfs-root c содержимым нашей rootfs 🙂 Естественно первое что интересует это файл shadow 😉

$ cat ./squashfs-root/etc/shadow
root:$1$$zdlNHiCDxYDfeF4MZL.H3/:10933:0:99999:7:::
bin:*:10933:0:99999:7:::
daemon:*:10933:0:99999:7:::
adm:*:10933:0:99999:7:::
lp:*:10933:0:99999:7:::
sync:*:10933:0:99999:7:::
shutdown:*:10933:0:99999:7:::
halt:*:10933:0:99999:7:::
uucp:*:10933:0:99999:7:::
operator:*:10933:0:99999:7:::
nobody:*:10933:0:99999:7:::

Для заинтересованных можно поглядеть вебморду тут:

$ ls ./squashfs-root/etc/web/

Ну и конечно все остальное: конфиги, скрипты запуска и прочее. В общем если хочется понять как это все работает, то там есть все для этого.

Вот и все. Система разобрана по косточкам. Все файлы как на ладони, познавайте. Надеюсь ктото изучив это, захочет написать свою вебморду или вообще выпустить свой билд прошивки, а так же поможет более тонко конфигурировать роутер.

В качестве пищи для размышлений даю мысль. Паковать обратно файловую систему можно так:

# ./mksquashfs-lzma ./squashfs-root/ myrootfs -all-root -be

😉

Ну и на сладкое маленький бонус. пароль от рута : 5up
Телнет в помощь..

Жду ваших комментариев.
Человек_Разумный ©

Share:

2 комментария

RSS / trackback

Respond