免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 谁遥控了我的电视?—中兴机顶盒IPTV安全(3)

谁遥控了我的电视?—中兴机顶盒IPTV安全(3)

时间:2011-12-06 22:20来源:未知 整理:寂涯网络 点击:


 Accept()函数原型:int accept(int sockfd, void *addr, int *addrlen);
sockfd 是被监听的 socket 描述符,addr 通常是一个指向 sockaddr_in 变量的指针,该变
量用来存放提出连接请求服务的主机信息(哪台主机从哪个端口发出该请求);addrten 通常
为一个指向值为sizeof(struct sockaddr_in)的整型指针变量。出现错误时 accept函数返回-1 并
置相应的 errno 值。
 
第三节 stbcfg反汇编
 
我们从 Socket套接字的创建、绑定开始,分析反汇编代码,初步熟悉SH 汇编语言的风
格和特点。首先stbcfg创建 Socket套接字,代码如下:

loc_4045A4:
mov.l r8, @-r15
mov #-1, r2
mov.l r9, @-r15
mov #2, r4
mov.l r10, @-r15
mov #0, r10
... (略)
mov.l off_404730, r1 ; unk_42C644
mov.l r2, @r11
mov.l r2, @r1
jsr @r0 ; sub_4084F4 //该过程调用Scoket函数,创建Socket套接字的描述符
mov #0, r6
cmp/pz r0 
bt/s loc_4045F2 //创建 Socket成功,跳转loc_4045F2
mov r0, r8
mov r0, r5
mov.l off_404734, r0 ; printf
mov.l off_404738, r4 ; aSocketCreateEr ; "Socket Create Error=%d\n"
jsr @r0 ; printf
nop
bra loc_40465C
nop

创建 Socket成功,跳转loc_4045F2,调用bind 函数绑定 IP 和端口,代码如下:

loc_4045F2:
mov r0, r4 //Socket套接字描述符sockfd
mov.l off_40473C, r0 ; setsockopt 
//int setsockopt(int sockfd, int level, int optname, const void *optval,
socklen_t optlen);
//设置与套接字关联的选项,成功执行时,返回0。失败返回-1,并置errno相应值。
mov #1, r1
mov.w word_404712, r7 ; h'1168
add #-4, r15
mov.l r1, @(h'34,r9)
mov #4, r1
mov.l r1, @r15
add r15, r7 //指向包含新选项值的缓冲*optval
mov #1, r5  //选项所在的协议层level

jsr @r0 ; setsockopt
mov #2, r6 //需要访问的选项名optname
//开始调用bind函数,绑定IP地址和端口号,bind 函数原型:
//int bind(int sockfd,struct sockaddr_in *my_addr, int addrlen);
//调用成功时返回0,出现错误时返回"-1",并将errno置为相应的错误号。
mov.l off_404740, r5 ; unk_42C65C //16字节的sockaddr_in结构类型
mov #2, r1
mov.l off_404744, r0 ; bind 
add #4, r15
mov.w r1, @r5 //sockaddr_in结构类型中的地址簇,2为 AF_INET,1 为AF_UNIX
mov r8, r4 //Socket套接字描述符sockfd
mov.w word_404714, r1 ; h'3A27 //低字节优先存储,即十六进制“273A”,十进制
“10042”,不需要使用htons()函数转换。
mov #h'10, r6
mov.l r10, @(4,r5) //IP地址为#0,即 0.0.0.0
add #2, r5

mov.w r1, @r5 //Bind函数的 sockaddr_in结构类型中的端口号,h'3A27即10042
jsr @r0 ; bind
add #-2, r5
cmp/pz r0
bt loc_404642 //bind成功,跳转 loc_404642
mov.l off_404748, r0 ; __errno_location
jsr @r0 ; __errno_location
nop
mov.l @r0, r5
mov.l off_404734, r0 ; printf
mov.l off_40474C, r4 ; aListenSocketBi ; "Listen Socket Bind Error=%d!\n"
jsr @r0 ; printf
nop
mov.l off_404750, r0 ; sub_408604
jsr @r0 ; sub_408604
mov r8, r4
bra loc_40465C
nop
loc_404642:
... (略)//调用 ioctl、listen、select、accept等函数。

调用 bind函数时,其 16字节的 sockaddr_in结构类型变量的数据,用“小端法”(Little endian)
表示为:

10042端口的利用。我们分析 stbcfg如何通过10042端口接收各种配置命令。当程序完
成套接字的创建、绑定和监听后,随后便调用 sub_408670 过程(或函数)接收客户端发送
的数据(命令)。sub_408670过程调用了 int recv(int sockfd, char FAR *buf, int len, int flags)
函数完成数据接收,其代码如下,sub_408554过程调用int send( int sockfd, const char FAR
*buf, int len, int flags)函数完成数据发送。

 
sub_408670: //调用方式:sub_408670(r4,r5,r6,r7),r4~r7 由外部引入。
//r4为套接字 unk_42C644,r5 为接收的数据(缓冲区)unk_42B2B8,r6为接收的数据

长度,r7确定是否需要调用recv 函数。对应函数recv(r4,r5,r6,r7)
; FUNCTION CHUNK AT 00401238 SIZE 0000000A BYTES
cmp/pl r4 //r4为 4字节套接字描述符unk_42C644,r4>0时,1T,否则0T
mov r7, r0
bt/s loc_408682 

本页地址 http://www.jybase.net/xitonganquan/20111206699.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com