固件提取方法總結與手動解壓

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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章