or r3, r7 //r3“或”r7,r7为“00 00 B2 B3”
B3 B2 B1 B0
A3 A2 A1 A0
mov.l off_40493C, r3 ; unk_42B2B8
or r2, r0 //r2“或”r0,r0为“00 00 A0 A1”
or r6, r1 //r6“或”r1,r1为“B0 B1 00 00”
cmp/eq #1, r0 //r0=1时,T置 1
or r1, r7 //r1“或”r7,r7为“B0 B1 B2 B3”
mov.w r0, @r3
mov.l r7, @(4,r3) //这两条指令将转换后的数据重新写回 unk_42B2B8 变量,完成
数据(命令)格式转换。转换后,r0(前 4字节)为命令,r7(后4 字节)为参数。
bt/s loc_404950
cmp/eq #4, r0
bf/s loc_4048B6
cmp/eq #h'10, r0
bra loc4049E0
B0 B1 B2 B3
00 00 A0 A1
nop
loc_4048B6:
bf/s loc_4048BE
cmp/eq r9, r0
bra loc_40511E
nop
loc_4048BE:
bt/s loc_4048D8
cmp/eq #h'40, r0
bt loc_4048D8
mov.w word_4048F0, r1 ; h'400
cmp/eq r1, r0
bt loc_4048D8
mov.w word_4048F2, r1 ; h'1000
cmp/eq r1, r0
bt loc_4048D8
mov.w word_4048F4, r1 ; h'4000
mov.l off_40494C, r4 ; aReceiveWrongCo ; "Receive Wrong Command !\n"
cmp/eq r1, r0
bf loc_40486A
… (略)//假如命令(r0 寄存器)不为1、4、h'10、h'100、h'40、h'400、h'1000、
h'4000 等时,输出“Receive Wrong Command !\n”并断开连接。
通过分析,我们可以得知:1)中兴机顶盒的配置程序 stbcfg 接收的命令数据长度为 8
字节;2)接收后对命令进行相应的转换,前两个字节反序,第3和 4个字节置为“00”,后
四个字节反序,即网络字节顺序转换;3)转换后,前4 字节为命令,后4 字节为参数;4)
命令应该为h'1、h'4、h'10、h'100、h'40、h'400、h'1000、h'4000 等数值,否则输出“Receive
Wrong Command !”并断开连接。假如我们通过客户端提交 8 字节长的数据
“#$01#$02#$03#$04#$05#$06#$07#$08”,前 4 字节对应的十六进制值为“h'102”,由于不
是设定的命令数值,所以超级终端会输出“Receive Wrong Command !”并断开连接。
继续分析后面的汇编代码,我们就会得出以上数值对应命令所完成的功能,如下:
命令数值 超级终端输出字符串 功能说明
h'1 System Password Command 客户端认证过程,密码为“654321”。此过程非必须,
不经过认证,也可以直接提交其它命令。
h'4 Config Command 修改机顶盒的各种配置。客户端提交的命令后 4 个
字节(即命令参数)为接收新配置数据的缓冲区长
度,不能为 0,另外对接收的新配置数据进行格式验
证,比如:IP、MAC、NetMask、GateWay等。
h'10 Reboot Command 重启机顶盒。成功时向客户端发送“h'2000” (十
六进制)数据。
h'100 inetd Command 命令参数为 0 时,调用“ execv ”执行
“/usr/sbin/telnetd”,开启 telnetd 服务。
h'40 RemoteSetCfg command 检查并获取机顶盒配置参数。命令参数数值为 2,比
如“ #$00#$40#$00#$00#$00#$00#$00#$02 ”,
B600V4A等型号加密后发送。
h'400 Check STB TYPE Command 读取机顶盒型号文件/etc/hw.inf 和/etc/sw.inf,并向客
户端发送数据,B600V4A等型号加密后发送。
h'1000 Coreup command 执行/var/coreup.sh 脚本命令,sub_40443C。命令参
数为接收数据的长度。
h'4000 Coreup_print command 显示/var/coreup_print.txt 文件,即 coreup.sh 脚本执
行结果。
在 stbcfg 反汇编代码中搜索相应的字符串,比如“Reboot Command”、“inetd Command”
等,就可以定位到关键代码,本文不做逐一分析。
1、“Reboot Command”命令。客户端发送“#$00#$10#$00#$00#$00#$00#$00#$00” 字
符串,重启远程机顶盒。
2、“inetd Command”命令。 客户端发送字符串“#$01#$00#$00#$00#$00#$00#$00#$00”,
开启机顶盒 telnetd 服务,所有型号的中兴IPTV机顶盒受此影响,比如:B600(V3、V4、
V4A)和B700(V2)等。
3、“RemoteSetCfg command”命令。当客户端提交“#$00#$40#$00#$00#$00#$00 |