cnhnln 发表于 2005-11-28 17:26:30

转载-Dr.com连网方式研究

前面smilelucifer已做《Dr.com客户端认证研究》,这里将对Dr.com连网方式(主要是tcp的连接)做个讲解。首先回顾下登陆内容。
1)    client --->server发出登陆请求
01 00 00 04 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2) Server --->client接到登陆请求后,给客户端发送一个salt
02 00 00 08 ab 33 00 00 00 00 00 00
salt 数据:ab 33 00 00
这个阶段的salt 主要是为了客户端加密认证数据之用。在实际认证过程中只使用其了前四个字节。

3    client --->server发出认证信息(根据salt数据发回认证消息,数据部分太长,略去了)

4    Server --->client认证通过信息(注意,下面要用到其中数据)
数据如下:
0020                            04 00 00 05 03 0d   .w.....L ........
003000 00 00 20 00 00 00 ffff ff ff ff 00 00 00 00   ... .... ........
004000 44 72 63 6f 3d 8e 724a a0 03 ac 13 08 77 00   .Drco=.r J.....w.
005000 b0 05 02 00 00 00 0000 d2 26 e6 3d ff ff ff   ........ ..&.=...
0060ff 01 00 00 00 00 00 0000 00 00 00 00 00         ........ ......

本来以为第四个数据部分只是Server对client发出的认证确认消息(认证成功),在用自己做的登陆器登陆上后发现上不了网,于是用原版dr.com登陆器登陆上网后用ethereal抓取了tcp连接的片断(firefox从www.163.com请求网页),如下:
1)    host->163(即数据包从我发往163),tcp第一次握手:
sequence num:      ef 57 1a d5
Flags:                ack,syn

2)    163->host ,tcp第二次握手:
sequence num:      10 10 36 ad
Acknowledgement num:    ef 57 1a d6
Flags:                ack,syn

3)    host->163,tcp第三次握手:
sequence num:      ef 57 1a d6
Acknowledgement num:    10 10 36 ae
Flags:                ack
内容:
000000 0e 38 e3 e6 00 00 a0cc d5 0c 00 08 00 45 00   ..8..... ......E.
001000 28 01 ff 40 00 40 0695 41 ac 13 08 77 ca 6c   .(..@.@. .A...w.l
002024 99 04 25 00 50 ef 571a d6 10 10 36 ae 50 10   $..%.P.W ....6.P.
003020 00 96 e3 00 00                                 .....         
可以看出前面都是正常的tcp握手过程

3)    host->163,注意,这里是关键,dr.com程序在这里插入了一个数据,其实是发给中间dr.com服务器网关做为tcp认证的,其ip头和tcp头基本和第三次握手的一样,不同点有Total Length,Identification,Header checksum(以上ip头的不同),Flags,checksum,tcp data(以上tcp的不同),就是说主要有两个不同点,一个是flags加了push(压入数据,立即发送),一个是数据部分。
sequence num:      ef 57 1a d6
Acknowledgement num:    10 10 36 ae(seq num和ack num都和第三次握手一样的)
Flags:                ack,push
Data:44 72 63 6f 3d 8e 72 4a a0 03 ac 13 08 77 00 00   .....Dr co=.rJ.....w..

000000 0e 38 e3 e6 00 00 a0cc d5 0c 00 08 00 45 00   ..8..... ......E.
001000 38 02 00 40 00 40 0695 30 ac 13 08 77 ca 6c   .8..@.@. .0...w.l
002024 99 04 25 00 50 ef 571a d6 10 10 36 ae 50 18   $..%.P.W ....6.P.
003020 00 ea 82 00 00 44 7263 6f 3d 8e 72 4a a0 03    .....Dr co=.rJ..
0040ac 13 08 77 00 00                                  ...w..         

5)163->host,对第4条的响应:
sequence num:      10 10 36 ae
Acknowledgement num:    ef 57 1a e6
Data:无数据

6)host->163,开始get网页
sequence num:      ef 57 1a e6
Acknowledgement num:    10 10 36 ae
再下去又是正常的数据传输部分。

从中可以看出dr.com在正常的tcp连接中插入了一个tcp认证数据包(暂且这么说了),
其中的16字节认证数据(44 72 63 6f 3d 8e 72 4a a0 03 ac 13 08 77 00 00)在登陆时的第四条server发给client的信息中。
44 72 63 6f:drom
3d 8e 72 4a:服务器ip
a0 03:可变,作为认证
ac 13 08 77 00 00:本地ip+0 0

tcp认证数据包发送后,dr.com服务器认证成功,本地继续发送get请求(注意seqnum+=10),以下是正常的tcp连接。

另外是udp的发送方式,这个很简单,dr.com在数据前面直接加了认证数据,例如:
0020                               44 72 63 6f 3d 8e                Drco=.
003072 4a a0 03 ac 13 08 7700 00 00 0b 01 00 00 01   rJ.....w ........
004000 00 00 00 00 00 03 7777 77 03 31 36 33 03 63   .......w ww.163.c
00506f 6d 00 00 01 00 01                               om.....         
可以看到前16个字节是加上去的认证数据,dr.com服务器会截取前16字节作为认证,然后把剩下的部分发出去。


--
之所以喜欢熬夜,是因为总希望深夜里,孤独时,能找到些不再让心灵空虚的东西。然而
每当昏昏沉沉睡去,迷迷糊糊醒来时却总是发现,依然
空空如也----
---- 一个不会浪漫的浪漫主义者
---- 一个失去理想的理想主义者
---- 一个爱看动漫的抗日fq......


szhlwl 发表于 2006-4-14 23:44:31

你好厉害
页: [1]
查看完整版本: 转载-Dr.com连网方式研究