固件獲取主要有三類方法,一類是直接從官網上找到目標型號的設備固件下載下來即可;一類是使用Telnet或者ssh從目標設備中獲取固件;最后一類是需要使用一些硬件工具和軟件工具,從開發板上的flash芯片中或者通過UART和JTAG調試接口將固件提取下來。
1)網上下載
D-Link路由器固件 ZOL驅動下載網站上也可以找到其他品牌路由器的固件,點擊鏈接
華碩ASUS路由器固件(輸入產品型號,找到固件下載即可) eg.RT-AC88U
騰達Tenda路由器固件(輸入產品型號) eg.AC23
小米路由器固件(ROM)
小蟻智能攝像頭固件(但是這個下載下來不曉得文件是什么格式)
美國網件NETGEAR設備固件(輸入產品型號,下載壓縮包格式,其中是內核和根文件) 這個鏈接也可
下載得到的固件包一般是.bin格式,也有.trx格式:
.bin files are for flashing from a stock firmware. .trx files are for flashing from OpenWrt. bin后綴文件一般為十六進制通過刷寫BIOS的工具來燒錄芯片常用的格式,bin文件是直接可以燒到固件里面執行的;bin文件是從硬盤啟動所需要的,會添加相應的文件系統頭,trx是flash啟動的,要把頭去掉,所以trx會比bin小些;一般說來,trx的固件是通用的版本,bin是為一些設備支持提供的文件,使它符合一些設備的特性。
在查找資料過程中,還接觸到了Openwrt這個名詞:
Openwrt是嵌入式設備上運行的linux系統。OpenWrt 的文件系統是可寫的,開發者無需在每一次修改后重新編譯,令它更像一個小型的 Linux 電腦系統,也加快了開發速度。
無論是 ARM, PowerPC 或 MIPS 的處理器,都有很好的支持。並且附帶3000左右的軟件包,用戶可以方便的自定義功能來制作固件,也可以方便的移植各類功能到openwrt下。
相關資料:
openwrt是什么_openwrt有什么用、從零開始編譯OpenWrt固件、openwrt編譯入門(絕對詳細版)
2)遠程登錄獲取固件
前提條件是有目標物聯網設備,並且能正確聯網。
這里使用幾個工具,來對目標設備上的固件進行下載。①PuTTY,②WinSCP。
PuTTY工具使用ssh協議登錄目標設備服務器,並將固件文件復制到/tmp文件夾;
WinSCP工具登錄目標設備后,可將/tmp中的固件下載到本地硬盤中。
參考(詳細步驟):https://jingyan.baidu.com/article/870c6fc31357ebb03fe4bedd.html
3)硬件提取
在網絡上找不到目標固件資源的情況下,可以選擇從硬件下手,提取固件。一般比較常用的是下邊兩種:
已知固件(firmware)一般存儲於設備中的電可擦除只讀存儲器EEPROM(Electrically Erasable Programmable ROM)或FLASH芯片中,不會存儲在RAM中。
一是從Flash芯片中讀取固件:①將導線連接到芯片的引腳,通過飛線連接RT809F編程器,進行編程器軟件在線讀取固件【該方法比較適合大型的、成本較高、價格昂貴的工控設備,該方法不會對開發板造成破壞】;②把芯片拆焊下來,通過燒錄座編程器,離線讀取固件【適用於芯片引腳采用點錫絲網焊接在背面,引腳太小或沒有暴露出引腳等情況】;案例和參考:鏈接。
二是通過串口或調試接口讀取固件:①bootloader讀取,芯片和電腦之間通過UART串口連接通信,運行mcuisp軟件,點擊讀Flash即可(或者使用SSCOM軟件也可以);②需要用到硬件調試工具,一般可以通過下面兩類調試接口,把Flash中的數據讀取出來:
(1)SWD接口,利用硬件:J-LINK OB或者J-LINK或者ST-LINK;利用軟件:J-LINK驅動程序自帶的J-FLASH或者ST官網提供的STVP。
(2)JTAG接口,利用硬件:J-LINK;利用軟件:J-LINK驅動自帶的J-FLASH。
串口和調試接口的區別:
能用串口下載程序的單片機,其內部一般都有boot程序的支持,boot程序將要下載的數據通過串口接收到單片機之后調用boot中的flash編程程序,寫到內部的flash中;
JTAG是一種標准的調試接口,完全硬件實現,需要單片機內部有JTAG的硬件調試單元和外面的仿真器進行通信,既能調試又能下載。
固件分析工具:
binwalk – 通過固件文件頭來分析文件和文件系統(binwalk使用方法)
file – 用來檢測是否是有效的文件和文件類型
hexdump --16進制導出工具
strings --跟hexdump類似但是可以以可讀的形式展示
lzma --解壓LZMA文件
主要參考資料: