联创宽带上网助手协议的简单分析(三):密码包的构造过程

 密码包的构造过程:

   密码包用同样的方法得到

CPU Disasm

Address   Hex dump          Command                                  Comments

00408E70  /$  81EC 40060000 SUB ESP,640                              ; 构造密码包ORZ~~~

00408E76  |.  A1 A0984100   MOV EAX,DWORD PTR DS:[4198A0]

00408E7B  |.  66:8B0D A4984 MOV CX,WORD PTR DS:[4198A4]

00408E82  |.  56            PUSH ESI

00408E83  |.  57            PUSH EDI

00408E84  |.  894424 6C     MOV DWORD PTR SS:[LOCAL.374],EAX

00408E88  |.  66:894C24 70  MOV WORD PTR SS:[LOCAL.373],CX           ; 写入服务器MAC

00408E8D  |.  E8 4E87FFFF   CALL 004015E0                            ; [mycrack.004015E0

00408E92  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]

00408E94  |.  895424 72     MOV DWORD PTR SS:[ESP+72],EDX            ; 写入本机MAC

00408E98  |.  66:8B40 04    MOV AX,WORD PTR DS:[EAX+4]

00408E9C  |.  66:894424 76  MOV WORD PTR SS:[LOCAL.372+2],AX

00408EA1  |.  C64424 78 88  MOV BYTE PTR SS:[LOCAL.371],88

00408EA6  |.  C64424 79 8E  MOV BYTE PTR SS:[LOCAL.371+1],8E

00408EAB  |.  C64424 7B 00  MOV BYTE PTR SS:[LOCAL.371+3],0

00408EB0  |.  C64424 7A 01  MOV BYTE PTR SS:[LOCAL.371+2],1

00408EB5  |.  C64424 7E 02  MOV BYTE PTR SS:[LOCAL.370+2],2

00408EBA  |.  E8 3184FFFF   CALL 004012F0                            ; [mycrack.004012F0, 获取ID

00408EBF  |.  8D8C24 820000 LEA ECX,[LOCAL.369+2]

00408EC6  |.  51            PUSH ECX                                 ; /Arg1

00408EC7  |.  888424 830000 MOV BYTE PTR SS:[LOCAL.370+3],AL         ; |

00408ECE  |.  E8 7DFDFFFF   CALL 00408C50                            ; /mycrack.00408C50, 写入type_data,关键CALL

00408ED3  |.  8BF0          MOV ESI,EAX

00408ED5  |.  83C4 04       ADD ESP,4

00408ED8  |.  8D7E 04       LEA EDI,[ESI+4]                          ; (type_data+type)+4bytelength

00408EDB  |.  57            PUSH EDI

00408EDC  |.  E8 71410000   CALL <JMP.&ws2_32.htons>                 ; Jump to ws2_32.ntohs

00408EE1  |.  57            PUSH EDI

00408EE2  |.  66:898424 800 MOV WORD PTR SS:[ESP+80],AX              ; 填入length

00408EEA  |.  E8 63410000   CALL <JMP.&ws2_32.htons>                 ; Jump to ws2_32.ntohs

00408EEF  |.  0FB65424 7F   MOVZX EDX,BYTE PTR SS:[ARG.31+3]

00408EF4  |.  52            PUSH EDX

00408EF5  |.  66:898424 840 MOV WORD PTR SS:[ARG.33],AX              ; 填入length

00408EFD  |.  8D4424 0C     LEA EAX,[ARG.3]

00408F01  |.  68 14664100   PUSH OFFSET mycrack.00416614             ; ASCII "SEND : RSP/AUTH  ID(%d)

"

00408F06  |.  50            PUSH EAX

00408F07  |.  E8 31430000   CALL 0040D23D

00408F0C  |.  8D4C24 14     LEA ECX,[ARG.5]

00408F10  |.  68 08000088   PUSH 88000008                            ; /Arg2 = 88000008

00408F15  |.  51            PUSH ECX                                 ; |Arg1

00408F16  |.  E8 350E0000   CALL 00409D50                            ; /mycrack.00409D50

00408F1B  |.  8B0D 68654100 MOV ECX,DWORD PTR DS:[416568]            ; 填入尾部

00408F21  |.  83C6 16       ADD ESI,16

00408F24  |.  8D8434 800000 LEA EAX,[ESI+ESP+80]

00408F2B  |.  8BD0          MOV EDX,EAX

00408F2D  |.  890A          MOV DWORD PTR DS:[EDX],ECX

00408F2F  |.  8B0D 6C654100 MOV ECX,DWORD PTR DS:[41656C]            ; ASCII "age"

00408F35  |.  894A 04       MOV DWORD PTR DS:[EDX+4],ECX

00408F38  |.  83C6 0C       ADD ESI,0C

00408F3B  |.  8D9424 800000 LEA EDX,[ARG.32]

00408F42  |.  56            PUSH ESI

00408F43  |.  52            PUSH EDX

00408F44  |.  C740 08 00000 MOV DWORD PTR DS:[EAX+8],0

00408F4B  |.  E8 C0320000   CALL 0040C210                            ; 发送密码包ORZ~~~

00408F50  |.  A1 10B24100   MOV EAX,DWORD PTR DS:[41B210]

其他字段都是简单明了的,就只有trailer段了

跟入00408ECE 处的 CALL 00408C50 单步几步

00408C7F  |.  6A 64         PUSH 64                                  ; /Arg2 = 64

00408C81  |.  50            PUSH EAX                                 ; |Arg1 => OFFSET LOCAL.46

00408C82  |.  E8 E986FFFF   CALL 00401370                            ; /mycrack.00401370, 获取request中的TYPE_DATA

                                                                             ……………………..

00408C94  |>  0FB6540C 1C   /MOVZX EDX,BYTE PTR SS:[ECX+ESP+1C]      ; 累加requesttype_data的密匙

00408C99  |.  03C2          |ADD EAX,EDX

00408C9B  |.  41            |INC ECX

00408C9C  |.  3BCE          |CMP ECX,ESI

00408C9E  |.^ 7C F4         /JL SHORT 00408C94

00408CA0  |>  99            CDQ                                      ; edi=累加值%0x0a

00408CA1  |.  B9 0A000000   MOV ECX,0A

00408CA6  |.  F7F9          IDIV ECX

00408CA8  |.  8BFA          MOV EDI,EDX

00408CAA  |.  E8 4186FFFF   CALL 004012F0                            ; [mycrack.004012F0, 获取ID

00408CAF  |.  8D9424 800000 LEA EDX,[LOCAL.21]

00408CB6  |.  52            PUSH EDX

00408CB7  |.  884434 20     MOV BYTE PTR SS:[ESI+ESP+20],AL          ; 填入id                           

                                                                                ………………

00408CD4  |.  8D9424 900000 LEA EDX,[LOCAL.21]

00408CDB  |.  52            PUSH EDX                                 ; /Arg2 => OFFSET LOCAL.21

00408CDC  |.  8D4424 20     LEA EAX,[LOCAL.50]                       ; |

00408CE0  |.  50            PUSH EAX                                 ; |Arg1 => OFFSET LOCAL.50

00408CE1  |.  E8 DA1B0000   CALL 0040A8C0                            ; MD5final函数

前面的那段就是把服务器发过来的第2request包中的type_data的值进行累加,在对0xa取余,即累加和转为10进制后的个位数保持起来,后面用到,然后再对type_data16个字节再加上包中的ID(17个字节)MD5加密,再看后面

00408CEE  |.  8D8F C9644100 LEA ECX,[EDI+4164C9]                     ; ASCII "se md5 error!!"

00408CF4  |>  8A5401 FF     /MOV DL,BYTE PTR DS:[EAX+ECX-1]          ; 哈希表位置4164c8+esi>>4

00408CF8  |.  8A5C04 0C     |MOV BL,BYTE PTR SS:[EAX+ESP+0C]         ; 按位异或

00408CFC  |.  32DA          |XOR BL,DL

00408CFE  |.  8A1401        |MOV DL,BYTE PTR DS:[EAX+ECX]

00408D01  |.  885C04 0C     |MOV BYTE PTR SS:[EAX+ESP+0C],BL

00408D05  |.  8A5C04 0D     |MOV BL,BYTE PTR SS:[EAX+ESP+0D]

00408D09  |.  32DA          |XOR BL,DL

00408D0B  |.  8A5401 01     |MOV DL,BYTE PTR DS:[EAX+ECX+1]

00408D0F  |.  885C04 0D     |MOV BYTE PTR SS:[EAX+ESP+0D],BL

00408D13  |.  8A5C04 0E     |MOV BL,BYTE PTR SS:[EAX+ESP+0E]

00408D17  |.  32DA          |XOR BL,DL

00408D19  |.  8A5401 02     |MOV DL,BYTE PTR DS:[EAX+ECX+2]

00408D1D  |.  885C04 0E     |MOV BYTE PTR SS:[EAX+ESP+0E],BL

00408D21  |.  305404 0F     |XOR BYTE PTR SS:[EAX+ESP+0F],DL

00408D25  |.  83C0 04       |ADD EAX,4

00408D28  |.  83F8 10       |CMP EAX,10

00408D2B  |.^ 7C C7         /JL SHORT 00408CF4

00408D2D  |.  E8 BE8FFFFF   CALL 00401CF0                            ; [mycrack.00401CF0, 获取密码

这里4164C8开始的0xA0个字节(最大余数为9,右移4位,为0x90,再加上最后的16个字节,共0xA0个字节)为哈希表,与之异或后得到计算得到新的16字节密钥,然后取出密码,与得到的新的密钥进行异或,代码如下

00408D92  |> /33C0          /XOR EAX,EAX                                      ; 异或密码与密匙16字节

00408D94  |> |8A5404 0C     |/MOV DL,BYTE PTR SS:[EAX+ESP+0C]

00408D98  |. |8A5C01 FF     ||MOV BL,BYTE PTR DS:[EAX+ECX-1]

00408D9C  |. |32DA          ||XOR BL,DL

00408D9E  |. |8A5404 0D     ||MOV DL,BYTE PTR SS:[EAX+ESP+0D]

00408DA2  |. |885C01 FF     ||MOV BYTE PTR DS:[EAX+ECX-1],BL

00408DA6  |. |8A1C01        ||MOV BL,BYTE PTR DS:[EAX+ECX]

00408DA9  |. |32DA          ||XOR BL,DL

00408DAB  |. |8A5404 0E     ||MOV DL,BYTE PTR SS:[EAX+ESP+0E]

00408DAF  |. |881C01        ||MOV BYTE PTR DS:[EAX+ECX],BL

00408DB2  |. |8A5C01 01     ||MOV BL,BYTE PTR DS:[EAX+ECX+1]

00408DB6  |. |32DA          ||XOR BL,DL

00408DB8  |. |8A5404 0F     ||MOV DL,BYTE PTR SS:[EAX+ESP+0F]

00408DBC  |. |885C01 01     ||MOV BYTE PTR DS:[EAX+ECX+1],BL

00408DC0  |. |305401 02     ||XOR BYTE PTR DS:[EAX+ECX+2],DL

00408DC4  |. |83C0 04       ||ADD EAX,4

00408DC7  |. |83F8 10       ||CMP EAX,10

00408DCA  |.^|7C C8         |/JL SHORT 00408D94

00408DCC  |. |83C1 10       |ADD ECX,10

00408DCF  |. |4F            |DEC EDI

00408DD0  |.^/75 C0         /JNE SHORT 00408D92

00408DD2  |>  8B9424 DC0000 MOV EDX,DWORD PTR SS:[ARG.1]

00408DD9  |.  8D46 02       LEA EAX,[ESI+2]

00408DDC  |.  C602 99       MOV BYTE PTR DS:[EDX],99                          ; type

00408DDF  |.  8842 01       MOV BYTE PTR DS:[EDX+1],AL                      ; responsetype_data中的第一个字节

00408DE2  |.  8BC8          MOV ECX,EAX                                       ; 填入type_data

00408DE4  |.  8D7A 02       LEA EDI,[EDX+2]                                   ; MD5加密结果与密码异或结果一般为16字节,再+1字节的type+1t字节本身

00408DE7  |.  8BD1          MOV EDX,ECX

00408DE9  |.  C1E9 02       SHR ECX,2

最后返回到调用函数,进行最后的填写:

00408F1B  |.  8B0D 68654100 MOV ECX,DWORD PTR DS:[416568]            ; 填入尾部

00408F21  |.  83C6 16       ADD ESI,16

00408F24  |.  8D8434 800000 LEA EAX,[ESI+ESP+80]

00408F2B  |.  8BD0          MOV EDX,EAX

00408F2D  |.  890A          MOV DWORD PTR DS:[EDX],ECX

00408F2F  |.  8B0D 6C654100 MOV ECX,DWORD PTR DS:[41656C]            ; ASCII "age"

00408F35  |.  894A 04       MOV DWORD PTR DS:[EDX+4],ECX

00408F38  |.  83C6 0C       ADD ESI,0C

00408F3B  |.  8D9424 800000 LEA EDX,[ARG.32]

00408F42  |.  56            PUSH ESI

00408F43  |.  52            PUSH EDX

00408F44  |.  C740 08 00000 MOV DWORD PTR DS:[EAX+8],0

00408F4B  |.  E8 C0320000   CALL 0040C210                            ; 发送密码包ORZ~~~

到这里,密码包就构造完成了。                    

附上面的hash

75 73 65 20 6D 64 35 20 65 72 72 6F 72 21 21 00

8B F4 6A 01 A1 00 2C 43 00 50 FF 15 00 68 43 00

3B F4 E8 70 B7 FF FF 8B F4 6A 01 A1 8C 2D 43 00

50 FF 15 00 68 43 00 3B F4 E8 59 B7 FF FF 8B F4

6A 01 A1 98 30 43 00 50 FF 15 00 68 43 00 3B F4

E8 42 B7 FF FF 8B F4 6A 01 A1 10 2C 43 00 50 FF

15 00 68 43 00 3B F4 E8 2B B7 FF FF 8B F4 6A 01

A1 04 2C 43 00 50 FF 15 00 68 43 00 3B F4 E8 14

B7 FF FF 8B F4 6A 01 A1 90 2D 43 00 50 FF 15 00

68 43 00 3B F4 E8 FD B6 FF FF 8B F4 6A 01 A1 F0

后面这个是用户包的校验hash

00000000963007772C610EEEBA510999

19C46D078FF46A7035A563E9A395649E

3288DB0EA4B8DC791EE9D5E088D9D297

2B4CB609BD7CB17E072DB8E7911DBF90

6410B71DF220B06A4871B9F3DE41BE84

7DD4DA1AEBE4DD6D51B5D4F4C785D383

56986C13C0A86B647AF962FDECC9658A

4F5C0114D96C0663633D0FFAF50D088D

C8206E3B5E10694CE44160D5727167A2

D1E4033C47D4044BFD850DD26BB50AA5

FAA8B5356C98B242D6C9BBDB40F9BCAC

E36CD832755CDF45CF0DD6DC593DD1AB

AC30D9263A00DE518051D7C81661D0BF

B5F4B42123C4B3569995BACF0FA5BDB8

9EB802280888055FB2D90CC624E90BB1

877C6F2F114C6858AB1D61C13D2D66B6

9041DC760671DB01BC20D2982A10D5EF

8985B1711FB5B606A5E4BF9F33D4B8E8

A2C9077834F9000F8EA8099618980EE1

BB0D6A7F2D3D6D08976C6491015C63E6

F4516B6B62616C1CD83065854E0062F2

ED95066C7BA5011BC1F4088257C40FF5

C6D9B06550E9B712EAB8BE8B7C88B9FC

DF1DDD62492DDA15F37CD38C654CD4FB

5861B24DCE51B53A7400BCA3E230BBD4

41A5DF4AD795D83D6DC4D1A4FBF4D6D3

6AE96943FCD96E34468867ADD0B860DA

732D0444E51D03335F4C0AAAC97C0DDD

3C710550AA41022710100BBE86200CC9

25B56857B3856F2009D466B99FE461CE

0EF9DE5E98C9D9292298D0B0B4A8D7C7

173DB359810DB42E3B5CBDB7AD6CBAC0

2083B8EDB6B3BF9A0CE2B6039AD2B174

3947D5EAAF77D29D1526DB048316DC73

120B63E3843B64943E6A6D0DA85A6A7A

0BCF0EE49DFF099327AE000AB19E077D

44930FF0D2A3088768F2011EFEC20669

5D5762F7CB67658071366C19E7066B6E

761BD4FEE02BD3895A7ADA10CC4ADD67

6FDFB9F9F9EFBE8E43BEB717D58EB060

E8A3D6D67E93D1A1C4C2D83852F2DF4F

F167BBD16757BCA6DD06B53F4B36B248

DA2B0DD84C1B0AAFF64A0336607A0441

C3EF60DF55DF67A8EF8E6E3179BE6946

8CB361CB1A8366BCA0D26F2536E26852

95770CCC03470BBBB91602222F260555

BE3BBAC5280BBDB2925AB42B046AB35C

A7FFD7C231CFD0B58B9ED92C1DAEDE5B

B0C2649B26F263EC9CA36A750A936D02

A906099C3F360EEB8567077213570005

824ABF95147AB8E2AE2BB17B381BB60C

9B8ED2920DBED5E5B7EFDC7C21DFDB0B

D4D2D38642E2D4F1F8B3DD686E83DA1F

CD16BE815B26B9F6E177B06F7747B718

E65A0888706A0FFFCA3B06665C0B0111

FF9E658F69AE62F8D3FF6B6145CF6C16

78E20AA0EED20DD75483044EC2B30339

612667A7F71660D04D476949DB776E3E

4A6AD1AEDC5AD6D9660BDF40F03BD837

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值