Professional Documents
Culture Documents
簡單地說,網路遊戲實際上就是由遊戲開發商提供一個遊戲環境,而玩家們就
是在這個環境中相對自由和開放地進行遊戲操作。
那麼既然在網路遊戲中有了伺服器這個概念,我們以前傳統的修改遊戲方法就
顯得無能為力了。記得我們在單機版的遊戲中,隨心所欲地通過記憶體搜尋來修
改角色的各種內容,這在網路遊戲中就沒有任何用處了。
因為我們在網路遊戲中所扮演角色的各種內容及各種重要資料都存放在伺服器
上,在我們自己電腦上(客戶端)只是顯示角色的狀態,所以通過修改客戶端
記憶體裡有關角色的各種內容是不切實際的。
那麼是否我們就沒有辦法在網路遊戲中達到我們修改的目的?回答是"否"。我們
知道 Internet 客戶/伺服器模式的通訊一般採用 TCP/IP 通信傳輸協定,資料交
換是通過 IP 資料包的傳輸來實現的,一般來說我們客戶端向伺服器發出某些請
求,比如移動、戰鬥等指令都是通過封包的形式和伺服器交換資料。
那麼我們把本機發出消息稱為 SEND,意思就是傳送資料,伺服器收到我們
SEND 的消息後,會按照既定的程序把有關的訊息反饋給客戶端,比如,移動
的坐標,戰鬥的檔案類型
。那麼我們把客戶端收到伺服器發來的有關消息稱為 RECV。
知道了這個道理,接下來我們要做的工作就是分析客戶端和伺服器之間往來的
資料(也就是封包),這樣我們就可以提取到對我們有用的資料進行修改,然
後模擬伺服器發給客戶端,或者模擬客戶端傳送給伺服器,這樣就可以實現我
們修改遊戲的目的了。
目前除了修改遊戲封包來實現修改遊戲的目的,我們也可以修改客戶端的有關
程序來達到我們的要求。我們知道目前各個伺服器的運算能力是有限的,特別在
遊戲中,遊戲伺服器要計算遊戲中所有玩家的狀況幾乎是不可能的,所以有一
些運算還是要依靠我們客戶端來完成,這樣又給了我們修改遊戲提供了一些便
利。
比如我們可以通過將客戶端程序脫殼來發現一些程序的判斷分支,通過跟蹤偵
錯我們可以把一些對我們不利的判斷去掉,以此來滿足我們修改遊戲的需求。
在下幾個章節中,我們將給大家講述封包的概念,和修改跟蹤客戶端的有關知
識。大家準備好了嗎?
二:什麼是封包?
下一台 IP 路由器收到此資料包後繼續轉發,直至發到目的地。路由器之間可以
通過路由傳輸協定來進行路由訊息的交換,從而更新路由表。
那麼我們所關心的內容只是 IP 包中的資料訊息,我們可以使用許多監聽網路的
工具來截獲客戶端與伺服器之間的交換資料,下面就向你介紹其中的一種工具:
WPE。
WPE 必須先完成點選欲追蹤的程式名稱,才可以使用此項目。
按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。
FILTER 過濾功能。
用來分析所擷取到的封包,並且予以修改。
OPTIONS 設定功能。
關於封包解密,加密 算法的一點東西
封包的解密加密,最簡單的方法就是
異或 XOR 運算! 估計不是在伺服器端,就是在客戶端產生 私鑰! 還有可能遊
戲一個共鑰
2 次加密一個私鑰,要加密的私鑰在去加密和解密資料!
就是說每次進入遊戲的時候同樣的操作都會產生不同資料!
比如說:
你要對 AAAAAAAAAAAAA 進行加密 你的密鑰是 this is hack
加密後產生為 5)(2a(2a) "*5
而你產生的資料就!也就是說有些遊戲為什麼同樣的資料都不一樣
如果你有耐心,可以在遊戲中反覆攔截 send 資料,因為你已經知道明文和
密文
明文 = 你傳送的話
密文 = 你攔截的資料風暴
多比較,要是遊戲採用共用的加密算法的話,就可以解開資料了
如果知道明文 和 密文 ,那私鑰就肯定能破解了
知道了加密的方式就可以把自己的資料隨意的傳送到伺服器了!
常用的加密算法
Blowfish http://www.counterpane.com/blowfish.html
DES Data Encryption Standard http://csrc.nist.gov/fips/fips46-3.pdf
EncryptGost http://www.jetico.sci.fi/index.htm#/gost.htm
EncryptXOR http://tuath.pair.com/docs/xorencrypt.html
EncryptRC4 http://www.rsasecurity.com/rsalabs/faq/3-6-3.html
EncryptSkipJack http://csrc.nist.gov/encryption/skipjack-kea.htm
EncryptTEA TEA, A Tiny Encryption Algorithm
http://www.cl.cam.ac.uk/Research/Papers/djw-rmn/djw-rmn-tea.html
Twofish http://www.counterpane.com/twofish.html
其他的還有什麼凱撒加密什麼。。。。在大學的時候都應該學的 到
WPE 實際經驗和實例
1.虎衛版的破解
2.WPE 系列教學之封包用法篇
3.WPE 系列教學之刷錢封包製作資料篇
4.WPE 系列教學之祝福油和幽靈手套篇
這些文章都是從網站上抄來的,首先向他們的作者致歉,因為經過好多次的轉
載,有些作者都找不到了,因此沒有署名。下面讓我們一起來看看:
虎衛版的破解
下面就是具體的做法。(所需工具:WPE)
虎衛版和半月版在進入遊戲之前所進行的前幾個步驟並沒有太大的區別。
在最後選項人物,點「開始」以後就有區別了----使用半月看血的會被伺服器踢出
來。所以,我們可以初步認定,正是這一步在提交試卷。所以我們可以使用不同
的 mir.dat 進入遊戲,在點開始之前用 WPE 截一下資料就可以知道正確的答案
和錯誤的答案都是什麼了。
使用半月 mir.dat
SEND-> 0000 23 35 3C 3C 3C 3C 3C 42 58 3C 3C 3C 3C 3C 3C 3C
#5<<<<<BX<<<<<<<
SEND-> 0010 3C 3C 56 62 61 5D 57 63 5D 65 57 5F 3C 6C 49 6E
<<Vba]Wc]eW_<lIn
SEND-> 0000 23 36 46 5E 65 66 56 52 41 6A 5A 42 61 6A 48 3F
#6F^efVRAjZBajH?
SEND-> 0010 3C 73 47 78 6B 75 6C 69 77 3F 6D 59 56 6A 6E 59
<sGxkuliw?mYVjnY
SEND-> 0020 78 6B 48 4F 4C 70 4A 3F 58 70 47 6F 44 6C 48 3F
xkHOLpJ?XpGoDlH?
SEND-> 0000 23 37 3C 3C 3C 3C 3C 4B 64 3F 3C 3C 3C 3C 3C 3C
#7<<<<<Kd?<<<<<<
SEND-> 0000 2A *
SEND-> 0000 23 38 3C 3C 3C 3C 3C 41 40 3C 3C 3C 3C 3C 3C 3C
#8<<<<<A@<<<<<<<
使用虎衛 mir.dat
SEND-> 0000 23 34 3C 3C 3C 3C 3C 42 58 3C 3C 3C 3C 3C 3C 3C
#4<<<<<BX<<<<<<<
SEND-> 0010 3C 3C 56 62 61 5D 57 63 5D 65 57 5F 3C 6C 49 6E
<<Vba]Wc]eW_<lIn
SEND-> 0000 23 35 46 5E 65 66 56 52 41 6A 5A 42 61 6A 48 3F
#5F^efVRAjZBajH?
SEND-> 0010 3C 73 47 78 6B 75 6C 69 77 3F 6D 59 56 6A 6E 59
<sGxkuliw?mYVjnY
SEND-> 0020 78 6B 48 4F 4C 73 48 4F 40 6F 47 6F 44 6C 48 3F
xkHOLsHO@oGoDlH?
SEND-> 0030 44 6C 49 4F 44 6E 47 6F 3C 21 DlIODnGo<!
SEND-> 0000 23 36 3C 3C 3C 3C 3C 4B 64 3F 3C 3C 3C 3C 3C 3C
#6<<<<<Kd?<<<<<<
SEND-> 0000 2A *
SEND-> 0000 23 37 3C 3C 3C 3C 3C 41 40 3C 3C 3C 3C 3C 3C 3C
#7<<<<<A@<<<<<<<
SEND-> 0000 2A *
SEND-> 0000 2A *
沒得到我是神的指點前,我前半夜的時間就是浪費在這裡了。
右邊是這些 16 進制資料對應的符號,我們對比右邊的符號就能知道兩個版本同
一組包裡面的訊息有什麼不同了。
可以發現,兩個版本珔 e 的第二組包差別最大。所以,這組資料成了重點!
把半月版的這 6 個數值填到濾鏡中的正確值裡,再把虎衛版相同位置上的 6 個
數值填到偽造值裡就可以欺騙伺服器了。
在使用濾鏡的時候應該用它的「遞進模式」,並且選上「自定位修改」,(這樣設
定後,WPE 只要發現連續的這 6 個正確數值,就會連續的把這 6 個數值取代成
為偽造值)濾鏡的「搜尋長度最大值」(我理解成在多長的一組包裡搜尋相關資
料)預設是 40,可是我們知道我們要修改的那組數值所在的封包長度已經超過
40 個字元了,所以我們可以將「搜尋長度最大值」設定成大於封包長度的值。
(我是神設的是 80,我自己設的是 64)另外,當我們選上「遞進模式」並且選上
「自定位修改」後,偽造值的範圍變成了-124 到+124,應該從 000 處開始填入偽
造值才能使濾鏡真正生效。
好了,執行濾鏡吧,試著使用半月版進入傳奇,結果是----成功。到了這一步,
我高興的不得了,終於成功了!
可是好景不長,休息了幾個小時後這個濾鏡竟然失效了。重新按前面的方法截獲
資料,發現和以前截獲的資料不一樣了。
WPE 系列教學之封包用法篇
由於不同區不同伺服器的的資料不同,一個封包要想在每個伺服器都能使用是
不可能的。這就需要我們對原有的封包進行修改。
大家不必要一味的要這個封包,要那個封包,學會了修改封包,就能自己動手
了. 大家在發封包之前,都會和 NPC 說話,然後進行搜尋,得到一批資料,就
是 16 進制程式碼我們要做的是開啟所要傳送的封包,然後選項要傳送的指令如:
Packet n 1,傳送。現在一個封包指令就發出去了,這就是 WPE 的用法,我要說
的是怎麼修改,大家繼續看:
那麼,現在雖然賭場的封了,你們還可以去試試神秘商店或者未知暗殿的封包,
一樣能改好了。
WPE 系列教學之刷錢封包製作資料篇
第一位 23 表示 # 是 開頭
第二位 是資料傳送的 id 從 0-9(ascii 碼)
第三四位是你放在物品籃的資料
後面不變的則為此物品的資料
請大家自己研究!
WPE 系列教學之祝福油和幽靈手套篇
現在讓你站在比奇的人給新人 2 捆隨機(隨機帶多少,隨便,看你自己了),4000gold
現在開始長征,我隨機.......(此處省略若幹過程),進比奇找老兵,給他 4000 到盟重!
在跑!跑到倉庫旁邊的客棧裡面!找到林小姐......,切出傳奇,現在使用封包
開啟 wpe 如果大家有找不到我說明裡麵點擊的地方在那裡的!請下載此版本對照.
雙按 SELECT 選項 mir.dat(現在你的傳奇應該是開啟的哦,別告訴我你關了)
雙按 trace 選項 開始,就是哪個箭頭標誌
切回傳奇 點林小姐
切出傳奇,停止截取,就是哪個方的按紐
雙按你看到的任意一個 S 或者 R 的小按紐,你會看到跳一個視窗出來,裡面寫了個
數位,這個數位不類 BIOS,但是一般是 44 或者 56
雙按 SEND PACKET,看到<<封包列出>>下面的哪本開啟的小書沒有?,對了,點他
選項祝福油 AND 幽靈手套封包,然後點<>右邊的哪個資源回收箱
現在繼續
把 zz zz zz zz 用 yy yy yy yy 取代掉!看清楚!為什麼要取代掉!因為每個伺服器的
林小姐的程式碼是不一樣的
點擊 阜 右邊的那個 畫了個黑色箭頭的按紐,開始傳送!現在切換回傳奇,你就會
看到一個對話視窗了!選項 3,就是幽靈手套了!
注意!在你沒有結束整個傳奇的情況下!你新人一走到!只需要執行第 13 步就可以
了
WPE 系列教學之神秘封包製作篇
大家先到這裡看看 (既然有現成的東西,何樂而不為,CC )
再來說說我們現在玩的傳奇。我這裡就舉個神秘商店的例子說明吧。
1,進入傳奇跑到獸人 2F 劉老頭那
2,開啟 WPE 點選 SELECT GAME 雙按 MIR.DAT
3,點選 WPE 上的 TRACE 按鈕(此時出現一個 3 角的播放鍵和 4 方的停止鍵)
點播放鍵開始截取資料
4,立刻切換回傳奇點擊劉老頭,出現對話視窗(劉老頭對你說 XXX 很厲害的
字樣)後切換回 WPE 點 4 方型的停止鍵。
這樣我們就截取一組 S 和 R 資料(發給伺服器點擊劉老頭和從伺服器接收到的
資料)
排除掉接收資料我們就會看到一組傳送資料類下
23 3? ?? ?? ?? ?? 3F 4B 48 3F 3C 3C 3C 3C 3C 3C 3C 3C 21
(具體多少自己看了,都那個樣)
比如: 位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
原 資料 23 3? ?? ?? ?? ?? 3F 4B [48] 3F 3C 3C 3C 3C 3C 3C 3C 3C [21]
修改資料 23 3? ?? ?? ?? ?? 3F 4B [44] 3F 3C 3C 3C 3C 3C 3C 3C 3C [4C] ?? ?? ??
如何實現全區通用---在傳奇版本相同的情況下,各區封包是相同的。不同的只是
位置程式碼而已,大家看一下上面的 2 排資料,第一位 23 是開始程式碼,第 2
位是 31-39 的數位,是資料編號,3-6 位就是位置程式碼。
WPE 系列教學之攻擊程式碼篇
特殊修理:點普通修理,有時候(特別第一次點擊)會出不來什麼什麼「正好有
材料,價格是 3 倍什麼什麼的廢話,你需要點返回再點修理到一直出來為止,
基本上第 2 次就可以了。
傳奇出現錯誤:(個人想法)主要是封包長度問題。進行封包過濾的時候由於過
濾封包長度要大於待過濾封包。導致傳奇非法。出現錯誤。目前還沒解決,希望高
手們能多發發帖子。。 。
三:怎麼來分析我們截獲的封包?
我們發現兩次 PK 店小二的資料格式一樣,但是內容卻不相同,我們是 PK 的同
一個 NPC,為什麼會不同呢? 原來金庸群俠傳的封包是經過了加密運算才在網
路上傳輸的,那麼我們面臨的問題就是如何將密文解密成明文再分析了。
因為一般的資料包加密都是異或運算,所以這裡先講一下什麼是異或。 簡單的
說,異或就是"相同為 0,不同為 1"(這是針對二進制按位來講的),舉個例子,
0001 和 0010 異或,我們按位對比,得到異或結果是 0011,計算的方法是:
下面我們繼續看看上面的兩個文件,按照常理,資料包的資料不會全部都有值
的,遊戲開發時會預留一些字元空間來便於日後的擴充,也就是說資料包裡會
存在一些 "00"的字元,觀察上面的文件,我們會發現文件一里很多"12",文件
二里很多"77",那麼這是不是代表我們說的"00"呢?推理到這裡,我們就開始
行動吧!
我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使
用"M2M 1.0 加密封包分析工具"來計算就方便多了。得到下面的結果:
哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我
們需要的明文!
接下來就是搞清楚一些關鍵的字元所代表的含義,這就需要截獲大量的資料來
分析。
例如向伺服器請求戰鬥指令為"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",在這個包裡包含什麼訊息呢?
通過"店小二"和"小嘍囉"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26
00 00"上。
(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看後面的包,在後
面的包裡應該還會出現 NPC 的程式碼,比如移動的包,遊戲允許觀戰,伺服器
必然需要知道 NPC 的移動坐標,再廣播給觀戰的其他玩家。
第一個包的分析暫時就到這裡(裡面還有的訊息我們暫時不需要完全清楚了)
根據上面的分析,黃狗的程式碼為"4B 7D F6 05"(100040011),不過兩隻黃狗
伺服器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個程式碼加上
100000,呵呵,這樣伺服器就可以認出兩隻黃狗了。我們再通過野外遇敵截獲的
資料包來證實,果然如此。
那麼,這個包的格式應該比較清楚了:
第 3 個字元為包的長度,"DA"為指令,第灌水限制節為 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 的程式碼(這裡我們就簡單的以黃狗的程式碼來舉例)。 那麼,我們就利
用單機代理技術來同時欺騙客戶端和伺服器吧!
進制的轉換
十進制 二進制 八進制 十六進制
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
這裡我只說十進制轉換成任意進制數的方法:
十進制數轉任意進制數方法是:十進制數整數轉換成任意進制數用除基取余法,
十進制小數轉換成任意進制小數用乘基取余法.
整數部分:十進制數/16-------------十六進制數位係數=餘數
略 ---------------------------- 略
位運算基礎(菜鳥看的)(有點像課本)
說明:
1、 位運算符中除了~以外,均為二目運算符。
2、運算量只能是整型或字元型的資料,不能為實型資料。
一、「按位與」運算符 :
規則:
按位與的特殊用途:
1、清零。
方法: 與一個各位都為零的數值相與,結果為零。
2、取一個數 x 中某些指定位。
例:設 X=10101110
(1)取 X 的低 4 位
(2)取 X 的 bit2、bit4、bit6 位
二、「按位或」運算 符
規則:
例如 X=10001001 Y=11101110
X | Y=11101111
按位或的特殊用途: 常用來對一個資料的某些位置 1。
例:使 x=10100000 的低 4 位為 1。
三、「異或」運算 符
規則:參加運算的兩個運算量,如果兩個相應位為「異」(值不同),則該位結
果值為 1,否則為 0。
例如 X=10001001 Y=11101110
X^Y=01100111
異或運算的套用:
例:x=10101110, 使 x 低 4 位翻轉
(2)與 0 相異或,保留原值。 例、
四、「取反」運算符 ~
對一個二進制數按位取反,即將 0 變為 1,1 變為 0。
例: 0100001110010111 取反 1011110001101000
注意:~運算符的優先等級別比算術運算符、關係運算符、邏輯運符和其它運算符
都高。
例:使一個數 a 的最低位元為零,可以表示成:
a & ~ 1
因為,~1=1111111111111110。
五、左移運算符《
將一個數的各二進制全部左移若干位。(左丟棄,右補 0)
若左移時捨棄的高位不包含 1,則數每左移一位,相當該數乘以 2。
六、右移運算符》
例:a=a>>2 將 a 的二進制數右移 2 位。
將一操作數左移一位,相當於將其乘 2。將一操作數右移一位,相當於將其除以
2。
因此,可以用移位操作替代部分乘除操作,只要不產生溢位,這種替代是正確
的。
(用 CF 標誌判別無符號數運算是否溢位,CF=1,表示溢位。
用 OF 標誌判別有符號數運算是否溢位,OF=1,表示溢位)。
七、位運算符與賦值運算符結合,組成展的賦值運算符。