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/