0x01简述
总结提取固件的方法并且手动提取固件的方法。
这段时间一直遇到的问题就是想分析一个固件的时候下载下来发解binwalk -Me xxx.bin j解压之后找不到想要的文件查了一些文档,整理了一下。
0x02固件提取
文章图片
文章图片
ftp协议或者是http协议的get请求
文章图片
不过一般情况下使用的是下面这种烧录器
文章图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200401161758194.png
文章图片
补充小技巧
文章图片
截图来自https://book.yunzhan365.com/tkgd/lzkp/mobile/index.html
0x03固件映像文件解压
测试文件下载地址
https://www.linksys.com/us/support-article?articleNum=208638
文件名:WAG120N-EU-ANNEXB-ETSI-1.00.16code.bin
step1:对其运行Linux文件实用程序,以确保它不是标准的存档或压缩文件
file xxxx.bin
step2:分析字符串收集信息
查看字符串strings -n 10 xxx.bin
查看十六进制文件hexdump -C xxx.bin >hex.out
-n 设置要输出的字符串含有的最少的字符数
-C 输出规范的十六进制和ASCII码
文章图片
可以看到对U-boot引导加载程序还有对内核的引用
step3:binwalk分析文件信息
文章图片
uImage是uboot使用的标头格式,后面是LZMA压缩文件,有两个lzma压缩文件,一个是uboot的压缩文件,一个是kernel的压缩文件,下面需要对其解压
step4:运行dd提取lzma文件,然后用lzma工具解压,查看镜像类型
运行dd时不必担心指定大小限制;在解压缩期间,lzma将忽略任何结尾的无用字符(低版本的高版本的lzma不能,参考下文错误部分):
dd if=WAG120N-EU-ANNEXB-ETSI-1.00.16code.bin bs=1 skip=11076 of=uboot.lzma
if=文件名:输入文件名
of=文件名:输出文件名
skip=blocks:从输入文件开头跳过blocks个块后再开始复制
bs=bytes:同时设置读入/输出的块大小为bytes个字节
lzma -d uboot.lzma
解压
查看两个解压的文件可以看出来它们是U-Boot和linux内核的映像
文章图片
step5:确定文件系统以及文件系统的开始
binwalk可能给出来文件系统类型如果没有给出就手动找。
确定使用的文件系统
文章图片
SquashFS是一个非常常见的嵌入式文件系统
接下来需要找到sqsh 字符串的变体(这个这个magic将会是SqushFS映像的开始),因此,需要查找sqsh类似的字串
这个字符串一般在整白整千字节的偏移上面所以可以查找以 * 开头的行(vim里面用^* )
也可以用hexdump -C xxx.bin > xxx
然后用vim搜索或者用 |grep 搜索
类似这种(这里我下载到的固件里面没有这个字符串,应该是已经更新了)
文章图片
step6:搜索得到地址之后使用dd命令拷贝,再用lzma解压(如果magic不是标准的sqsh需要改成sqsh再解压)
0x03错误
tower@ubuntu:~/Desktop/work$ lzma -d uboot.lzma
lzma: uboot.lzma: 压缩数据已损坏
http://tukaani.org/lzma/'LZMA下载lzma-4.32.7.tar.gz
./configure
make install
【固件提取方法总结与手动解压】参考自
http://www.devttys0.com/2011/05/reverse-engineering-firmware-linksys-wag120n/