迅雷协议分析
迅雷登陸驗證 <--TCP!來源標識.Data(53 Bytes) 00 00 00 35 00 00 00 4d 00 00 .........5...M.. 004000 4d 00 00 00 24 65 30 31 37 39 34 64 63 2d 33 .M...$e01794dc-3 0050 61 36 622
迅雷登陸驗證
<--TCP!來源標識.Data(53 Bytes)
00 00 00 35 00 00 00 4d00 00 .........5...M..
0040 00 4d 00 00 00 24 6530 31 37 39 34 64 63 2d 33 .M...$e01794dc-3
0050 61 36 62 2d 34 32 39 39 2d 39 64 33 61 2d 37 38 a6b-4299-9d3a-78
0060 36 66 64 33 39 36 65 61 39 36 006fd396ea96.
?
迅雷數據包結構
00 00 00 35 數據包長度
00 00 00 4d 將要發送的'發送驗證信息.Data'數據包的長度
00 00 00 4d 將要發送的'發送驗證信息.Data'數據包的長度
00 00 00 24 標識串長度-1(末位的空字節)
65 30 31 ... 39 36 00 標識串.這個字符串每次程序啟動后不一樣,程序重新啟動前一直沿用.與用戶標識無關
?
?
<--TCP!發送驗證信息.Data(77 Bytes)
00 00 00 0e 00 00 00 05 00 00................
0040 00 41 00 00 00 0b 51 55 45 52 59 41 5554 48 45 .A....QUERYAUTHE
0050 4e 00 00 00 00 09 6d 61 78 6c 65 76 656c 34 00 N.....maxlevel4.
0060 00 00 20 30 34 62 64 64 64 31 37 63 3136 33 32 .. 04bddd17c1632
0070 37 35 38 39 63 65 33 66 65 65 30 65 3431 39 62 7589ce3fee0e419b
0080 36 33 33 633
?
迅雷TCP數據包結構
00 00 00 0e 未知,固定不變(猜測與版本有關,未經驗證)
00 00 00 03 程序啟動時初始化為0,第一次用戶登陸+3,其余每次用戶登陸+4
00 00 00 41 下面的數據長度
00 00 00 0b 標識"QUERYAUTHEN"的長度-1(末位的空字節)
51 55 45 52 59 41 55 54 48 45 4e 00 標識"QUERYAUTHEN"
00 00 00 09 用戶名長度
6d 61 78 6c 65 76 65 6c 34 用戶名
00 00 00 20 密碼hash的長度
30 34 62 ... 36 33 33 密碼的hash
--登陸驗證END
?
維持用戶在線狀態
<--UDP!Data(73 Bytes)
00 00 00 0e 00 00 .|.S.8.Q.'......
0030 00 07 00 00 00 3d 00 00 00 04 50 49 4e47 00 00 .....=....PING..
0040 00 08 33 39 32 36 36 39 38 37 00 00 0024 37 61 ..39266987...$7a
0050 66 61 33 38 30 66 2d 34 32 36 37 2d 3435 39 61 fa380f-4267-459a
0060 2d 39 62 30 31 2d 66 30 39 35 63 37 3637 61 30 -9b01-f095c767a0
0070 37 32 00 72.
?
迅雷UDP數據包結構
00 00 00 0e 未知,固定不變(猜測與版本有關,未經驗證)
00 00 00 07 所發送的此數據包的計數
00 00 00 3d 后面的數據長度
00 00 00 04 標識"PING"的長度
50 49 4e 47 標識"PING"
00 00 00 08 用戶id長度
33 39 32 36 36 39 38 37 用戶id字符串
00 00 00 24 標識串長度-1(末位的空字節)
37 61 66 ... 37 32 00 標識串
--維持用戶在線狀態END
?
迅雷下載文件后加積分
<--TCP!來源驗證.Data(53 Bytes)
00 00 00 35 00 00 00 39 00 00Dp.......5...9..
0040 00 39 00 00 00 24 64 34 38 62 36 63 3133 2d 38 .9...$d48b6c13-8
0050 62 62 34 2d 34 34 39 38 2d 38 65 36 312d 32 37 bb4-4498-8e61-27
0060 31 36 35 66 35 66 65 63 35 38 00165f5fec58.
?
數據包結構
00 00 00 35 數據包長度
00 00 00 39 將要發送的'下載加積分.Data'數據包的長度
00 00 00 39 將要發送的'下載加積分.Data'數據包的長度
00 00 00 24 標識串長度
64 34 38 ... 35 38 00 標識串
?
<--TCP!下載加積分.Data(57 Bytes)
00 00 00 0e 00 00 00 0f 00 00Dp..............
0040 00 2d 00 00 00 0d 51 55 45 52 59 44 4f57 4e 4d .-....QUERYDOWNM
0050 45 53 53 00 00 00 08 33 38 39 32 33 3737 32 00 ESS....38923772.
0060 00 00 00 00 72 7e 98 00 00 00 00 00 0001 54 ....r~........T
?
數據包結構
00 00 00 0e 未知,固定不變(猜測與版本有關,未經驗證)
00 00 00 0f 程序啟動時初始化為0.每個用戶登陸后下載完第一個文件+5,第一個以后的文件+1.換其他用戶登陸,也是下載完第一個文件+5,后面的+1.用戶注銷后再登陸的情況下下載完第一個也+5
00 00 00 2d 以下數據的長度
00 00 00 0d "QUERYDOWNMESS"的長度
51 55 45 52 59 44 4f 57 4e 4d 45 53 53"QUERYDOWNMESS"
00 00 00 08 用戶id("38923772")的長度
33 38 39 32 33 37 37 32 用戶id("38923772")
00 00 00 00 00 72 7e 98 所下載完的文件的hash
00 00 00 00 00 00 01 54 未知,但不像是隨機
--下載文件后加積分END
?
注銷迅雷
<--TCP!來源驗證.Data(53 Bytes)
00 00 00 35 00 00 00 2b 00 00.........5...+..
0040 00 2b 00 00 00 24 31 32 63 39 32 61 3462 2d 34 .+...$12c92a4b-4
0050 64 36 66 2d 34 61 62 64 2d 61 66 65 622d 37 31 d6f-4abd-afeb-71
0060 37 63 39 39 33 62 32 62 35 34 007c993b2b54.
?
數據包結構
00 00 00 35 此數據包長度
00 00 00 2b 將要發送的'下載加積分.Data'數據包的長度
00 00 00 2b 將要發送的'下載加積分.Data'數據包的長度
00 00 00 24 標識串長度
31 32 63 ... 35 34 00 標識串
?
<--TCP!發送注銷信息.Data(43 Bytes)
00 00 00 0e 00 00 00 05 00 00................
0040 00 1f 00 00 00 0b 51 55 45 52 59 4c 4f47 4f 55 ......QUERYLOGOU
0050 54 00 00 00 08 32 32 39 30 30 31 35 3700 00 00 T....22900157...
0060 00 .
?
數據包結構
00 00 00 0e 未知,固定不變(猜測與版本有關,未經驗證)
00 00 00 05 程序啟動時初始化為0,第一次用戶注銷后+5,其余每次有用戶注銷則+4
00 00 00 1f 以下數據的長度
00 00 00 0b 標識"QUERYLOGOUT"的長度
51 55 45 52 59 4c 4f 47 4f 55 54 標識"QUERYLOGOUT"
00 00 00 08 用戶id的長度
32 32 39 30 30 31 35 37 用戶id
00 00 00 00 空
--注銷END
?
其中上面列出來的第一個數據包中密碼hash看似是md5,直接把我的密碼的md5算出來對比了一下,不一樣,那就跟一下吧,打開od,立馬定位到這里
?
215C4D60 > $ 55 push ebp
215C4D61 . 8BEC mov ebp, esp
215C4D63 . 6A FF push -1
215C4D65 . 68 85C65E21 push<loc_215EC685> ; SE handler installation
215C4D6A . 64:A1 0000000>mov eax, dwordptr fs:0
215C4D70 > . 50 push eax
215C4D71 . 64:8925 00000>mov dword ptrfs:0, esp
215C4D78 . 81EC B8080000 sub esp, 8B8
215C4D7E . 53 push ebx
215C4D7F . 56 push esi
215C4D80 > . 57 push edi
215C4D81 . 8BD9 mov ebx, ecx
215C4D83 . 8965 F0 mov dword ptr ebp-10,esp
215C4D86 . 895D E0 mov dword ptr ebp-20,ebx
215C4D89 . 8B75 08 mov esi, dword ptr ebp+8
215C4D8C . 33C0 xor eax, eax
215C4D8E 89 db 89
215C4D8F . 45 inc ebp
215C4D90 > . FC cld
215C4D91 . 8945 EC mov dword ptr ebp-14,eax
215C4D94 . 8973 24 mov dword ptr ebx+24,esi
215C4D97 . 8A06 mov al, byte ptr esi
215C4D99 . 84C0 test al, al
215C4D9B . C645 FC 01 mov byte ptr ebp-4, 1
215C4D9F . 0F85 8C010000 jnz<loc_215C4F31>
215C4DA5 . 8D8D 3CF7FFFF lea ecx, dword ptrebp-8C4
215C4DAB . E8 90E80000 call<sub_215D3640>
215C4DB0 . B9 08000000 mov ecx, 8
215C4DB5 . 33C0 xor eax, eax
215C4DB7 . 8DBD 7CFFFFFF lea edi, dword ptrebp-84
215C4DBD . 8B53 24 mov edx, dword ptrebx+24
215C4DC0 . F3:AB rep stos dword ptr es:edi
215C4DC2 . 66:AB stos word ptr es:edi
215C4DC4 . AA stos byte ptr es:edi
215C4DC5 . 8B7A 38 mov edi, dword ptredx+38
215C4DC8 . B9 32000000 mov ecx, 32
215C4DCD . 2BCF sub ecx, edi
215C4DCF . 33C0 xor eax, eax
215C4DD1 . 8D7C3A 3C lea edi, dword ptredx+edi+3C
215C4DD5 . 8BD1 mov edx, ecx
215C4DD7 . C1E9 02 shr ecx, 2
215C4DDA . F3:AB rep stos dword ptr es:edi
215C4DDC . 8BCA mov ecx, edx
215C4DDE . C645 FC 02 mov byte ptr ebp-4, 2
215C4DE2 . 83E1 03 and ecx, 3
215C4DE5 . F3:AA rep stos byte ptr es:edi
215C4DE7 . 8B53 24 mov edx, dword ptrebx+24
215C4DEA . B9 32000000 mov ecx, 32
215C4DEF . 33C0 xor eax, eax
215C4DF1 . 8B7A 02 mov edi, dword ptr edx+2
215C4DF4 . 2BCF sub ecx, edi
215C4DF6 . 8D7C3A 06 lea edi, dword ptredx+edi+6
215C4DFA . 8BD1 mov edx, ecx
215C4DFC . C1E9 02 shr ecx, 2
215C4DFF . F3:AB rep stos dword ptr es:edi
215C4E01 . 8BCA mov ecx, edx
215C4E03 . 83E1 03 and ecx, 3
215C4E06 . F3:AA rep stos byte ptr es:edi
215C4E08 . 8D46 3C lea eax, dword ptresi+3C
215C4E0B . 8D8D 3CF7FFFF lea ecx, dword ptrebp-8C4
215C4E11 . 50 push eax ; 用戶密碼
215C4E12 . E8 D9E80000 call<sub_215D36F0> ; 跟入
?
跟入后來到這里
?
215D36F0 >/$ 56 push esi
215D36F1 |. 8BF1 mov esi, ecx
215D36F3 |. E8 28000000 call<sub_215D3720>
215D36F8 |. 84C0 test al, al
215D36FA |. 75 09 jnz short<loc_215D3705>
215D36FC |. 6A 01 push 1
215D36FE |. 8BCE mov ecx, esi
215D3700 |. E8 4B0C0000 call <sub_215D4350>
215D3705 >|> 8B4424 08 mov eax, dwordptr esp+8
215D3709 |. 8BCE mov ecx, esi
215D370B |. 50 push eax
215D370C |. E8 AF0B0000 call<sub_215D42C0> ; 跟入
215D3711 |. 5E pop esi
215D3712 . C2 0400 retn 4
?
跟到這里
?
215D42C0 >/$ 53 push ebx
215D42C1 |. 55 push ebp
215D42C2 |. 56 push esi
215D42C3 |. 8B7424 10 mov esi, dword ptresp+10
215D42C7 |. 8BD9 mov ebx, ecx
215D42C9 |. 57 push edi
215D42CA |. 8BFE mov edi, esi
215D42CC |. 83C9 FF or ecx, FFFFFFFF
215D42CF |. 33C0 xor eax, eax
215D42D1 |. F2:AE repne scas byte ptres:edi
215D42D3 |. F7D1 not ecx
215D42D5 |. 49 dec ecx
215D42D6 |. 8BD1 mov edx, ecx
215D42D8 |. 8BC2 mov eax, edx
215D42DA |. 8BEA mov ebp, edx
215D42DC |. C1E8 06 shr eax, 6
215D42DF |. 83E5 3F and ebp, 3F
215D42E2 |. 895424 14 mov dword ptr esp+14,edx
215D42E6 |. 85C0 test eax, eax
215D42E8 |. 76 19 jbe short<loc_215D4303>
215D42EA |. 8BF8 mov edi, eax
215D42EC >|> 8BCB /mov ecx, ebx
215D42EE |. E8 EDF4FFFF |call<sub_215D37E0>
215D42F3 |. 8B4B 64 |mov ecx, dword ptrebx+64
215D42F6 |. 83C1 40 |add ecx, 40
215D42F9 |. 4F |dec edi
215D42FA |. 894B 64 |mov dword ptr ebx+64,ecx
215D42FD |.^ 75 ED jnz short<loc_215D42EC>
215D42FF |. 8B5424 14 mov edx, dword ptresp+14
215D4303 >|> 8B7B 68 mov edi, dwordptr ebx+68
215D4306 |. B9 10000000 mov ecx, 10
215D430B |. 33C0 xor eax, eax
215D430D |. F3:AB rep stos dword ptr es:edi
215D430F |. 8B7B 68 mov edi, dword ptrebx+68
215D4312 |. 8BCD mov ecx, ebp
215D4314 |. 8BC1 mov eax, ecx
215D4316 |. C1E9 02 shr ecx, 2
215D4319 |. F3:A5 rep movs dword ptres:edi, dword p>
215D431B |. 8BC8 mov ecx, eax
215D431D |. 83E1 03 and ecx, 3
215D4320 |. F3:A4 rep movs byte ptr es:edi,byte ptr>
215D4322 |. 8B4B 68 mov ecx, dword ptrebx+68
215D4325 |. C1E2 03 shl edx, 3
215D4328 |. C60429 80 mov byte ptr ecx+ebp,80
215D432C |. 8B43 68 mov eax, dword ptrebx+68
215D432F |. 8BCB mov ecx, ebx
215D4331 |. 8950 38 mov dword ptr eax+38,edx
215D4334 |. C740 3C 00000>mov dword ptreax+3C, 0
215D433B |. E8 A0F4FFFF call<sub_215D37E0> ; 這里就是關鍵的md5了
215D4340 |. 8BCB mov ecx, ebx
215D4342 |. E8 89000000 call<sub_215D43D0>
215D4347 |. 5F pop edi
215D4348 |. 5E pop esi
215D4349 |. 5D pop ebp
215D434A |. B0 01 mov al, 1
215D434C |. 5B pop ebx
215D434D . C2 0400 retn 4
?
返回到最早跟入的那里繼續
?
215C4E17 . 8D8D 3CF7FFFF lea ecx, dword ptrebp-8C4
215C4E1D . E8 7EF40000 call<sub_215D42A0>
215C4E22 . 6A 20 push 20 ; /maxlen = 20(32.)
215C4E24 . 8D8D 7CFFFFFF lea ecx, dword ptrebp-84 ; |
215C4E2A . 50 push eax ; |src 這里是剛才md5后的字符串
215C4E2B . 51 push ecx ; |dest
215C4E2C . FF15 D4015F21 call dword ptr<&MSVCRT.strncpy> ; strncpy 保存一遍
215C4E32 . 83C4 0C add esp, 0C
215C4E35 . 8D8D F4F9FFFF lea ecx, dword ptrebp-60C
215C4E3B . E8 00E80000 call <sub_215D3640>
215C4E40 . 8D95 7CFFFFFF lea edx, dword ptrebp-84
215C4E46 . 8D8D F4F9FFFF lea ecx, dword ptrebp-60C
215C4E4C . 52 push edx
215C4E4D . C645 FC 03 mov byte ptr ebp-4, 3
215C4E51 . E8 9AE80000 call<sub_215D36F0> ; 對第一次md5的結果再次md5
215C4E56 . B9 08000000 mov ecx, 8
215C4E5B . 33C0 xor eax, eax
215C4E5D . 8DBD 7CFFFFFF lea edi, dword ptrebp-84
215C4E63 . F3:AB rep stos dword ptr es:edi
215C4E65 . 66:AB stos word ptr es:edi
215C4E67 . 8D8D F4F9FFFF lea ecx, dword ptrebp-60C
215C4E6D . AA stos byte ptr es:edi
215C4E6E . E8 2DF40000 call<sub_215D42A0>
215C4E73 . 6A 20 push 20 ; /maxlen = 20(32.)
215C4E75 . 50 push eax ; |src
215C4E76 . 8D85 7CFFFFFF lea eax, dword ptrebp-84 ; |
215C4E7C . 50 push eax ; |dest
215C4E7D . FF15 D4015F21 call dword ptr<&MSVCRT.strncpy> ; strncpy 到這里為止密碼的hash就出來了
?
?
?
本篇文章來源于中國協議分析網|www.cnpaf.net 原文鏈接:http://www.cnpaf.net/Class/OtherAnalysis/200810/23085.html
總結
- 上一篇: 海康威视工业相机使用
- 下一篇: 10110 - Light, more