基于VxWorks系统的路由器固件研究
丛培欣
【摘 要】摘要:本文通过kali linux系统的binwalk软件工具及自行编写程序,识别并分析了基于VxWorks的MemFS文件系统的路由器固件的文件特征,同时提取了相应路由器的固件文件。为后续路由器固件重写提供思路及技术支持。
【期刊名称】电子测试 【年(卷),期】2016(000)019 【总页数】3
【关键词】路由器固件,VxWorks,MemFS,kali linux 2.0
0 引言
路由器(Router)是互联网的主要结点设备,起到网络互联、路由选择和拥塞控制等的作用。同时,在办公、家庭等环境中得到广泛的应用,是连接互联网的必不可少的设备之一。随着网络应用的日益丰富,数据转发量越来越大,对路由器的功能和性能要求也越来越高。路由器的功能和性能在硬件参数一致情况下,主要取决于路由器的固件,即路由器的操作系统。Wind River System公司的VxWorks嵌入式实时操作系统由于具有微内核、可裁剪、支持协议广泛等特性,通常被路由器厂商作为路由器的操作系统,而VxWorks的文件系统MemFS以其独特的文件压缩与索引方式在路由器文件系统中占领了一席之地。
1 VxWorks操作系统简介
VxWorks是美国Wind River System公司开发的具有工业领导地位的高性能
嵌入式实时操作系统。VxWorks具有专门为实时嵌入式系统设计开发的操作系统内核,其基于操作系统的应用程序具有跨平台的可移植性。系统只占用很小的存储空间、可高度裁减,保证了系统的高效率运行。VxWorks以其微内核、强实时性、可裁剪性和高效等特性,使其在工业控制、通信、航空、航天等领域得到了广泛应用。VxWorks由进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分构成。
2 VxWorks的文件系统MemFS简介
在MemFS中,开发者不需要考虑相关的目录结构,在此目录结构下的固件只需要将文件打包做成一个集合,并将集合投放到c代码中进行编译,同时又因为没有目录结构以及文件索引,搭载着该文件系统的硬件相比之下会更大的发挥自身的硬件优势并最大化的节约时间成本与空间成本。与SquashFS文件系统相比具有文件体积小,安全性高的特点,因而得到广泛的应用。
3 Kali Linux简介
Kali Linux是一个基于Debian的高级渗透测试和安全审计Linux发行版。它集成了精心挑选的渗透测试和安全审计的工具,供渗透测试和安全审计人员使用。其预装了许多渗透测试软件,包括如Nmap(端口扫描器)、Wireshark(数据包分析器)、John theRipper (密码破解器),以及Aircrack-ng(一套用于对无线局域网进行渗透测试的软件)和binwalk等工具。
本文在kali linux 2.0系统环境下进行MemFS文件系统的分析工作,使用该系统下binwalk工具以及linux工具集,分析路由器固件的文件结构。通过对binwalk识别结果分析可以获取出固件内文件的相关信息,并进行文件提取。
4 MemFS文件系统分析及文件提取
4.1 整体思路
本文以一个搭载MemFS文件系统的tplink路由器固件为例,利用kali linux系统的binwalk工具进行固件文件系统的识别,通过对识别结果的观察、分析确定文件系统的结构及特征,识别出各文件的名称、位置及大小。然后,通过C语言自行编写程序,按上述相关特征、规律进行文件提取,解压缩。为后续根据个性需要,为路由器固件重写提供支持。 4.2 binwalk对固件文件识别与分析
首先,使用binwalk识别固件文件系统版本情况并分析文件的存在情况。binwalk的识别结果如图1。
众所周知,被某种算法压缩的文件都有其特定的文件头,通过识别文件头即可识别出对应的压缩算法。由图1可知,MemFS存储的文件均被lzma算法所压缩,同时可知相关字节大小等信息。通过对lzma分析与字符串出现频率分析可得被压缩文件的文件头为5A000080,如图2中红色标注。
继续对binwalk识别结果进行分析,可得固件内各文件的文件名及文件的相关信息。结果如图3所示。
由图3 数据特征可知,各文件名及相关文件信息共占48个字节的数据块,同时推测数据块中前40个字节为文件名和“00”占位符,后8个字节为该文件大小与位置信息。通过上述识别出来的文件名、文件位置、文件大小、文件格式等信息,可通过自行编程对固件文件进行读取。
最后,通过程序提取出的文件并没有被解压,这里可以通过P7zip软件对这些文件进行批量解压。文件提取并解压缩后,发现8个字节中前4个字节是文件大小,后4个字节是文件位置,都是以十六进制的形态出现的,对前面所述推
基于VxWorks系统的路由器固件研究
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)