歪歪协议服务器,YY 2015 逆向分析-底层通讯机制
YY的封包結(jié)構(gòu)是4字節(jié)長度,4字節(jié)命令字,剩下的就是數(shù)據(jù)了,也就是說,根據(jù)首4字節(jié)就可以將包分割開。但是也有一些其他情況, 比如嵌套包,一個命令字包中又包含了一個或者多個子命令包,這些子命令包有時是獨立處理,有時需要用到父包的數(shù)據(jù)。
首先,客戶端先給幾個(我這里是4個)服務器發(fā)送UDP包,請求IP地址,服務器會根據(jù)收到的版本號下發(fā)對應的支持此版本號的服務器和列表。
61 00 00 00 1E 73 00 00 C8 00 FF FF FF FF FF FF? ?a....s..?.......
FF FF 03 01 00 00 00 00 00 00 20 00 35 34 64 37? ???........ .54d7
63 62 39 31 35 38 31 38 32 30 39 38 65 38 36 32? ?cb9158182098e862
66 66 38 39 30 64 62 66 61 33 63 30 00 00 30 80? ?ff890dbfa3c0..0.
07 00 38 2E 33 2E 30 2E 30 02 00 79 79 00 00 00? ?..8.3.0.0..yy...
00 00 00 00 00 00 00 04 08 00 00 00 00 00 00 00? ?................
00??????????????????????? ? .
然后其中一個會返回0x741E,返回請求到的IP列表(其他服務器可能也返回了,但是這時客戶端收到一個就不再繼續(xù)接收了)。
注意這里每個包的+4處是命令字(下同),比如這里是0x731E。
客戶端從收到的IP列表中隨機選幾個(我這里是6個)發(fā)送登陸請求,其中5個是UDP,1個TCP。包的數(shù)據(jù)都是一樣的。
34 00 00 00 01 14 00 00 C8 00 00 00 00 00 30 80? ?4.......?.....0.
FF FF FF FF 08 00 62 75 67 73 74 65 73 74 00 00? ?????..bugstest..
04 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00? ?................
00 00 00 00??????????????????? ?....
響應最快的那個服務器返回0x1501命令,+0C處是反饋結(jié)果,當為0xC8時表示一切正常,后面的數(shù)據(jù)就是真正要登陸的服務器 的IP和Port了;如果為其他值(比如97 01 00 00),表示版本過低,需要升級。
54 00 00 00 01 15 00 00 C8 00 00 00 C8 00 00 00? ?T.......?...?...
02 00 00 00 70 75 DC EB DA 85 3B 14 00 00 03 00? ?....pu????;.....
00 00 91 1F 39 04 51 00 6F B2 91 8A 4D E6 3B 14? ?..?9.Q.o???M?;.
00 00 03 00 00 00 94 1F 39 04 54 00 00 00 00 00? ?......?9.T.....
01 00 11 00 AB 5B 54 76 00 00 00 00 00 00 00 00? ?....?[Tv........
F4 01 00 00??????????????????? ??...
此時才是真正的登陸過程,一切從這里開始??蛻舳烁鶕?jù)收到的登陸用的IP列表,隨機選擇一個建立連接,連接成功后,客戶端 主動給服務器發(fā)送一條密鑰交互包,命令字是0x1104或者0x3204(因為登陸時會連接多個服務器,比如驗證服務器\頻道服務器\好友服務器, 命令字根據(jù)類型的不同是不一樣的)
53 00 00 00 04 11 00 00 C8 00 40 00 E9 03 40 F2? ?S.....?@.?@?
4D ED C4 86 32 9B 25 F1 7A D8 94 70 D5 E2 20 6C? ?M砟??駔財p這 l
F0 B7 AF FD 5A DD A4 A6 F3 CA F5 8C CE 7B 9B CB? ?鴟Z荬術(shù)屛{浰
2D AB 49 45 04 61 93 9C 4F 7D 40 DE E1 E4 8B 19? ?-獻Ea摐O}@掎鋴
BC 89 C2 E0 76 29 58 2E 2F BB A6 51 01 00 03 00? ?級鑼v)X./滬Q..
00 00 00? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?...
或者
66 00 00 00 04 32 00 00 C8 00 40 00 E9 03 40 F2??f...2..?@.?@?
4D ED C4 86 32 9B 25 F1 7A D8 94 70 D5 E2 20 6C??M砟??駔財p這 l
F0 B7 AF FD 5A DD A4 A6 F3 CA F5 8C CE 7B 9B CB??鴟Z荬術(shù)屛{浰
2D AB 49 45 04 61 93 9C 4F 7D 40 DE E1 E4 8B 19??-獻Ea摐O}@掎鋴
BC 89 C2 E0 76 29 58 2E 2F BB A6 51 01 00 03 13??級鑼v)X./滬Q.
00 00 00 13 00 00 00 04 E8 0B 00 C8 00 00 00 05??......?.?..
00 6C 6F 67 69 6E? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???.login
+4處的0x40字節(jié)是客戶端生成的公鑰,即RSA的N;+0x4E處一字節(jié)是RSA的E。這個包的作用是通知服務端,下發(fā)的RC4密鑰使用這個RSA密鑰進行加密,
服務器收到客戶端的密鑰后,返回0x3304\0x1504,以前這個包的key是經(jīng)過zlib壓縮的,現(xiàn)在取消掉了,估計服務器吃不消給優(yōu)化掉了。
50 00 00 00 04 15 00 00 C8 00 40 00 7B 89 12 1B??P.........@.{...
FE 8F AC 7A BF 02 D4 34 42 D9 52 29 21 EA 0D 13??...z...4B.R)!...
27 EC C0 11 BB 59 A8 7F 9C 95 AE B7 9C 09 5A 3C??'....Y........Z<
43 A1 55 8E DA A0 2D F6 CA E9 EB F4 DC D3 DC C5??C.U...-.........
64 8E 75 91 AE 32 A4 28 04 88 CA 79 00 00 00 00??d.u..2.(...y....
或者
18 09 00 00 04 33 00 00??C8 00 40 00 22 79 01 D6 .....3....@."y..
58 E0 86 9C A2 57 37 21??89 4B BF 7F C2 F2 BE 64 X....W7!.K.....
d48 00 8B E6 14 82 C3 0E??D0 FF 80 3C 2C 60 F2 DD H..........
7F BA A4 67 17 C1 DA CA??F4 D6 C0 4E B2 EE A7 90 ...g.......N....
23 3E 46 1D D4 A4 B4 E5??91 14 FE F5 C8 08 00 00 #>F.............
C8 08 00 00 04 E9 0B 00??C8 00 00 00 BA 08 B6 08 ................
00 00 06 00 04 00 00 00??FF FF 00 00 17 27 54 08 .............'T.
00 00 78 DA 8D 57 4D 6C??1B C7 15 7E 43 AD 4D 49 ..x..WMl...~C.MI
D6 8F AD C6 86 64 BB 8E??9A BA 46 0E 75 10 5B 76 .....d....F.u.[v
E5 9C 32 4B 8A 22 F5 47??D2 22 25 45 69 22 7B 45 ..2K.".G."%Ei"{E
...后面省略
總結(jié)
以上是生活随笔為你收集整理的歪歪协议服务器,YY 2015 逆向分析-底层通讯机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 戴尔服务器改win7系统,戴尔dell预
- 下一篇: arrow智能马桶1288遥控器怎么配对