史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   Hacker/Cracker 及加解密技術文件 (http://forum.slime.com.tw/f132.html)
-   -   [新手必看]製作外掛全程序 (http://forum.slime.com.tw/thread129369.html)

psac 2004-10-16 09:05 AM

[新手必看]製作外掛全程序
 
一:什麼叫外掛?

現在的網路遊戲多是關於Internet上客戶伺服器模式,服務端程序執行在遊戲伺服器上,遊戲的設計者在其中創造一個龐大的遊戲空間,各地的玩家可以通過執行客戶端程序同時登入到遊戲中。


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

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


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


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


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


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

知道了這個道理,接下來我們要做的工作就是分析客戶端和伺服器之間往來的資料(也就是封包),這樣我們就可以提取到對我們有用的資料進行修改,然後模擬伺服器發給客戶端,或者模擬客戶端傳送給伺服器,這樣就可以實現我們修改遊戲的目的了。

目前除了修改遊戲封包來實現修改遊戲的目的,我們也可以修改客戶端的有關程序來達到我們的要求。我們知道目前各個伺服器的運算能力是有限的,特別在遊戲中,遊戲伺服器要計算遊戲中所有玩家的狀況幾乎是不可能的,所以有一些運算還是要依靠我們客戶端來完成,這樣又給了我們修改遊戲提供了一些便利。

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

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

psac 2004-10-16 09:06 AM

二:什麼是封包?

怎麼截獲一個遊戲的封包? 怎麼去檢查遊戲伺服器的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


其他的還有什麼凱撒加密什麼。。。。在大學的時候都應該學的到

psac 2004-10-16 09:09 AM

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

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

psac 2004-10-16 09:11 AM

再觀察這些資料可以看到,每組資料大多以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,放出攻殺和刺殺是由客戶端機隨即決定的。刺殺是有條件的(也是客戶端機根據條件決定的)。所以只要對截取到的封包過濾攻擊方式那一字元就可以放出。

psac 2004-10-16 09:13 AM

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

首先我們將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的工作到這裡算是完成了一小半,接下來的事情,怎樣修改封包和傳送封包,我們下節繼續講解吧。

psac 2004-10-16 09:14 AM

進制的轉換
 


進制的轉換
十進制 二進制 八進制  十六進制
  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
 

psac 2004-10-16 09:15 AM

如何寫遊戲外掛
 


1 遊戲外掛的原理
外掛現在分為好多種,比如模擬鍵盤的,滑鼠的,修改資料包的,還有修改本機記憶體的,但好像沒有修改伺服器記憶體的哦,呵呵!其實修改伺服器也是有辦法的,只是技術太高一般人沒有辦法入手而已!(比如請GM去夜總會,送禮,收黑錢等等辦法都可以修改伺服器資料,哈哈)
修改遊戲無非是修改一下本機記憶體的資料,或者截獲api函數等等,這裡我把所能想到的方法都作一個介紹,希望大家能做出很好的外掛來使遊戲廠商更好的完善自己的技術.我見到一片文章是講魔力寶貝的理論分析,寫的不錯,大概是那個樣子.下來我就講解一下技術方面的東西,以作引玉之用

 

2 技術分析部分
1 模擬鍵盤或滑鼠的回應
我們一般使用
UINT SendInput(
UINT nInputs, // count of input events
LPINPUT pInputs, // array of input events
int cbSize // size of structure
);api函數
第一個參數是說明第二個參數的矩陣的維數的,第二個參數包含了回應事件,這個自己填充就可以,最後是這個結構的大小,非常簡單,這是最簡單的方法模擬鍵盤滑鼠了,呵呵
注意:這個函數還有個替代函數:
VOID keybd_event(
BYTE bVk, // 虛擬鍵碼
BYTE bScan, // 掃瞄碼
DWORD dwFlags,
ULONG_PTR dwExtraInfo // 附加鍵狀態
);和
VOID mouse_event(
DWORD dwFlags, // motion and click options
DWORD dx, // horizontal position or change
DWORD dy, // vertical position or change
DWORD dwData, // wheel movement
ULONG_PTR dwExtraInfo // application-defined information
);
這兩個函數非常簡單了,我想那些按鍵精靈就是用的這個吧,呵呵,上面的是模擬鍵盤,下面的是模擬滑鼠的.
這個僅僅是模擬部分,要和遊戲聯繫起來我們還需要找到遊戲的視窗才行,或者包含快捷鍵,就像按鍵精靈的那個啟動鍵一樣,我們可以用GetWindow函數來枚舉視窗,也可以用Findwindow函數來搜尋制定的視窗(注意還有一個FindWindowEx),FindwindowEx可以找到視窗的子視窗,比如按鈕,等什麼東西.當遊戲切換場景的時候我們可以用FindWindowEx來確定一些當前視窗的特徵,從而判斷是否還在這個場景,方法很多了,比如可以GetWindowInfo來確定一些東西,比如當搜尋不到某個按鈕的時候就說明遊戲場景已經切換了,等等辦法.有的遊戲沒有控件在裡面,這是對圖像做坐標變換的話,這種方法就要受到限制了.這就需要我們用別的辦法來輔助分析了.
至於快捷鍵我們要用動態連接庫實現了,裡面要用到hook技術了,這個也非常簡單,大家可能都會了,其實就是一個全局的hook對像然後SetWindowHook就可以了,回調函數都是現成的,而且現在網上的例子多如牛毛,這個實現在外掛中已經很普遍了.如果還有誰不明白,那就去看看msdn搜尋SetWindowHook就可以了.
這個動態連接庫的作用很大,不要低估了哦,它可以切入所有的工作空間,也就是可以載入到所有的遊戲裡面哦,只要用對,你會發現很有用途的!
這個需要你複習一下win32編程的基礎知識了,呵呵,趕快去看書吧!

2截獲消息
有些遊戲的回應機制比較簡單,是關於消息的,或者用什麼定時器的東西,這個時候你就可以用攔截消息來實現一些有趣的功能了.
我們攔截消息使用的也是hook技術,裡面包括了鍵盤消息,滑鼠消息,系統消息,日誌等,別的對我們沒有什麼大的用處,我們只用攔截消息的回調函數就可以了,這個不會讓我寫例子吧,其實這個和上面的一樣,都是用SetWindowHook來寫的,看看就明白了很簡單的.
至於攔截了以後做什麼就是你的事情了,比如在每個定時器消息裡面處理一些我們的資料判斷,或者在定時器裡面在模擬一次定時器,那麼有些資料就會處理兩次,呵呵,後果嘛,不一定是好事情哦,呵呵,不過如果資料計算放在客戶端的遊戲就可以真的改變資料了,呵呵,試試看吧!用途還有很多,自己想也可以想出來的,呵呵!

3攔截socket包
這個技術難度要比原來的高很多哦,要有思想準備.
首先我們要取代winSock.dll或者winsock32.dll,我們寫的取代函數要和原來的函數一致才行,就是說它的函數輸出什麼樣的,我們也要輸出什麼樣子的函數,而且參數,參數順序都要一樣才行,然後在我們的函數里面使用真正的winSock32.dll裡面的函數就可以了
首先:我們可以取代動態庫到系統路徑
其次:我們應用程式啟動的時候可以載入原有的動態庫,用這個函數LoadLibary
然後定位函數入口用GetProcAddress函數獲得每個真正socket函數的入口位址
當遊戲進行的時候它會使用我們的動態庫,然後從我們的動態庫中處理完畢後才跳轉到真正動態庫的函數位址,這樣我們就可以在裡面處理自己的資料了,應該是一切資料.呵呵!
興奮吧,攔截了資料包我們還要分析之後才能進行正確的回應,不要以為這樣工作就完成了,呵呵!還早呢,等分析完畢以後我們還要模擬回應機制來和伺服器通信,一個不小心就會被封號,呵呵,嗚~~~~~~~~我就被封了好多啊!
分析資料才是工作量的來源呢,遊戲每次昇級有可能加密方式會有所改變,因此我們寫外掛的人都是亡命之徒啊,被人娛樂了還不知道,呵呵!(聲明我可沒有賺錢,我是免費的)
socket來源碼下載

4截獲api
上面的技術如果可以靈活運用的話我們就不用截獲api函數了,其實這種技術是一種補充技術.比如我們需要截獲socket以外的函數作為我們的用途,我們就要用這個技術了,其實我們也可以用它直接攔截在socket中的函數,這樣更直接.
現在攔截api的教學到處都是,我就不列舉了,我用的比較習慣的方法是根據輸入節進行攔截的,這個方法可以用到任何一種操作系統上,比如98/2000等,有些方法不是跨平台的,我不建議使用.這個技術大家可以參考windows核心編程裡面的545頁開始的內容來學習,如果是98系統可以用window系統奧秘那個最後一章來學習.
好了方法就是這麼多了,看大家怎麼運用了,其它的一些針對性的技巧這裡我就不說了,要不然會有人殺了我的,呵呵!

記住每個遊戲的修改方法都不一樣,如果某個遊戲資料處理全部在伺服器端,那麼你還是別寫外掛了,呵呵,最多寫個自動走路的外掛,哈哈!
資料分析的時候大家一定要注意,不要輕易嘗試和伺服器的連接,因為那有很危險,切忌!等你掌握了大量的資料分析結果以後,比較有把握了在試試,看看你的運氣好不好,很有可能會成功的哦,呵呵!


下面給個VB例子吧。
自己加幾個checkbox試試。
傳說中的一個傳奇的外掛
功能是讓魔法像跟蹤彈一樣。
原理是讓滑鼠快速移動,讓人名標籤還在螢幕上。實際上只是改一下滑鼠位置。
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private Function MyHotKey(vKeyCode) As Boolean
MyHotKey = GetAsyncKeyState(vKeyCode) < 0
End Function
Private Sub Timer1_Timer()
Dim i As Integer
For i = 0 To 7
If MyHotKey(112 + i) And Check1(0).value = 1 Then
If Option1.value = True Then
SetCursorPos 0, 599
End If
If Option2.value = True Then
SetCursorPos 0, 767
End If
End If
Next i
End Sub

tomchu 2004-12-02 11:01 AM

佩服.
真是用心的教學.

kyoshih 2004-12-02 07:09 PM

謝謝分享.......

geroryan 2004-12-02 08:27 PM

感謝如此用心分享

sly32 2004-12-13 02:03 PM

寫的真詳細,我基礎不好看的花糊糊~~

cocoking 2005-09-03 09:47 AM

好強哦
小弟推一下


所有時間均為台北時間。現在的時間是 08:30 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1