VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
固件提取的常用方式是使用binwalk工具进行分析和提取。
2.1 提取
Binwalk分析,该固件内嵌一个使用lzma压缩的二进制数据。
2.2 解压
可采用lzma命令或者binwalkh指令解压缩
- lzma
- binwalk
该文件就是我们需要分析的VxWorks固件。
首先需要查找VxWorks系统固件加载地址,否则系统将无法运行。加载地址将影响后面一些绝对地址的引用比如函数表及字符串的引用。
3.1 查看设备架构
- ARM
3.2 IDA分析
- 选择ARM/little
- 基地址为0
VxWorks采用usrInit进行栈初始化,usrInit是VxWorks系统引导后运行的第一个函数。
LDR R0,=0x40205000
BIC R0,R0,#3
SUB RO,RO,#4
MOV SP,RO #栈执政赋值 R0=$sp+0
可知加载的基地址为0x40205000
3.3 利用符号表修复函数名
Bzero是VxWorks中一个函数,系统启动过程中会使用bzero函数对bss区的数据进行清零,因此可以利用”grep -r bzero”查找bzero函数。
$ grep -r bzero
- memset
3.3.1 手动定位
符号表
00 05 1B 29 00 00 34 E4
文件大小和符号表大小
8字节之后就是符号表
00 00 34 E4 => 13540(10进制)
8 + 8 * 13540 = 108328(符号表偏移)->符号表位置
函数符号偏移
54 00 00 00 40 37 36 84
类型(函数) 54
符号表偏移 00 00 00 -> 0
内存中的偏移 40 37 36 84
函数名称 AES_CMAC
3.4 VxHunter工具修复
3.4.1 自动修复函数名
该工具自动识别函数符号
项目地址:
https://github.com/PAGalaxyLab/vxhunter.git
VxWorks固件分析,主要从内存加载地址及符号表入手,修改符号表与确定内存加载地址,对后续的漏洞挖掘起到至关重要的作用。
原文始发于微信公众号(SAINTSEC):VxWorks固件系统研究技术总结一
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论