Theme Preview

TP-LINK VxWorks系统路由器固件升级文件格式(一)

由 李晓岚 在 2014年02月06日发表

前段时间,TL-R478型号的路由器固件升级文件引起了我的注意,生产商是TP-LINK。其固件升级文件格式,与该生产商其它产品已知的格式完全不同。

使用二进制编辑器打开固件,在文件偏移0x5c处,有这样的一段文字:

fwup-ptn hw-info base 0x01000 size 0x00105

fwup-ptn product-info base 0x01105 size 0x0021d

fwup-ptn partition-table base 0x00800 size 0x00800

fwup-ptn default-config base 0x01322 size 0x00968

fwup-ptn profile base 0x01c8a size 0x006da

fwup-ptn soft-version base 0x02364 size 0x00015

fwup-ptn os-image base 0x02379 size 0x152901

fwup-ptn web-res base 0x154c7a size 0x3f4d2

fwup-ptn appdist-db base 0x19414c size 0x00da4

Google "fwup-ptn",没有找到有用信息。

看来只能自行分析。不难发现,每一行都以"\t\r\n"分割,整段文字以"\x00"结束。仔细观察后可以发现,每行都由六个空格分割的字符串构成,我们可以看成三个键值对。当我们按每行base的值从大到小排列,可以得出这样的结论:每行的base值加上size值,就等于下一行的base值。于是可以猜测,上面文字每行代表一个分区(partition),fwup-ptn的值是分区的名字,base代表分区内容在文件中的偏移量,size由字面意思即知是大小的意思。简单计算就可以得知base所代表的偏移量是从上面这段文字开始计算的。于是,很容易写出一个程序,抽取出固件升级文件中的各个分区的内容,源程序在此,其中的unpack.py就是此用途。

unpack.py TL-WVR300v1.bin

执行后,将在当前目录下,生成按分区名命名的文件。os-image和web-res将会是后面我们感兴趣的分区文件。

通过在固件文件中发现的字符串“VxWorks5.5.1”,猜测其系统为VxWorks。另外,发现TL-WVR300也是使用这样的固件升级文件格式。

对偏移从0x00-0x5c的文件头,将在后续的文章中进行分析。

标签:固件路由器

comments powered by Disqus