Air720固件分析系列B-WebData.bin分析,分解,精简,重构,代理Web管理界面

前言

上一篇文章, 解析了blf文件的结构, 知道blf是个zip文件, 这次, 我们要非常详细地分析WebData.bin, 即Web管理控制页面的数据文件

WebData.bin的文件结构

分3部分, 头部, 文件区, 尾部, 下面有C结构体的方式描述一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct webdata{
struct wd_head head;
struct wd_file[] files;
struct wd_end end;
};

// 头部共20字节

struct wd_head{
char finger[4]; //固定为FE CA FE CA
char crc32[4]; // 可能CRC32,但随便填也合法
char xdata[4]; // 固定为19 10 00 00
char revert[8]; // 保留字段,全是0x00
};

// 尾部共4字节
struct wd_head{
char finger[4]; //固定为DA DA DA DA
};

// 文件数据
struct wd_file{
char finger[4]; // 固定为00 10 FE CA
char fsize[3] ; // 低位在前的文件长度, 例如 68 00 00 代表 0x000068
char zsize[1] ; // 补位数据长度, 肯定是0-3之间的值, fsize - zsize = 文件内容的实际大小
char name[128]; // 文件路径,不足128位补0x00
char data[fsize]; // 由fsize决定的文件长度, 肯定是4的倍数
};


解析代码(Java版)的地址: https://gitee.com/wendal/Air720Master

解析和重整流程

  1. 根据WebData.bin的数据结构, 将数据文件解析为 头部/文件列表/尾部, 3部分
  2. 过滤文件列表
  3. 输出头部, 根据文件列表输出文件数据, 输出尾部

过滤规则:

为了实现 网卡模式下获取Air720的运行状态, 我们需要xml和cgi文件

所以, 根据后缀进行过滤即可, 可以到一个 110kb WebData.bin

这个文件的大小比AddtionalAPN.bin稍小, 而两者会占用一样的空间(根据A720.blf的分析可知)

使用7zip打开原始的blf文件, 替换WebData.bin, 刷机, 带板子启动后, 访问 http://192.168.0.1/login.cgi 出现空白页面, 访问 http://192.168.0.1/xml_action.cgi 出现为XML格式的数据,代表成功

精简好的WebData.bin下载地址: https://gitee.com/wendal/Air720Master/attach_files

进一步操作,代理Web管理界面

由于我们精简了xml和cgi之外的文件,打开 http://192.168.0.1 只会出现404页面, 那么,怎么办呢? 我们可以代理它

基于对WebData.bin的解析, 我们可以导出WebData.bin的全部数据文件

而,网页控制台对设备的读写操作,均通过login.cgi和xml_action.cgi两个URI完成.

所以, 我们可以做一个web服务, 将cgi请求导向设备, 其他文件本地提供

最终效果我做了一个Java实现,其他编程语言可以参考一下

地址依然是: https://gitee.com/wendal/Air720Master 运行后, 访问 http://127.0.0.1:8080 即可看到原版登录界面,可正常登录,进行配置

上次更新 2021-01-28