固件获取主要有三类方法,一类是直接从官网上找到目标型号的设备固件下载下来即可;一类是使用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文件
主要参考资料: