NOE77101 vxworks后门账户分析
首先在github上找到noe77101固件,下载到本地,主要用的固件文件是noe77101.bin
使用binwalk -Me命令将noe固件解包
得到两个文件 217 217.zlib
使用binwalk分析文件217,可以看到有很多固件中包含很多信息,HTML、路径、xml、copyright、symbol table等

接下来需要提取固件的加载地址base address
针对elf封装的固件文件,在elf头中有特定数据位记录了固件的加载地址,通过读取elf头,可以直接获取固件加载地址。
使用binwalk -A 命令获取目标固件CPU架构等信息
能确定架构powerpc big endian

根据binwalk分析的bin文件,存在vxworks的符号表,地址在0x31EED4,查看此地址处数据,红框内容分别表示符号表名地址,符号表地址和符号表类别

据此,实际上符号表起始位置在0x31EED4-0x10 = 0x31EEC4处
使用strings命令查看217,预测APP_STATION_MODBUS是最后一个符号表名

地址位于0x298BD8处

这样就计算出偏移为 0x002A8BD8 – 0x00298BD8 = 0x10000
继续查找符号表函数末尾,结束地址为0x00348114

根据以上分析,就可以写出解码函数的代码了
from idaapi import * from idc import * loadaddress = 0x10000 eaStart = 0x31eec4 + loadaddress eaEnd = 0x348114 + loadaddress ea = eaStart eaEnd = eaEnd while ea < eaEnd: create_strlit(Dword(ea), BADADDR) sName = get_strlit_contents(Dword(ea)) print sName if sName: eaFunc = Dword(ea + 4) MakeName(eaFunc, sName) MakeCode(eaFunc) MakeFunction(eaFunc, BADADDR) ea = ea + 16
idapro载入的时候,需要选择架构和基址

注意修改两个地址值为0x10000

分析的代码是这样的,也没分析出有用的函数名

选择执行script,执行python脚本,运行后看到idapro分析出8909个函数

或者用Ghidra工具载入217文件,选择不分析

选择vxhunter插件针对ghidra的脚本文件,右键run

主版本选5.0

成功分析出各种函数

以上两种方法都可以得到vxworks固件的函数名,接下来就是分析默认添加的后门用户了
在idapro中,看到loginUserAdd函数的交叉引用

在usrAppInit中可以看到多出loginUserAdd调用,地址位于0x22DBxx处

根据偏移0x10000,在winhex中查看0x21DBxx处数据,存在好多硬编码字符,这些都是预留的后门账户和密码

在ghidra中,也可以根据还原的伪代码看到loginUserAdd添加的账户和密码

参考资料
https://github.com/ameng929/NOE77101_Firmware/