WPE封包刷裝備和復(fù)制裝備,還有很多人都不太了解。。。作者:云中岳
WPE封包刷裝備和復(fù)制裝備,還有很多人都不太了解
看到很多人問怎么利用封包來刷裝備和復(fù)制游戲裝備,今天我發(fā)上來,大家自己看看.
關(guān)于WPE的幾點(diǎn)問題
1 為什么我用WPE截不到數(shù)據(jù)包?
答:網(wǎng)絡(luò)游戲99%是TCP協(xié)議,相關(guān)的API是send, recv, WSASend, WSARecv,如果客戶
端對這些API的地址進(jìn)行檢測和設(shè)防,WPE就會被發(fā)現(xiàn)而無效
2. 為什么我用WPE會被殺毒軟件報毒?
答:WPE的工作原理是修改ws2_32.dll的send, recv, WSASend, WSARecv等函數(shù)的入口
以實(shí)現(xiàn)截包,本身屬于木馬的型為,被誤包是正常的
3. 為什么我用WPE一發(fā)包就會游戲斷線?
答:現(xiàn)在大多數(shù)網(wǎng)游的數(shù)據(jù)包是加密的, 這些加密解密定義在應(yīng)用層,并且很多有自
校驗,當(dāng)服務(wù)端發(fā)現(xiàn)某一個數(shù)據(jù)包解密錯誤或是自校驗錯誤,便立即斷開與客戶端
的連接。在摸清應(yīng)用層的加密前,用WPE發(fā)包99%是徒勞的。
一:什么叫外掛?
現(xiàn)在的網(wǎng)絡(luò)游戲多是基于Internet上客戶/服務(wù)器模式,服務(wù)端程序運(yùn)行在游戲服務(wù)器上,游戲的設(shè)計者在其中創(chuàng)造一個龐大的游戲空間,各地的玩家可以通過運(yùn)行客戶端程序同時登錄到游戲中。簡單地說,網(wǎng)絡(luò)游戲?qū)嶋H上就是由游戲開發(fā)商提供一個游戲環(huán)境,而玩家們就是在這個環(huán)境中相對自由和開放地進(jìn)行游戲操作。那么既然在網(wǎng)絡(luò)游戲中有了服務(wù)器這個概念,我們以前傳統(tǒng)的修改游戲方法就顯得無能為力了。記得我們在單機(jī)版的游戲中,隨心所欲地通過內(nèi)存搜索來修改角色的各種屬性,這在網(wǎng)絡(luò)游戲中就沒有任何用處了。因為我們在網(wǎng)絡(luò)游戲中所扮演角色的各種屬性及各種重要資料都存放在服務(wù)器上,在我們自己機(jī)器上(客戶端)只是顯示角色的狀態(tài),所以通過修改客戶端內(nèi)存里有關(guān)角色的各種屬性是不切實(shí)際的。那么是否我們就沒有辦法在網(wǎng)絡(luò)游戲中達(dá)到我們修改的目的?回答是"否"。我們知道Internet客戶/服務(wù)器模式的通訊一般采用TCP/IP通信協(xié)議,數(shù)據(jù)交換是通過IP數(shù)據(jù)包的傳輸來實(shí)現(xiàn)的,一般來說我們客戶端向服務(wù)器發(fā)出某些請求,比如移動、戰(zhàn)斗等指令都是通過封包的形式和服務(wù)器交換數(shù)據(jù)。那么我們把本地發(fā)出消息稱為SEND,意思就是發(fā)送數(shù)據(jù),服務(wù)器收到我們SEND的消息后,會按照既定的程序把有關(guān)的信息反饋給客戶端,比如,移動的坐標(biāo),戰(zhàn)斗的類型。那么我們把客戶端收到服務(wù)器發(fā)來的有關(guān)消息稱為RECV。知道了這個道理,接下來我們要做的工作就是分析客戶端和服務(wù)器之間往來的數(shù)據(jù)(也就是封包),這樣我們就可以提取到對我們有用的數(shù)據(jù)進(jìn)行修改,然后模擬服務(wù)器發(fā)給客戶端,或者模擬客戶端發(fā)送給服務(wù)器,這樣就可以實(shí)現(xiàn)我們修改游戲的目的了。 目前除了修改游戲封包來實(shí)現(xiàn)修改游戲的目的,我們也可以修改客戶端的有關(guān)程序來達(dá)到我們的要求。我們知道目前各個服務(wù)器的運(yùn)算能力是有限的,特別在游戲中,游戲服務(wù)器要計算游戲中所有玩家的狀況幾乎是不可能的,所以有一些運(yùn)算還是要依*我們客戶端來完成,這樣又給了我們修改游戲提供了一些便利。比如我們可以通過將客戶端程序脫殼來發(fā)現(xiàn)一些程序的判斷分支,通過跟蹤調(diào)試我們可以把一些對我們不利的判斷去掉,以此來滿足我們修改游戲的需求。 在下幾個章節(jié)中,我們將給大家講述封包的概念,和修改跟蹤客戶端的有關(guān)知識。大家準(zhǔn)備好了嗎?
游戲數(shù)據(jù)格式和存儲:
在進(jìn)行我們的工作之前,我們需要掌握一些關(guān)于計算機(jī)中儲存數(shù)據(jù)方式的知識和游戲中儲存數(shù)據(jù)的特點(diǎn)。本章節(jié)是提供給菜鳥級的玩家看的,如果你是高手就可以跳過了,呵呵! 如果,你想成為無堅不摧的劍客,那么,這些東西就會花掉你一些時間;如果,你只想作個江湖的游客的話,那么這些東西,了解與否無關(guān)緊要。是作劍客,還是作游客,你選擇吧!
現(xiàn)在我們開始!首先,你要知道游戲中儲存數(shù)據(jù)的幾種格式,這幾種格式是:字節(jié)(BYTE)、字(WORD)和雙字(DOUBLE WORD),或者說是8位、16位和32位儲存方式。字節(jié)也就是8位方式能儲存0~255的數(shù)字;字或說是16位儲存方式能儲存0~65535的數(shù);雙字即32位方式能儲存0~4294967295的數(shù)。
為何要了解這些知識呢?在游戲中各種參數(shù)的最大值是不同的,有些可能100左右就夠了,比如,金庸群俠傳中的角色的等級、隨機(jī)遇敵個數(shù)等等。而有些卻需要大于255甚至大于65535,象金庸群俠傳中角色的金錢值可達(dá)到數(shù)百萬。所以,在游戲中各種不同的數(shù)據(jù)的類型是不一樣的。在我們修改游戲時需要尋找準(zhǔn)備修改的數(shù)據(jù)的封包,在這種時候,正確判斷數(shù)據(jù)的類型是迅速找到正確地址的重要條件。
在計算機(jī)中數(shù)據(jù)以字節(jié)為基本的儲存單位,每個字節(jié)被賦予一個編號,以確定各自的位置。這個編號我們就稱為地址。
在需要用到字或雙字時,計算機(jī)用連續(xù)的兩個字節(jié)來組成一個字,連續(xù)的兩個字組成一個雙字。而一個字或雙字的地址就是它們的低位字節(jié)的地址。 現(xiàn)在我們常用的Windows 9x操作系統(tǒng)中,地址是用一個32位的二進(jìn)制數(shù)表示的。而在平時我們用到內(nèi)存地址時,總是用一個8位的16進(jìn)制數(shù)來表示它。
二進(jìn)制和十六進(jìn)制又是怎樣一回事呢?
簡單說來,二進(jìn)制數(shù)就是一種只有0和1兩個數(shù)碼,每滿2則進(jìn)一位的計數(shù)進(jìn)位法。同樣,16進(jìn)制就是每滿十六就進(jìn)一位的計數(shù)進(jìn)位法。16進(jìn)制有0--F十六個數(shù)字,它為表示十到十五的數(shù)字采用了A、B、C、D、E、F六個數(shù)字,它們和十進(jìn)制的對應(yīng)關(guān)系是:A對應(yīng)于10,B對應(yīng)于11,C對應(yīng)于12,D對應(yīng)于13,E對應(yīng)于14,F(xiàn)對應(yīng)于15。而且,16進(jìn)制數(shù)和二進(jìn)制數(shù)間有一個簡單的對應(yīng)關(guān)系,那就是;四位二進(jìn)制數(shù)相當(dāng)于一位16進(jìn)制數(shù)。比如,一個四位的二進(jìn)制數(shù)1111就相當(dāng)于16進(jìn)制的F,1010就相當(dāng)于A。
了解這些基礎(chǔ)知識對修改游戲有著很大的幫助,下面我就要談到這個問題。由于在計算機(jī)中數(shù)據(jù)是以二進(jìn)制的方式儲存的,同時16進(jìn)制數(shù)和二進(jìn)制間的轉(zhuǎn)換關(guān)系十分簡單,所以大部分的修改工具在顯示計算機(jī)中的數(shù)據(jù)時會顯示16進(jìn)制的代碼,而且在你修改時也需要輸入16進(jìn)制的數(shù)字。你清楚了吧?
在游戲中看到的數(shù)據(jù)可都是十進(jìn)制的,在要尋找并修改參數(shù)的值時,可以使用Windows提供的計算器來進(jìn)行十進(jìn)制和16進(jìn)制的換算,我們可以在開始菜單里的程序組中的附件中找到它。
現(xiàn)在要了解的知識也差不多了!不過,有個問題在游戲修改中是需要注意的。在計算機(jī)中數(shù)據(jù)的儲存方式一般是低位數(shù)儲存在低位字節(jié),高位數(shù)儲存在高位字節(jié)。比如,十進(jìn)制數(shù)41715轉(zhuǎn)換為16進(jìn)制的數(shù)為A2F3,但在計算機(jī)中這個數(shù)被存為F3A2。
看了以上內(nèi)容大家對數(shù)據(jù)的存貯和數(shù)據(jù)的對應(yīng)關(guān)系都了解了嗎? 好了,接下來我們要告訴大家在游戲中,封包到底是怎么一回事了,來!大家把袖口卷起來,讓我們來干活吧!
二:什么是封包?
怎么截獲一個游戲的封包?怎么去檢查游戲服務(wù)器的ip地址和端口號? Internet用戶使用的各種信息服務(wù),其通訊的信息最終均可以歸結(jié)為以IP包為單位的信息傳送,IP包除了包括要傳送的數(shù)據(jù)信息外,還包含有信息要發(fā)送到的目的IP地址、信息發(fā)送的源IP地址、以及一些相關(guān)的控制信息。當(dāng)一臺路由器收到一個IP數(shù)據(jù)包時,它將根據(jù)數(shù)據(jù)包中的目的IP地址項查找路由表,根據(jù)查找的結(jié)果將此IP數(shù)據(jù)包送往對應(yīng)端口。下一臺IP路由器收到此數(shù)據(jù)包后繼續(xù)轉(zhuǎn)發(fā),直至發(fā)到目的地。路由器之間可以通過路由協(xié)議來進(jìn)行路由信息的交換,從而更新路由表。
那么我們所關(guān)心的內(nèi)容只是IP包中的數(shù)據(jù)信息,我們可以使用許多監(jiān)聽網(wǎng)絡(luò)的工具來截獲客戶端與服務(wù)器之間的交換數(shù)據(jù),下面就向你介紹其中的一種工具:WPE。
WPE使用方法:執(zhí)行WPE會有下列幾項功能可選擇:
SELECT GAME選擇目前在記憶體中您想攔截的程式,您只需雙擊該程式名稱即可。
TRACE追蹤功能。用來追蹤擷取程式送收的封包。WPE必須先完成點(diǎn)選欲追蹤的程式名稱,才可以使用此項目。 按下Play鍵開始擷取程式收送的封包。您可以隨時按下 | | 暫停追蹤,想繼續(xù)時請再按下 | | 。按下正方形可以停止擷取封包并且顯示所有已擷取封包內(nèi)容。若您沒按下正方形停止鍵,追蹤的動作將依照OPTION里的設(shè)定值自動停止。如果您沒有擷取到資料,試試將OPTION里調(diào)整為Winsock Version 2。WPE 及 Trainers 是設(shè)定在顯示至少16 bits 顏色下才可執(zhí)行。
FILTER過濾功能。用來分析所擷取到的封包,并且予以修改。
SEND PACKET送出封包功能。能夠讓您送出假造的封包。
TRAINER MAKER制作修改器。
OPTIONS設(shè)定功能。讓您調(diào)整WPE的一些設(shè)定值。
FILTER的詳細(xì)教學(xué)
- 當(dāng)FILTER在啟動狀態(tài)時 ,ON的按鈕會呈現(xiàn)紅色。- 當(dāng)您啟動FILTER時,您隨時可以關(guān)閉這個視窗。FILTER將會保留在原來的狀態(tài),直到您再按一次 on / off 鈕。- 只有FILTER啟用鈕在OFF的狀態(tài)下,才可以勾選Filter前的方框來編輯修改。- 當(dāng)您想編輯某個Filter,只要雙擊該Filter的名字即可。
NORMAL MODE:
范例:
當(dāng)您在 Street Fighter Online ﹝快打旋風(fēng)線上版﹞游戲中,您使用了兩次火球而且擊中了對方,這時您會擷取到以下的封包:SEND-> 0000 08 14 21 06 01 04 SEND-> 0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 SEND-> 0000 03 84 11 09 11 09 SEND-> 0000 0A 09 C1 10 00 00 FF 52 44 SEND-> 0000 0A 09 C1 10 00 00 66 52 44
您的第一個火球讓對方減了16滴﹝16 = 10h﹞的生命值,而您觀察到第4跟第5個封包的位置4有10h的值出現(xiàn),應(yīng)該就是這里了。
您觀察10h前的0A 09 C1在兩個封包中都沒改變,可見得這3個數(shù)值是發(fā)出火球的關(guān)鍵。
因此您將0A 09 C1 10填在搜尋列﹝SEARCH﹞,然后在修改列﹝MODIFY﹞的位置4填上FF。如此一來,當(dāng)您再度發(fā)出火球時,F(xiàn)F會取代之前的10,也就是攻擊力為255的火球了!
ADVANCED MODE:
范例: 當(dāng)您在一個游戲中,您不想要用真實(shí)姓名,您想用修改過的假名傳送給對方。在您使用TRACE后,您會發(fā)現(xiàn)有些封包里面有您的名字出現(xiàn)。假設(shè)您的名字是Shadow,換算成16進(jìn)位則是﹝53 68 61 64 6F 77﹞;而您打算用moon﹝6D 6F 6F 6E 20 20﹞來取代他。1) SEND-> 0000 08 14 21 06 01 042) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 094) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44
但是您仔細(xì)看,您的名字在每個封包中并不是出現(xiàn)在相同的位置上
- 在第2個封包里,名字是出現(xiàn)在第4個位置上- 在第4個封包里,名字是出現(xiàn)在第6個位置上
在這種情況下,您就需要使用ADVANCED MODE- 您在搜尋列﹝SEARCH﹞填上:53 68 61 64 6F 77 ﹝請務(wù)必從位置1開始填﹞- 您想要從原來名字Shadow的第一個字母開始置換新名字,因此您要選擇從數(shù)值被發(fā)現(xiàn)的位置開始替代連續(xù)數(shù)值﹝from the position of the chain found﹞。- 現(xiàn)在,在修改列﹝MODIFY﹞000的位置填上:6D 6F 6F 6E 20 20 ﹝此為相對應(yīng)位置,也就是從原來搜尋欄的+001位置開始遞換﹞- 如果您想從封包的第一個位置就修改數(shù)值,請選擇﹝from the beginning of the packet﹞
了解一點(diǎn)TCP/IP協(xié)議常識的人都知道,互聯(lián)網(wǎng)是將信息數(shù)據(jù)打包之后再傳送出去的。每個數(shù)據(jù)包分為頭部信息和數(shù)據(jù)信息兩部分。頭部信息包括數(shù)據(jù)包的發(fā)送地址和到達(dá)地址等。數(shù)據(jù)信息包括我們在游戲中相關(guān)操作的各項信息。那么在做截獲封包的過程之前我們先要知道游戲服務(wù)器的IP地址和端口號等各種信息,實(shí)際上最簡單的是看看我們游戲目錄下,是否有一個SERVER.INI的配置文件,這個文件里你可以查看到個游戲服務(wù)器的IP地址,比如金庸群俠傳就是如此,那么除了這個我們還可以在DOS下使用。