網頁外掛技術淺談(入門篇)

轉載自 http://gamebot.uueasy.com/read-htm-tid-215-page-1.html

 

其實網頁外掛所用的技術很簡單,只不過這是一個技術上的禁區,極少有書籍和資料介紹而已。
在繼續往下看之前,你至少需要了解:
1.http協議的基本含義
2.socket通信基礎
3.一門常規開發語言及軟件開發基礎
4.動態網頁技術基礎

網頁遊戲採用的通訊協議多種多樣,常見的有:
1.純http。如:商業大亨、36計、天問等。
2.AMF協議。AMF協議是一種擴展的http協議,採用該協議的頁遊一定是flash的,如:熱血三國、絕地戰爭等。
3.socket協議。此類頁遊更接近傳統的客戶端網遊,採用加密的數據包進行通訊,製作外掛難度遠遠超過上述2種。
4.其他。

協議分析
想要製作一個頁遊的外掛,我們首先要知道它是採用什麼協議進行通訊的,我們需要用網絡監聽軟件進行協議分析。
推薦:
1.HTTPAnalyzerFullV5。強大的http通訊監聽軟件,可以分析純http和AMF通訊。
各大下載站點均有下載,能下載到註冊機。
2.科來網絡分析系統 2010 技術交流版。目前最好用的全方面網絡分析軟件,用於分析socket通信最方便。
這是國產品牌,可到官方網站下載,然後用email申請一個免費序列號即可。

作爲初學者,我們從純http的頁遊入手。
運行HTTPAnalyzerFullV5,然後打開網頁,進入遊戲。點擊HTTPAnalyzerFullV5上的"start"開始監聽,然後在遊戲中隨便進行點操作,這個時候HTTPAnalyzerFullV5中應該會有數據展現了。在數據表格的Type一欄,我們可以看到數據的類型。
如果每進行一個遊戲操作,HTTPAnalyzerFullV5中都增加一條Type爲text/html的通訊記錄,那麼無疑這個頁遊是採用純http協議的。
如果每進行一個遊戲操作,HTTPAnalyzerFullV5中都增加一條Type爲application/x-amf的通訊記錄,那麼這個頁遊一定是採用AMF協議的。

下課了,實踐一下協議分析吧。

繼續...如果我們發現手上的這款遊戲是純http協議的遊戲,比如36計、天策、天問之類的,該如何入手呢。
先看下HTTPAnalyzerFullV5抓到的數據吧。
從HTTPAnalyzerFullV5的界面可以看到,HTTPAnalyzerFullV5分爲上下兩欄,上面是數據列表,下面是選中的一條通訊的具體數據。
在下面一欄中,我們主要關心的是3項數據:
1.Header。這是http通訊的包頭,從這兒我們可以看到host、cookies、referer之類的數據。
2.Response Content。這是服務器方的響應數據,也就是這次通訊從服務器端得到的內容,是遊戲裏面的相關數據。格式可能五花八門,但一般說來是可以理解的字符串。比如:"{兵種:步兵;數量10000;速度:5}"或者"{恭喜你,升級成功。}"之類的數據,當然一般說來是英文表達的,你必須得讀懂它。
3.Post Data。這是客戶端的發送數據,也就是指你在遊戲中進行了什麼操作。對於純http協議的頁游來說,這一項經常爲空,因爲每條遊戲指令的參數可能是直接寫在url中。
以36計爲例,我們進入遊戲,打開監聽,點一下英雄府升級,此時HTTPAnalyzerFullV5中獲得一條新的通訊數據。如果我們能用軟件模擬這次通訊,那麼就相當於在軟件中進行英雄府升級了。
對於純http通訊的模擬,我推薦使用XMLHTTPRequest方法。
XMLHTTPRequest是存在於msxml2.dll中的一個函數,msxml2.dll在任何一臺windows中都有。而且這是一個AxtiveX的DLL,能被任何開發語言調用,甚至是被網頁調用。
XMLHTTPRequest的作用是:對指定的服務器發起一個http請求,並獲取返回的數據。
XMLHTTPRequest在各種語言下都能找到大量的例程,只需要上網搜索一下即可。

下面,瞭解一下XMLHTTPRequest並寫個簡單的程序來獲取baidu首頁的內容吧,這是網頁外掛最基礎也是最核心的技術。
XMLHTTPRequest的VB簡單示例:
set xhttp = createObject("msxml2.XMLHTTP")  
xhttp.open "POST", "http://www.baidu.com", False  ‘False表示不採用異步方式
xhttp.send
ret = xhttp.responseText  'ret即返回內容,此處爲百度首頁的內容
這是使用XMLHTTPRequest同步調用方法,缺點是當內容沒有返回時,軟件會一直處於等待狀態,不能幹其他任何事,所以我們一般採用異步方式調用。
異步方式與此大同小異,上網搜索一下吧。

在36計中,假如升級英雄府的referer是"http://36ji.com/updatehouse.php?houseid=1",那麼我們在軟件中用XMLHTTPRequest模擬一次這個url的請求,就會在返回內容中看到諸如"{英雄府已經成功升級}"之類的文本。同時你會發現,遊戲中的英雄府真的升級了!

當然在這之前,還有個很重要的工作就是登錄。
要實現在客戶端登錄有2種方案:
1.在客戶端嵌入IE組件,用戶在IE組件中打開遊戲網頁登錄,那麼這個IE組件就獲得了登錄憑證,這個憑證在動態網頁技術中通稱:Session。
2.分析登錄過程,自己用代碼實現登錄過程,然後保存登錄憑證Session備用。

考慮到網頁遊戲一般都由多個運營商聯運,所以如果自己寫脫機的登錄比較麻煩,要針對每個不同的運營商的登錄接口寫登錄過程,所以一般推薦用嵌入IE登錄。
嵌入IE登錄很簡單,在你的程序中放入一個IE組件,用戶在這個IE組件中打開遊戲網頁,完成登錄。
這裏要提到XMLHTTPRequest的一個重要特性。
XMLHTTPRequest本身是不能爲其設置Session的(深入瞭解動態網頁技術的朋友可能瞭解,設置Session其實就是設置Cookies,雖然二者並不一樣。)。但是XMLHTTPRequest會自動獲得應用程序本身獲得的Session,也就是說,在你自己的程序中嵌入了IE,如果用戶在這個IE中完成了登錄,那麼這個程序中的XMLHTTPRequest將自動獲得IE中的所有Session。
這個特性是把雙刃劍,一方面,它給開發帶來了便利,我們不再需要對XMLHTTPRequest設置登錄憑證;另一方面,這意味着我們的程序運行一次只能開一個賬號,不能實現子窗體多開的效果。如果要實現子窗體多開的效果,我們則需要使用其他更爲靈活的http訪問組件。
作爲初學者,還是推薦使用XMLHTTPRequest,畢竟簡單易用。

如果你完全理解了上述內容,那麼你就應該有個大概的流程模型。
1。監聽遊戲過程,獲取http請求細節。
2。在程序中嵌入IE,通過IE登錄獲取登錄憑證。
3。使用XMLHTTPRequest模擬http請求。

入門篇介紹到這兒,接下來我們將進行初級實戰篇。我們以36計這個遊戲作爲練手對象,因爲這個遊戲的通訊既不太難,也不至於太簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章