You are on page 1of 22

一:什麼叫外掛?

現在的網路遊戲多是關於 Internet 上客戶/伺服器模式,服務端程序執行在遊戲


伺服器上,遊戲的設計者在其中創造一個龐大的遊戲空間,各地的玩家可以通
過執行客戶端程序同時登入到遊戲中。

簡單地說,網路遊戲實際上就是由遊戲開發商提供一個遊戲環境,而玩家們就
是在這個環境中相對自由和開放地進行遊戲操作。

那麼既然在網路遊戲中有了伺服器這個概念,我們以前傳統的修改遊戲方法就
顯得無能為力了。記得我們在單機版的遊戲中,隨心所欲地通過記憶體搜尋來修
改角色的各種內容,這在網路遊戲中就沒有任何用處了。

因為我們在網路遊戲中所扮演角色的各種內容及各種重要資料都存放在伺服器
上,在我們自己電腦上(客戶端)只是顯示角色的狀態,所以通過修改客戶端
記憶體裡有關角色的各種內容是不切實際的。

那麼是否我們就沒有辦法在網路遊戲中達到我們修改的目的?回答是"否"。我們
知道 Internet 客戶/伺服器模式的通訊一般採用 TCP/IP 通信傳輸協定,資料交
換是通過 IP 資料包的傳輸來實現的,一般來說我們客戶端向伺服器發出某些請
求,比如移動、戰鬥等指令都是通過封包的形式和伺服器交換資料。

那麼我們把本機發出消息稱為 SEND,意思就是傳送資料,伺服器收到我們
SEND 的消息後,會按照既定的程序把有關的訊息反饋給客戶端,比如,移動
的坐標,戰鬥的檔案類型

。那麼我們把客戶端收到伺服器發來的有關消息稱為 RECV。

知道了這個道理,接下來我們要做的工作就是分析客戶端和伺服器之間往來的
資料(也就是封包),這樣我們就可以提取到對我們有用的資料進行修改,然
後模擬伺服器發給客戶端,或者模擬客戶端傳送給伺服器,這樣就可以實現我
們修改遊戲的目的了。
目前除了修改遊戲封包來實現修改遊戲的目的,我們也可以修改客戶端的有關
程序來達到我們的要求。我們知道目前各個伺服器的運算能力是有限的,特別在
遊戲中,遊戲伺服器要計算遊戲中所有玩家的狀況幾乎是不可能的,所以有一
些運算還是要依靠我們客戶端來完成,這樣又給了我們修改遊戲提供了一些便
利。

比如我們可以通過將客戶端程序脫殼來發現一些程序的判斷分支,通過跟蹤偵
錯我們可以把一些對我們不利的判斷去掉,以此來滿足我們修改遊戲的需求。

在下幾個章節中,我們將給大家講述封包的概念,和修改跟蹤客戶端的有關知
識。大家準備好了嗎?

二:什麼是封包?

怎麼截獲一個遊戲的封包? 怎麼去檢查遊戲伺服器的 ip 位址和連接阜號?

Internet 用戶使用的各種訊息服務,其通訊的訊息最終均可以歸結為以 IP 包為服


務機構的訊息傳送,IP 包除了包括要傳送的資料訊息外,還包含有訊息要傳送
到的目的 IP 位址、訊息傳送的源 IP 位址、以及一些相關的控制訊息。

當一台路由器收到一個 IP 資料包時,它將根據資料包中的目的 IP 位址項搜尋路


由表,根據搜尋的結果將此 IP 資料包送往對應連接阜。

下一台 IP 路由器收到此資料包後繼續轉發,直至發到目的地。路由器之間可以
通過路由傳輸協定來進行路由訊息的交換,從而更新路由表。

那麼我們所關心的內容只是 IP 包中的資料訊息,我們可以使用許多監聽網路的
工具來截獲客戶端與伺服器之間的交換資料,下面就向你介紹其中的一種工具:
WPE。

WPE 使用方法: 執行 WPE 會有下列幾項功能可選項:

SELECT GAME 選項目前在記憶體中您想攔截的程式,您只需雙按該程式名稱


即可。
TRACE 追蹤功能。用來追蹤擷取程式送收的封包。

WPE 必須先完成點選欲追蹤的程式名稱,才可以使用此項目。

按下 Play 鍵開始擷取程式收送的封包。 您可以隨時按下 | | 暫停追蹤,想繼續時


請再按下 | | 。

按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。

若您沒按下正方形停止鍵,追蹤的動作將依照 OPTION 裡的設定值自動停止。


如果您沒有擷取到資料,試試將 OPTION 裡調整為 Winsock Version 2。 WPE 及
Trainers 是設定在顯示至少 16 bits 顏色下才可執行。

FILTER 過濾功能。

用來分析所擷取到的封包,並且予以修改。

SEND PACKET 送出封包功能。能夠讓您送出假造的封包。

TRAINER MAKER 製作修改器。

OPTIONS 設定功能。

讓您調整 WPE 的一些設定值。

關於封包解密,加密 算法的一點東西
 

封包的解密加密,最簡單的方法就是
異或 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 系列教學之祝福油和幽靈手套篇

5.WPE 系列教學之神秘封包製作篇 6.WPE 系列教學之攻擊程式碼篇


 

雖然好多外掛都被封了,可是現在回頭看看,對我們的學習使用 wpe 還是有很


大的說明 ,以下的幾篇文章都是實際的經驗,而且裡面的方法更是值得我們學
習,如何分析問題,如何搜尋關鍵資料,從何處入手,等等。

這些文章都是從網站上抄來的,首先向他們的作者致歉,因為經過好多次的轉
載,有些作者都找不到了,因此沒有署名。下面讓我們一起來看看:

虎衛版的破解

虎衛版更新了 mir.dat 文件,在我們進入遊戲時會有一個驗證身份的程序,類似


答考磁碟區。舉個例子:伺服器給 mir.dat 文件的試卷題目是「天王蓋地虎」然後
虎衛的 mir.dat 答案是「寶塔鎮蛇妖」,這樣,伺服器就知道了 mir.dat 是合法的。

而半月看血的那個 mir.dat 文件並不知道正確的答案是什麼,只有硬著頭皮隨便


說了個答案。所以它的身份很快就被揭穿了。最終的結果就是,我們被伺服器踢
出來了!

現在,我們需要做的就是----欺騙伺服器,讓它認為半月看血的 mir.dat 文件是合


法的。我們知道,軟體 WPE 的主要功能之一就是更換傳送給伺服器的資料包。

只要在伺服器沒有收到半月看血的 mir.dat 文件提交的答案之前,利用 WPE 將


答案修改成正確的,伺服器就會認為半月看血的 mir.dat 文件是合法的。這樣,
揮半月,全螢幕看血,一步起跑,超負重等功能就又可以實現了。

下面就是具體的做法。(所需工具:WPE)

準備工作:將 patch 這個文件改個名,這樣可以避免伺服器將半月版的 mir.dat


文件自動更新成虎衛版的(兩個版本的 mir.dat 文件大小不一樣),這樣做的話
進入遊戲的時候會提示 patch.exe 程序不能使用,別管他,點 OK 就可以了。

最關鍵的一步,是要知道合法的 mir.dat 文件所提交的試卷中的正確答案。在每


次進入遊戲前,我們需要做的是選項自己的遊戲帳號在哪個伺服器、選項人物等
等。這裡的每次選項,都會向伺服器傳送相應的封包。

虎衛版和半月版在進入遊戲之前所進行的前幾個步驟並沒有太大的區別。

在最後選項人物,點「開始」以後就有區別了----使用半月看血的會被伺服器踢出
來。所以,我們可以初步認定,正是這一步在提交試卷。所以我們可以使用不同
的 mir.dat 進入遊戲,在點開始之前用 WPE 截一下資料就可以知道正確的答案
和錯誤的答案都是什麼了。

注意:在使用 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-> 0020 7B 47 7A 58 47 5A 6C 78 53 52 67 68 63 5B 21 {GzXGZlxSRghc[!

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-> 0030 40 6D 48 3F 3C 72 47 6F 3C 21 @mH?<rGo<!

SEND-> 0000 23 37 3C 3C 3C 3C 3C 4B 64 3F 3C 3C 3C 3C 3C 3C
#7<<<<<Kd?<<<<<<

SEND-> 0010 3C 3C 21 <<!

SEND-> 0000 2A *

SEND-> 0000 23 38 3C 3C 3C 3C 3C 41 40 3C 3C 3C 3C 3C 3C 3C
#8<<<<<A@<<<<<<<

SEND-> 0010 3C 3C 21 <<!

使用虎衛 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-> 0020 7B 47 7A 58 47 5A 6C 78 53 52 67 68 63 5B 21 {GzXGZlxSRghc[!

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-> 0010 3C 3C 21 <<!

SEND-> 0000 2A *

SEND-> 0000 23 37 3C 3C 3C 3C 3C 41 40 3C 3C 3C 3C 3C 3C 3C
#7<<<<<A@<<<<<<<

SEND-> 0010 3C 3C 21 <<!

SEND-> 0000 2A *

SEND-> 0000 2A *

可以看到,半月版截到了 5 組封包,虎衛版是 7 組。在這裡我們大可不必理會資


料的多少,對比的時候以半月版為準。虎衛版資料多的原因是因為我們已經正常
進入遊戲了。多出來的資料可能是客戶端告訴伺服器自己已經正常進入了,這樣
伺服器才會告訴客戶端,他有什麼物品,等級是多少……

沒得到我是神的指點前,我前半夜的時間就是浪費在這裡了。

再觀察這些資料可以看到,每組資料大多以 23 開頭,緊跟在後面的是 3x(x 代


表 0-9 的數位),這些是資料包編號訊息,可以不理會它。

右邊是這些 16 進制資料對應的符號,我們對比右邊的符號就能知道兩個版本同
一組包裡面的訊息有什麼不同了。

可以發現,兩個版本珔 e 的第二組包差別最大。所以,這組資料成了重點!

那天,我利用 WPE 的濾鏡功能,(教學裡有濾鏡的使用說明),把半月版的除


了資料編號以外的所有訊息寫到了濾鏡的正確值裡,又把虎衛的訊息寫到了偽
造值中,執行濾鏡。滿以為這次會成功,結果伺服器照踢不誤。在這裡我又浪費
掉了後半夜時間~~~~~~
後來得到我是神的指點,才知道即使是用同一個 ID,使用同一個版本的 mir.dat
文件登入,所得到的第二組資料也會有所不同,個人認為那些不同的資料可能
和登入的時間,伺服器的狀態有關。知道了這些,就可以把隨機變化的不同部分
排除掉。然後再對比兩個版本截到的資料中其他部分,發現只有 SEND- > 0030
這一行的第 1-6 個數值是不一樣的。

把半月版的這 6 個數值填到濾鏡中的正確值裡,再把虎衛版相同位置上的 6 個
數值填到偽造值裡就可以欺騙伺服器了。

在使用濾鏡的時候應該用它的「遞進模式」,並且選上「自定位修改」,(這樣設
定後,WPE 只要發現連續的這 6 個正確數值,就會連續的把這 6 個數值取代成
為偽造值)濾鏡的「搜尋長度最大值」(我理解成在多長的一組包裡搜尋相關資
料)預設是 40,可是我們知道我們要修改的那組數值所在的封包長度已經超過
40 個字元了,所以我們可以將「搜尋長度最大值」設定成大於封包長度的值。
(我是神設的是 80,我自己設的是 64)另外,當我們選上「遞進模式」並且選上
「自定位修改」後,偽造值的範圍變成了-124 到+124,應該從 000 處開始填入偽
造值才能使濾鏡真正生效。

好了,執行濾鏡吧,試著使用半月版進入傳奇,結果是----成功。到了這一步,
我高興的不得了,終於成功了!

可是好景不長,休息了幾個小時後這個濾鏡竟然失效了。重新按前面的方法截獲
資料,發現和以前截獲的資料不一樣了。

我倒,原來伺服器考試還分 A、B 磁碟區啊。於是照改不誤,多做了兩個濾鏡----


這回徹底把伺服器擺平了。(做成能夠脫離 WPE 單獨執行的封包後就可以給朋
友用了)

由於要將 patch 解決掉才能使用這個封包,沒了自動更新的功能,換成其他區的


用戶登入就會出現 ID 不存在的錯誤提示。好多朋友發表了解決這個問題的方法,
有手工修改 mir.ini 文件的、有用 WIN2000 做模擬 FTP 伺服器的、還有用防火牆截
住 patch 不讓它自動更新的。個人認為在網咖使用以上方法還是有點費事。

我是在家裡上網的,那個 patch 文件改名後進入遊戲會出現「patch.exe 程序不能


使用」的提示,每次都要點「OK」,太囉嗦了。我把半月版的 mir.dat 設成只讀屬*
了,所以那個 patch 就沒法把它更新成虎衛版了。不過,換其它區的 ID 登入還是
有問題。大家想想辦法把這個問題徹底解決。

WPE 系列教學之封包用法篇

由於不同區不同伺服器的的資料不同,一個封包要想在每個伺服器都能使用是
不可能的。這就需要我們對原有的封包進行修改。

大家不必要一味的要這個封包,要那個封包,學會了修改封包,就能自己動手
了. 大家在發封包之前,都會和 NPC 說話,然後進行搜尋,得到一批資料,就
是 16 進制程式碼我們要做的是開啟所要傳送的封包,然後選項要傳送的指令如:
Packet n 1,傳送。現在一個封包指令就發出去了,這就是 WPE 的用法,我要說
的是怎麼修改,大家繼續看:

現在,我們雙按左邊的 Packet n 1,會出來一條對話視窗,裡面也有 16 進制程


式碼我所需要做的是把第一排第 3。4。5。6。4 組資料修改成你剛才搜尋的相應資
料(注意:他的相應資料是在搜尋的時候,左邊帶 S 符號的那幾排資料)
如果在搜尋的時候,出現了許多帶 S 符號的資料排,則證明,有地方出現錯誤,
你結束傳奇再進去或者再次搜尋一遍,一般只會出現 2-3 排的 S,而其他帶 R 的
不用管他。你現在已經把其他伺服器的封包改成你這個伺服器能用的封包了。

比如賭場封包,在 1 號房搜尋並修改 1 號封包資料後傳送,撒 6 到了 7 號房,再


搜尋並修改 2 號封包資料後傳送,依次類推就可以到 40 號房間。

注意,修改 9 號封包也就是拿錢封包的時候必須等你出來與 NPC 對話出現成功


字樣的時候才能修改,如果你拿不到錢,你所修改的封包則無任何用處,所以
要修改拿錢封包,必須你先得拿到一次錢,但是如果成功了和 NPC 說話後立即
開始修改,而且要一次成功,慢點都無所謂,想想修改步驟,否則你失敗了再
點 NPC 就會送你回去。

那麼,現在雖然賭場的封了,你們還可以去試試神秘商店或者未知暗殿的封包,
一樣能改好了。

WPE 系列教學之刷錢封包製作資料篇
第一位 23 表示 # 是 開頭
第二位 是資料傳送的 id 從 0-9(ascii 碼)
第三四位是你放在物品籃的資料
後面不變的則為此物品的資料

請大家自己研究!

WPE 系列教學之祝福油和幽靈手套篇

現在讓你站在比奇的人給新人 2 捆隨機(隨機帶多少,隨便,看你自己了),4000gold
現在開始長征,我隨機.......(此處省略若幹過程),進比奇找老兵,給他 4000 到盟重!
在跑!跑到倉庫旁邊的客棧裡面!找到林小姐......,切出傳奇,現在使用封包

開啟 wpe 如果大家有找不到我說明裡麵點擊的地方在那裡的!請下載此版本對照.

雙按 SELECT 選項 mir.dat(現在你的傳奇應該是開啟的哦,別告訴我你關了)

雙按 trace 選項 開始,就是哪個箭頭標誌

切回傳奇 點林小姐

切出傳奇,停止截取,就是哪個方的按紐

現在開始用腦袋,你應該可以看到你剛才開啟 wpe 哪一大片空白的地方有資料了


吧! 看看資料最前面,看到以 S 或者以 R 開頭的小按紐了嗎?現在找到以 S 開頭的
這樣一段資料
xx xx yy yy yy yy oo xx xx xx xx xx xx xx xx xx
xx xx xx
ok,現在繼續

雙按你看到的任意一個 S 或者 R 的小按紐,你會看到跳一個視窗出來,裡面寫了個
數位,這個數位不類 BIOS,但是一般是 44 或者 56

雙按 SEND PACKET,看到<<封包列出>>下面的哪本開啟的小書沒有?,對了,點他
選項祝福油 AND 幽靈手套封包,然後點<>右邊的哪個資源回收箱

雙按 <<封包列出>> 下面的 packet n 1


又開始用腦袋,你應該可以看到如下資料
xx xx zz zz zz zz oo xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx xx xx xx

現在繼續

把 zz zz zz zz 用 yy yy yy yy 取代掉!看清楚!為什麼要取代掉!因為每個伺服器的
林小姐的程式碼是不一樣的

寫完了點離開就可以可!現在把 packet n 1 點一下!你會發現 packet n 1 變藍色了


哦!對了,現在點哪個有 3 層的,有立體感的,畫了個向右指的尖頭的按紐,你會看到
<>,變成了 1%,而且右邊也有了個 packet n 1 ,ok,.你已經接近成功了!

如果你用的我告訴你的哪個 wpe 版本的話,你可以看到在 <<開啟插座我>> 右邊


有個數位,如果沒有的話就不對!如果沒有,重複第 6 步.

點擊 阜 右邊的那個 畫了個黑色箭頭的按紐,開始傳送!現在切換回傳奇,你就會
看到一個對話視窗了!選項 3,就是幽靈手套了!

注意!在你沒有結束整個傳奇的情況下!你新人一走到!只需要執行第 13 步就可以

我們 7 個人!一個盟重,一個比奇,剩下的 5 個都在跑新人.............. 好累!如果還有


人不會用的話!我就沒有話說了

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
(具體多少自己看了,都那個樣)

接著我們點選 SEND PACKET 按鈕。開啟(下載或者別人提供)進神秘的封包。


檢視劉老頭的資料,抄下或者用截圖程序截下。關閉 SEND PACKET 視窗。回到
WPE 主視窗點選 FILTER 按鈕,(這裡用 NORMAL 模式即可)把你自己截取
到的劉老頭的資料填入第一行然後開始對比自己截取的資料與封包內的資料的
差別。。。找到不同的資料就填入 第 2 行相同位置。

比如: 位置 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 行的第 9 位置填入 44 和 19 位置填入 4C 即可,如果修改資料


長度超過原資料, 就把他當做不同資料在 19 位置後繼續填入。

但是在右邊的封包長度框內必須自訂封包長度,不然 FILTER 只過濾 1-19 位置


的資料。封包長度要看你修改資料的長度了,大與修改資料長度也可以。

如何實現全區通用---在傳奇版本相同的情況下,各區封包是相同的。不同的只是
位置程式碼而已,大家看一下上面的 2 排資料,第一位 23 是開始程式碼,第 2
位是 31-39 的數位,是資料編號,3-6 位就是位置程式碼。

在 FILTER 中把原資料行的 3-6 位清空不進行過濾,就能簡單的實現全區通用。

再檢查一次看看有沒有錯誤,如果可以的話按 QUIT 推出 FILTER 編輯框。回到


FILTER 控制視窗,勾上剛才修改的 FILTER,啟動 FILTER(從左到右第 5 個按
鈕)進入傳奇,點劉老頭,如果正常的話劉老頭會拿走你 5000 塊錢跟你說起廢

回到 WPE 的 FILTER 控制框儲存剛才修改的 FILTER 為 FLT 文件

WPE 系列教學之攻擊程式碼篇
特殊修理:點普通修理,有時候(特別第一次點擊)會出不來什麼什麼「正好有
材料,價格是 3 倍什麼什麼的廢話,你需要點返回再點修理到一直出來為止,
基本上第 2 次就可以了。

傳奇出現錯誤:(個人想法)主要是封包長度問題。進行封包過濾的時候由於過
濾封包長度要大於待過濾封包。導致傳奇非法。出現錯誤。目前還沒解決,希望高
手們能多發發帖子。。 。

攻擊方式:戰士在傳奇裡攻擊方式有空放 3 種(按住 SHIFT 打空),打怪 4 種


(基本,攻殺,刺殺,烈火),攻擊方向有 8 個,程式碼 3C,3D,3E,
3F,41,42 等。攻殺程式碼是 64,刺殺是 68,放出攻殺和刺殺是由客戶端機隨
即決定的。刺殺是有條件的(也是客戶端機根據條件決定的)。所以只要對截取
到的封包過濾攻擊方式那一字元就可以放出。

三:怎麼來分析我們截獲的封包?

首先我們將 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 2 SEND-> 0000 F4 44
0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4
SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 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 2 SEND-> 0000 F4 44
0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4
SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 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 一個小嘍囉(就是大理客棧外的那個咯): SEND->
0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09 SEND-> 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 00 SEND-> 0010 EB 03 F8 05 02
27 36 01 00 00

根據上面的分析,黃狗的程式碼為"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 的程式碼(這裡我們就簡單的以黃狗的程式碼來舉例)。 那麼,我們就利
用單機代理技術來同時欺騙客戶端和伺服器吧!

好了,呼叫 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
 

這裡我只說十進制轉換成任意進制數的方法:

十進制數轉任意進制數方法是:十進制數整數轉換成任意進制數用除基取余法,

十進制小數轉換成任意進制小數用乘基取余法.

例:把十進制小數 205.7 轉換成十六進制

整數部分:十進制數/16-------------十六進制數位係數=餘數

205/16=12 --------------------- K0=13 K0=D

12/16=0 ----------------------- K1=12 K1=C

小數部分:十進制小數*16 --------- 十六進制小數的數位係數=乘積整數部分

0.7*16=11.2 ------------------- K-1=11 K-1=B

0.2*16=3.2 ---------------------- K-2=3 K-2=3

略 ---------------------------- 略

轉換結果是:205.7 約等於 CD.B3H

位運算基礎(菜鳥看的)(有點像課本)

&  按位與    |  按位或


 Λ  按位異或   ~  取反
 << 左移     >> 右移

 
說明:

1、 位運算符中除了~以外,均為二目運算符。
2、運算量只能是整型或字元型的資料,不能為實型資料。

一、「按位與」運算符 :

規則:

參加運算的兩個運算量,如果兩個相應位都為 1, 則該位結果值為 1,否則為


0。

例如: X=10001001 Y=11101110

     X & Y=10001000

按位與的特殊用途:

1、清零。

方法: 與一個各位都為零的數值相與,結果為零。

2、取一個數 x 中某些指定位。

方法: 找一個數,此數的各位是這樣取值的:對應 x 數要取各位,該數對應位


為 1,其餘位為零。此數與 x 相就可以得到 x 中的某些位。

例:設 X=10101110

(1)取 X 的低 4 位

(2)取 X 的 bit2、bit4、bit6 位

二、「按位或」運算 符
規則:

參加運算的兩個運算量,如果兩個相應位中有個為 1,則該位結果值為 1,否則


為 0。

例如 X=10001001 Y=11101110

X | Y=11101111

按位或的特殊用途: 常用來對一個資料的某些位置 1。

方法:找一個數,此數的各位是這樣取值的,對應 x 數要置 1 的位,該數對應


位為 1,其餘位為零。此數與 x 相或就可使 x 中的某些位置 1。

例:使 x=10100000 的低 4 位為 1。

三、「異或」運算 符

規則:參加運算的兩個運算量,如果兩個相應位為「異」(值不同),則該位結
果值為 1,否則為 0。

例如 X=10001001 Y=11101110

    X^Y=01100111

異或運算的套用:

(1)使特定位翻轉: 找一個數,此數的各位是這樣取值的:對應 x 數要轉的


各位,該數對應位為 1,其餘位為零。此數與 x 相或即可。

例:x=10101110, 使 x 低 4 位翻轉

(2)與 0 相異或,保留原值。 例、
四、「取反」運算符 ~

對一個二進制數按位取反,即將 0 變為 1,1 變為 0。

例: 0100001110010111 取反 1011110001101000

注意:~運算符的優先等級別比算術運算符、關係運算符、邏輯運符和其它運算符
都高。

例:使一個數 a 的最低位元為零,可以表示成:

   a & ~ 1

因為,~1=1111111111111110。

五、左移運算符《

將一個數的各二進制全部左移若干位。(左丟棄,右補 0)

例:a=a<<2 將 a 的二進制數左移 2 位,右補 0。

若左移時捨棄的高位不包含 1,則數每左移一位,相當該數乘以 2。

六、右移運算符》

將一個數的各二進制位全部右移若干位。(正數左補 0/負數左補 1,右丟棄)

例:a=a>>2 將 a 的二進制數右移 2 位。

將一操作數左移一位,相當於將其乘 2。將一操作數右移一位,相當於將其除以
2。
因此,可以用移位操作替代部分乘除操作,只要不產生溢位,這種替代是正確
的。
(用 CF 標誌判別無符號數運算是否溢位,CF=1,表示溢位。
 用 OF 標誌判別有符號數運算是否溢位,OF=1,表示溢位)。
七、位運算符與賦值運算符結合,組成展的賦值運算符。

&=, 例:a&=b 相當於 a=a&b


|=, 例:a|=b 相當於 a=a|b
>>=, 例:a >>=b 相當於 a=a>>b
<<=, 例:a<<=b 相當於 a=a<<b
Λ=, 例:aΛ=b a = aΛb

You might also like