欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]路由器另类玩法之提取根文件系统映像并解包

[原创]路由器另类玩法之提取根文件系统映像并解包

之前发了篇文章关于拿路由器shell的:http://bbs.pediy.com/showthread.php?p=1336958
忘了介绍下我的路由器了,我路由器是WO-GWH-11(W).好像是星网 AR800-hn的联通版.
不过对于我这种人来说,这些还不够玩,不研究到底怎能罢休
于是乎想研究一下路由器的系统和固件(不知道是不是一个东西),
一直以来都很想自己diy路由器固件,不过也一直没机会,加上我这路由器是办宽带送的(算是定制路由器?).
固件也就在网上压根看不到.所以想把路由器固件导出来look look.能自己修改就最好了.
网上查了一大堆资料,再次感谢谷歌~~~
看到一些资料,关于备份路由器固件的.
http://www.v2ex.com/t/131986
首先需要知道固件在哪个设备,命令行里输入:

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 0053c000 00000000 "BCM63XX RootFS"
# 

看到这里我就无语了,为什么别人的mtd里那么多东西,而我的就一行,送的也不能这么寒酸吧.
不过基本能看出来,这玩意应该是根文件系统.
于是准备转储出来:
# dd if=/dev/mtd0 of=/mnt/usb1_1/rootfs.bin
dd: not found
# 

连基本的linux命令都没有.想起来之前在/bin看到了busybox.这回有救了~~
# busybox
BusyBox v1.00 (2011.06.20-01:20+0000) multi-call binary
Usage: busybox [function] [arguments]...
   or: [function] [arguments]...
        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use, and BusyBox
        will act like whatever it was invoked as.
Currently defined functions:
        [, busybox, cat, chmod, cp, date, deluser, df, dmesg, echo, expr,
        false, ftpget, ifconfig, init, insmod, kill, killall, klogd, linuxrc,
        ln, logger, logread, ls, lsmod, mkdir, mknod, mount, msh, ping,
        ping6, ps, pwd, reboot, rm, rmdir, rmmod, route, sendarp, sh,
        sleep, smuxctl, sync, syslogd, test, tftp, tftpd, top, true, tty,
        umount, vconfig
# 

还真是送的...
还好我这路由器支持U盘,而且之前测试过,U盘的里文件可以执行~~
然后去busybox官网上下了个预构建的busybox-mips.(我可没工夫配置交叉编译器)
copy到U盘里,插进路由器执行:
# /mnt/usb1_1/busybox-mips dd if=/dev/mtd0 of=/mnt/usb1_1/rootfs    
10720+0 records in
10720+0 records out
5488640 bytes (5.2MB) copied, 2.524430 seconds, 2.1MB/s
# 

总算把根文件系统转储出来了.现在的问题就是怎么解包了~
把U盘插回PC,用UE看了下刚转储出来的文件.映入眼帘的就是四个小写字母"qshs",猜测这是个Magics Word.类似于PE文件的"MZ".
于是google: rootfs qshs
https://huaweihg612hacking.wordpress.com/2011/07/05/hexdumping-the-firmware/
发现是一种名为squashfs的文件系统映像,继续google之,找到了解包打包这种映像的工具:
http://sourceforge.net/projects/squashfs/files/
下载下来后发现好像不支持msvc构建,于是vm跑起ubuntu,将源码拖进去之后make.
make时,提示缺少zlib.h,又去zlib官网下载了最新的版本并make install.
再接着make就成功了,然后终端里执行:unsquashfs ./rootfs
结果提示好像是无效的格式,百思不得解.继续google~
就发现了好东西:
http://sourceforge.net/p/squashfs/patches/20/
原来需要patch源码,手工patch后,编译~
接着执行:unsquashfs ./rootfs
又提示什么不支持LZMA...然后又google.
原来要支持LZMA需要下载LZMA SDK,并修改makefile里的编译参数.
全部弄完后,终于解包成功了!!

最后附上我路由器固件(因为有些文件是字符或块设备,所以打包不进压缩文件中):
http://CserSoft.opendrive.com/files/NV81NDIyNTY5MF9yOGduMl83YjQ5/squashfs-root.tar.gz
和我修改过的squashfs4.3(src和bin):
squashfs4.3-patched.7z
本来是.tar.gz,结果论坛不支持上传gz

上传的附件 0.png
squashfs4.3-patched.7z

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功