0x01简述

总结提取固件的方法并且手动提取固件的方法。

这段时间一直遇到的问题就是想分析一个固件的时候下载下来发解binwalk -Me xxx.bin j解压之后找不到想要的文件查了一些文档,整理了一下。

0x02固件提取

android tool怎么导出固件 安卓固件提取_字符串

android tool怎么导出固件 安卓固件提取_字符串_02

ftp协议或者是http协议的get请求

android tool怎么导出固件 安卓固件提取_安全_03

不过一般情况下使用的是下面这种烧录器

android tool怎么导出固件 安卓固件提取_android tool怎么导出固件_04

![在这里插入图片描述](

android tool怎么导出固件 安卓固件提取_安全_05

补充小技巧

android tool怎么导出固件 安卓固件提取_固件_06

截图来自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.binstep1:对其运行Linux文件实用程序,以确保它不是标准的存档或压缩文件 file xxxx.binstep2:分析字符串收集信息 查看字符串strings -n 10 xxx.bin 查看十六进制文件hexdump -C xxx.bin >hex.out -n 设置要输出的字符串含有的最少的字符数 -C 输出规范的十六进制和ASCII码android tool怎么导出固件 安卓固件提取_字符串_07 可以看到对U-boot引导加载程序还有对内核的引用step3:binwalk分析文件信息android tool怎么导出固件 安卓固件提取_安全_08 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内核的映像

android tool怎么导出固件 安卓固件提取_固件_09

step5:确定文件系统以及文件系统的开始

binwalk可能给出来文件系统类型如果没有给出就手动找。

确定使用的文件系统

android tool怎么导出固件 安卓固件提取_安全_10

SquashFS是一个非常常见的嵌入式文件系统接下来需要找到sqsh 字符串的变体(这个这个magic将会是SqushFS映像的开始),因此,需要查找sqsh类似的字串

这个字符串一般在整白整千字节的偏移上面所以可以查找以 * 开头的行(vim里面用^* )

也可以用hexdump -C xxx.bin > xxx

然后用vim搜索或者用 |grep 搜索

类似这种(这里我下载到的固件里面没有这个字符串,应该是已经更新了)

android tool怎么导出固件 安卓固件提取_android tool怎么导出固件_11

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/