固件提取方法总结与手动解压

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/

    推荐阅读