$00#$02”命令,程序跳转到loc_405508,代码如下:
loc_405508:
mov.l off_4055C4, r8 ; printf
mov.w word_4055BC, r6 ; h'530
mov.l off_4055C8, r7 ; aRemotesetcfg ; "RemoteSetCfg"
mov.l off_405604, r4 ; aSDSCheck2 ; "%s[%d]{%s}Check 2\n"
mov.l off_4055D0, r5 ; aRemotestbcfg_c ; "RemoteStbCfg.c"
jsr @r8 ; printf
nop
mov.l off_4055D4, r0 ; sub_40424C
mov.l off_4055D8, r10 ; unk_42B2C0
mov.l off_405608, r11 ; unk_42C258
mov r10, r4
jsr @r0 ; sub_40424C //sub_40D324C 获得 stbcfg配置
mov r11, r5
mov.l off_40560C, r4 ; aVVDKilenD ; "发送自检信息长度为 iLen=%d\n"
mov r0, r9 //自检信息长度
jsr @r8 ; printf //输出“发送自检信息长度为iLen=”,数值为r5
mov r0, r5
cmp/pl r9 //长度大于0,跳转loc_405534
bt/s loc_405534
mov r10, r4
loc_405576:
mov.l off_405618, r0 ; sub_408554
mov.l off_40561C, r1 ; unk_42C644
mov.l off_4055F0, r5 ; unk_42B2B8
mov.l @r1, r4 //Scoket 套接字描述符
mov.w word_4055BE, r7 ; h'100
jsr @r0 ; sub_408554 //向客户端发送自检信息,长度为r10
mov r10, r6
mov.l off_4055C4, r9 ; printf
mov r0, r8
mov.l off_405620, r4 ; unk_4140A8
jsr @r9 ; printf
mov r10, r5
cmp/pl r8
利用此命令,可以远程获取机顶盒的配置参数,需要注意的是:B600V4机顶盒发送未
加密数据,而其它型号如B600V4A、B600V4C、B700V2等发送加密数据。
4、“Coreup command”命令。当客户端提交的命令数据值为“h'1000”,执行“Coreup
command.”代码后,继续接收的客户端提交的数据,长度为命令参数所指定的数值。
loc_4056DA:
mov.l off_4057D0, r3 ; unk_42B2B8 //客户端提交的8 字节命令。
mov.w word_4057C2, r1 ; h'1000
mov.w @r3, r2
cmp/eq r1, r2
bf loc_405774 //提交的命令值是否h'1000,是则不跳转,否则跳转。
mov.l off_4057D4, r11 ; printf
mov.l off_40580C, r4 ; aCoreupCommand_ ; "Coreup command.\n"
mov.l off_405804, r13 ; unk_42C644
jsr @r11 ; printf //超级终端输出“Coreup command.”
mov r3, r10 //即unk_42B2B8
mov.l off_405810, r0 ; memset
mov r10, r4
mov.l @(4,r10), r8 //unk_42B2B的后 4个字节(即命令参数)
mov.w word_4057C4, r6 ; h'1388
jsr @r0 ; memset //初始化指向 unk_42B2B 的内存空间为“00”,长度为
h’1388
mov #0, r5
mov.l off_405814, r0 ; sub_408670
mov r8, r6 //命令参数指定接收数据的长度
mov.w word_4057C0, r12 ; h'100
mov r10, r5
mov.l @r13, r4
jsr @r0 ; sub_408670 //接收数据到指向unk_42B2B 的内存空间,长度为h’1388
mov r12, r7
cmp/pl r0
mov.l off_405818, r4 ; aReceiveCoreupI ; "Receive Coreup Informatin Failed\n"
bt loc_405712 //接收到数据,即r0>0时,跳转
bra loc_40486A
nop
loc_405712:
……
当机顶盒再次接收到数据后,跳转到loc_405712继续执行,调用sub_40443C过程,代码如
下:
sub_40443C:
...
tst r4, r4 //接收到的数据
mov r4, r8
mov #-1, r0
...
bt/s loc_404484
add #-h'C, r15
mov #0, r1
mov r15, r2
mov.l off_404544, r0 ; strncasecmp
add #4, r2
mov.l r1, @(4,r2)
mov r4, r5
mov.l off_404548, r1 ; aCoreup_sh ; "coreup.sh"
mov.l off_40454C, r4 ; aHttp ; "http://"
mov.l r1, @r2
jsr @r0 ; strncasecmp //比较r4和 r5前 7个字符,相同则返回0,忽略大小写
mov #7, r6
tst r0, r0
mov.l off_404550, r4 ; aUpdateUrlTypeE ; "Update URL Type Error!\n"
bf/s loc_40447C //r0为 0,即接收数据的前7 个字符不为“http://”,则跳转
mov #8, r1
mov.w word_40453C, r9 ; h'FC
add r8, r9
mov.l @(4,r9), r2
cmp/hi r1, r2
bf loc_404488
mov.l off_404554, r4 ; aUpdateMtdBlock ; "Update MTD Block Number Error!\n"
loc_40447C:
...(略)
bra loc_40452A //退出
nop
loc_404488:
mov.l off_40455C, r0 ; malloc
mov.w word_40453E, r10 ; h'184
jsr @r0 ; malloc //申请新内存空间,长度h'184
mov r10, r4
tst r0, r0
bf/s loc_4044A4
mov r0, r4 |