?? 6.txt
字號:
三:怎么來分析我們截獲的封包?
首先我們將WPE截獲的封包保存為文本文件,然后打開它,這時會看到如下的數據(這里我們以金庸群俠傳里PK店小二客戶端發送的數據為例來講解):
第一個文件:SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B
SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B
SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A
SEND-> 0000 E6 56 1B C0 68 12 12 12 5A
SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12
SEND-> 0000 E6 56 17 C9 12
第二個文件:SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E
SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D
SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3
SEND-> 0000 83 33 7E A5 21 77 77 77 3F
SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77
SEND-> 0000 83 33 72 AC 77
我們發現兩次PK店小二的數據格式一樣,但是內容卻不相同,我們是PK的同一個NPC,為什么會不同呢?原來金庸群俠傳的封包是經過了加密運算才在網路上傳輸的,那么我們面臨的問題就是如何將密文解密成明文再分析了。
因為一般的數據包加密都是異或運算,所以這里先講一下什么是異或。簡單的說,異或就是"相同為0,不同為1"(這是針對二進制按位來講的),舉個例子,0001和0010異或,我們按位對比,得到異或結果是0011,計算的方法是:0001的第4位為0,0010的第4位為0,它們相同,則異或結果的第4位按照"相同為0,不同為1"的原則得到0,0001的第3位為0,0010的第3位為0,則異或結果的第3位得到0,0001的第2位為0,0010的第2位為1,則異或結果的第2位得到1,0001的第1位為1,0010的第1位為0,則異或結果的第1位得到1,組合起來就是0011。異或運算今后會遇到很多,大家可以先熟悉熟悉,熟練了對分析很有幫助的。
下面我們繼續看看上面的兩個文件,按照常理,數據包的數據不會全部都有值的,游戲開發時會預留一些字節空間來便于日后的擴充,也就是說數據包里會存在一些"00"的字節,觀察上面的文件,我們會發現文件一里很多"12",文件二里很多"77",那么這是不是代表我們說的"00"呢?推理到這里,我們就開始行動吧!
我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使用"M2M 1.0加密封包分析工具"來計算就方便多了。得到下面的結果:
第一個文件:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09
SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89
SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08
SEND-> 0000 F4 44 09 D2 7A 00 00 00 48
SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00
SEND-> 0000 F4 44 05 DB 00
第二個文件:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09
SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A
SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84
SEND-> 0000 F4 44 09 D2 56 00 00 00 48
SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00
SEND-> 0000 F4 44 05 DB 00
哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我們需要的明文!
接下來就是搞清楚一些關鍵的字節所代表的含義,這就需要截獲大量的數據來分析。
首先我們會發現每個數據包都是"F4 44"開頭,第3個字節是變化的,但是變化很有規律。我們來看看各個包的長度,發現什么沒有?對了,第3個字節就是包的長度!通過截獲大量的數據包,我們判斷第4個字節代表指令,也就是說客戶端告訴服務器進行的是什么操作。例如向服務器請求戰斗指令為"30",戰斗中移動指令為"D4"等。接下來,我們就需要分析一下上面第一個包"
F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09
05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在這個包里包含什么信息呢?應該有通知服務器你PK的哪個NPC吧,我們就先來找找這個店小二的代碼在什么地方。我們再PK一個小嘍羅(就是大理客棧外的那個咯):
0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09
0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0我們根據常理分析,游戲里的NPC種類雖然不會超過65535(FFFF),但開發時不會把自己限制在字的范圍,那樣不利于游戲的擴充,所以我們在雙字里看看。通過"店小二"和"小嘍羅"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26 00 00"上。(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看后面的包,在后面的包里應該還會出現NPC的代碼,比如移動的包,游戲允許觀戰,服務器必然需要知道NPC的移動坐標,再廣播給觀戰的其他玩家。在后面第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我們又看到了"6C 79 F6 05",初步斷定店小二的代碼就是它了!(這分析里邊包含了很多工作的,大家可以用WPE截下數據來自己分析分析)
第一個包的分析暫時就到這里(里面還有的信息我們暫時不需要完全清楚了)
我們看看第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截獲PK黃狗的包,(狗會出來2只哦)看看包的格式:SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00
根據上面的分析,黃狗的代碼為"4B 7D F6 05"(100040011),不過兩只黃狗服務器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個代碼加上100000,呵呵,這樣服務器就可以認出兩只黃狗了。我們再通過野外遇敵截獲的數據包來證實,果然如此。
那么,這個包的格式應該比較清楚了:第3個字節為包的長度,"DA"為指令,第5個字節為NPC個數,從第7個字節開始的10個字節代表一個NPC的信息,多一個NPC就多10個字節來表示。
大家如果玩過網金,必然知道隨機遇敵有時會出現增援,我們就利用游戲這個增援來讓每次戰斗都會出現增援的NPC吧。
通過在戰斗中出現增援截獲的數據包,我們會發現服務器端發送了這樣一個包:F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00第5-第8個字節為增援NPC的代碼(這里我們就簡單的以黃狗的代碼來舉例)。那么,我們就利用單機代理技術來同時欺騙客戶端和服務器吧!
好了,呼叫NPC的工作到這里算是完成了一小半,接下來的事情,怎樣修改封包和發送封包,我們下節繼續講解吧。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -