-
-
[原创]探究vxworks文件名恢复
-
发表于:
5天前
2298
-
VxWorks以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
美国的F-16、F/A-18战斗机、B-2隐形轰炸机和爱国者导弹,火星探测器如1997年7月登陆的火星探测器,2008年5月登陆的凤凰号、2012年8月登陆的好奇号都使用到了VxWorks。
遇到好几次Vxworks固件了,真是每次被拷打每次都有新的一点感悟,从不知所措到稍微知道怎么做了
符号表缺失其实可以根据字符串的提示、静态编译的库函数的辨别去硬逆个大概,甚至有些残存符号表可以仔细找找恢复上去,
但如果是遇到某些路由函数,就可能没有办法——没办法去看路由到的文件,有时候就不能很好地分析整个数据流
因为,binwalk一把梭vxworks固件出来的画风往往是这样的,命名非常的混乱,但如果实际打开看看,内部内容其实是正常的
仔细一想,vxworks系统启动的时候,肯定是有什么参照去恢复文件名和位置的,否则怎么做路由呢
所以就开始了接下来的vxworks文件名恢复探究,以及,一键自动化
既然要恢复文件名,反过来就可以grep一下文件名去找这个表。以上图第二个例子为例
/userRpm/WzdAccessCtrlTargetAddRpm.htm
grep -r "WzdAccessCtrlTargetAddRpm.htm"可以得到这几条结果:
可以看到有两个别的文件(实际上也是htm文件)定义了表单,提交数据到WzdAccessCtrlTargetAddRpm.htm
只可惜我们连这两个htm叫什么名称都不知道,这就很难去分析数据流了
说回正题,有两个文件引用了这个htm,分别是0x3FC0和0x53D60处分割出来的文件,以各自在固件中的偏移来命名(3FC0、53D60)
实际上这两个文件是有来由的
3FC0其实就是uImage镜像
补充说明一个事情:3FC0文件不是完整的uImage,被binwalk命名为3FC0.7z的文件实际上才是完整的uImage镜像文件
而0x53D60的大小远远大于其它LZMA压缩区域,实际上,这正是vxworks的主程序bin文件,也是我们平常分析的重点文件
所以比较合理的解释是,53D60有这个字符串的原因是在web服务时进行路由
而3FC0(uImage)作为vxworks的启动镜像,其拥有这个字符串的唯一原因,是在恢复文件名和结构什么的,所以,如果有偏移表,那就在uImage内部。把3FC0.7z放入010editor看看:
首先,是最初的引导部分,这里放的都是程序代码:
搜索".htm"或者".png"之类的字符串,就能找到一个很整齐的表
可以看到文件名的前面,好像有类似于偏移的记载,不过到目前还是猜测
如果能找到一套正确的计算方法,能完全对上binwalk里面跑出来的镜像偏移的话,那就说明这确实可以用来恢复文件名
至此,我们找到了最关键的表项,而具体的细节还需探究一下
一个容易踏入的误区是,刚开始以为文件名的前面是其对应大小和偏移,为此计算了十几个,发现不对劲,为什么每种文件总是有1-2个的偏移是别的文件类型,而其它都是对应类型的呢
实际上,文件名的一串00 00 00 00后面,才是它的大小和偏移量
一些固件,比如这个案例,会记载文件系统的偏移(没记载也可以有兼容性很好的方案,下一节细说)
实际上,表里的偏移量+文件系统的偏移,将会对应到binwalk解包的文件名,即,在固件中的偏移值,这就是vxworks文件名恢复的方法
在反复的测试当中,我发现vxworks的文件系统有很多都是文件系统偏移0xF080+xxx的组合。比如,以png来作为测试案例:
首先按MIME type排序一下,因为偏移表本身也是按照类型来集中排布的,这样可以方便实验
然后,以png为例进行偏移量的计算测试
可以在010editor等工具里面找到如下.png字样
将其偏移逐一取出,并加上刚刚提到的0xF080,我们可以得到一些偏移量:
如图所示,所有的文件名都能找到对应偏移,那么,说明这种办法是切实可行的:比如binwalk解析出来的1FDA8,我们就可以知道它其实叫做loginbg.png,等等
(使用的excel语句是=DEC2HEX(HEX2DEC(B2) + HEX2DEC("F080")),可以帮助加快这个测试过程,不用每次都按计算器)
紧接着来测试下jpg、gif,找到偏移表对应表项
实验结果如下
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 4天前
被是气球呀编辑
,原因: 补充说明一点东西