在觀看本文前,請閱讀以下事項
=======================
本教學可能會破壞遊戲的公平性與娛樂性,或是違背遊戲的使用者規範
請使用者自重,盡量以純研究為主
如果因修改封包造成使用者任何損失,本人不為他人相關行為負責
=======================

現今的網頁遊戲相當熱門,從開心農場開始,網頁遊戲如雨後春筍般的冒出
跟傳統網路遊戲相比,只要可以上網且能顯示Flash,無須安裝其他軟體,就能在任何地點遊戲
網頁遊戲大多以可愛風格呈現,吸引了平常不玩遊戲的女性玩家
且網頁遊戲大多是免月費+商城的形式,如果哪天撒手不玩也不會損失太多

目前網頁遊戲大多由Flash寫成,原因在於Flash在不同瀏覽器上可以顯示相同效果
其架構是玩家在單機Flash進行操作後,會傳遞網路封包至遊戲伺服器(Server)
伺服器運算過後再將結果回傳至Flash接收
由於封包走的是http協定,因此封包內容很容易被解析或攔截
而遊戲封包的內容,往往紀錄了許多遊戲不會顯示的內部資訊
利用重複傳遞封包等功能,甚至可以做到自動在開心農場拔菜等效果

本篇教學就是教你如何觀看/修改網路封包

 

※HttpFox

HttpFox是Firefox的一個開放原始碼的外掛套件
其功能可以解析Firefox所接收到的Http封包
如果你只想觀看封包,而沒有要做修改的話,建議使用這種方式
當然,這套軟體的限制就是必須使用Firefox瀏覽器

下載位置

安裝完HttpFox後,請在功能表點選[工具]-[網頁開發者]-[HttpFox]-[Open In Own Window]
就可以開啟HttpFox的使用介面

charles_20.png

首先,請先點選左上角的Start按鈕,接著在瀏覽網頁的時候
下面的列表就會傳送源源不絕的封包進來

charles_3.jpg

我以這個讓我又愛又恨的網頁遊戲Tyrant為例
這遊戲的任何資料都會去跟伺服器要求封包資料
例如,我在遊戲中點選了Ranking之後,HttpFox就會得到一個網址上有getFactionRankings的封包
裡面記載的就是排行榜的封包資訊

charles_4.jpg

封包內容我們只需要看Content即可,其他資料對一般使用者沒什麼幫助
看了內容可以發現,Tyrant裡的內容全都是用JSON格式來傳遞的
有了這些資料後,想要處理/備份之類的都很容易

另外,遊戲的封包會與其他封包混在一起,若只想要看某些封包
可以在上方搜尋欄打上關鍵字過濾

charles_21.png

可以看封包,有什麼好處嗎?事實上,好處可多了
比方說,Tyrant載入時會載入為數不少的資料檔,像是你個人的記錄中(message=init)
記載了各種你想都想不到的資訊,例如你花了多少WB、牌組與任務紀錄
甚至是參加的Raid的BOSS Health
而工會會員資訊也記載了會員最後上線時間...等平常看不到的資訊,相當重要

順便一提,在接收完封包後,請適時的按下Stop或Clear
因為這些紀錄非常消耗記憶體,紀錄越多,Firefox越慢...

 

※Charles

如果今天你想做的不只是看封包,還希望能修改/重複傳送,或是不想安裝Firefox
這樣HttpFox就不敷使用了
以下介紹的是一款很知名的封包監測軟體Charels,不但有上述的功能,而且在IE/Firefox上皆可使用
(Chrome能不能用我不清楚,據其他人說是不行)

由於Charles是共享軟體,未註冊前每次只能使用30分鐘
如果手邊沒有這軟體的話,請低調囉...

charles_5.jpg

安裝完Charles後,請開啟主程式
如果今天你使用的是Firefox瀏覽器,請先點選[Porxy]-[Mozilla Firefox Proxy]這個選項
會出現視窗確認是否要在Firefox安裝這個外掛
如果安裝完成後,前方會出現打勾圖示,這樣才能在Firefox使用Charles

 

[接收特定封包]

前面提到的HttpFox並不能只紀錄特定網址的封包,只能讀取所有封包後顯示特定關鍵字的封包出來
差別在於HttpFox背後仍會接收許多其他封包,造成記憶體大量消耗
如果今天安裝Charles只為了修改特定的遊戲,我們可以指定Charles只接收特定網址的封包

點選功能表的[Proxy]-[Recording Settings],點選[Include]分頁

charles_6.jpg

點選Add按鈕後,可以設定過濾封包的條件,以Tyrant為例,輸入以下內容即可
其他遊戲請自行參考封包紀錄,找出其中的規則

charles_7.jpg

之後一樣底選遊戲的任意功能,左方就只會接收該遊戲的封包了
點選後,右方請選[Response]分頁觀看內容,其他分頁目前用不到

charles_8.jpg

Charles提供了各種方式解析封包,例如Tyrant使用的是JSON
當下方點選[JSON]分頁後,就會將封包內容以JSON格式建置成樹狀結構,方便讓你收合
如下圖所示

charles_9.jpg

順便一提,接收到的資料可以按右鍵選擇[Save Response...]儲存
比方說我接收到一個背景音樂檔案,我可以使用這種方式另存新檔,很方便吧

charles_19.png

 

[重複傳送封包]

這個技巧可以應用在很多方面,比方說在Tyrant中,利用Auto可以自動打完一場對戰
事實上戰鬥結果在你按下戰鬥的那一刻就已經確定了
但仍需等遊戲畫面跑完後,才能再點選對戰,很花時間
利用重複傳遞封包的技巧,我們先利用Auto進入一個Mission/Faction Fight
重複傳送進入Mission/Faction Fight的封包,這樣就能在幾秒內打完Mission/Faction Fight
或是某個成就必須在Arena跟玩家5000勝
這時也可以使用Charles重複傳送5000次跟某人對戰的封包,幾分鐘就能夠達成

這樣的作法充其量也只是便利而已
因為運算功能都是在伺服器上執行的,不會因為你多次傳送了封包就能夠無限進行任務
所以也談不上破壞平衡

charles_12.jpg

要達成這樣的效果非常簡單
首先,請點選一個存在的封包
然後按下右鍵,選擇[Repeat][Repeat Advenced...]
Repeat是直接重複傳送一次,Repeat Advenced可以指定傳送次數,如下圖所示

Repeat Advenced畫面中,Iterations是指重複次數
Concurrency是指同時進行的執行緒數目
比較可惜的是,似乎沒有辦法指定要多少秒傳送一次封包,Charles會劈哩啪啦一次傳完

charles_13.jpg

順便提醒一下,不少遊戲的封包會紀錄遊戲內部時間
如Tyrant每十分鐘(不確定)會更新一次時間的參數以及其hash
因此,如果傳送的是很古老的的封包,很有可能因為時間紀錄不同導致伺服器認定為錯誤的封包
請盡量用新的封包進行重傳

 

[修改封包]

修改封包是很容易破壞遊戲的行為,除非必要不然不建議去修改封包

修改封包能做的事情更多,比方說在Tyrant中,公會資料是由封包所傳送的faction_id決定的
但...遊戲公司蠢到沒有去判斷是否該玩家在該公會中
因此我們在讀取公會會員資料時,只要修改一下傳送封包的faction_id內容
就可以看到其他工會的名單了
還有,在競技場選人對戰時,會傳送要對戰的enemy_id
如果在傳送時攔截封包,改成其他玩家的id,就可以指定跟別人對戰了

charles_10.jpg

這裡示範的是在Tyrant觀看其他工會的會員名單
首先請選擇一個網址包含(message=getFactionMembers)的封包,按右鍵選擇Edit

charles_11.jpg

接著就可以任意修改要傳送的封包內容了
由於我們選擇了某個封包來編輯,因此內容會顯示該封包的資料
在這回合我們要修改faction_id的值
所以請將下面的分頁點到Form,然後在faction_id的Value打上別的公會ID即可

或許你會問,那我怎麼知道別家的公會ID?
遊戲中不少地方的封包會記錄公會名稱與ID(如宣戰頁面),自己尋找看看吧

修改完後,請選擇最下方的Execute執行,Charles就會將回傳封包顯示在左方的列表了

 

---
使用Edit的作法有個缺點,因為我們不是在遊戲中編輯的
因此即使回傳了內容,在遊戲中也不會顯示
例如我們修改了Arena對戰目標的封包,遊戲不會因此進入Arena
想要讓遊戲顯示相對應的內容,必須設定中斷點(Breakpoint)才行
中斷點指的是在指定的特定條件下,會中斷封包的傳遞(無論是封包接收或傳送)
讓你有機會可以修改封包內容,等使用者按下Execute後才繼續傳遞

點選功能表的[Proxy]-[Breakpoints...]

charles_14.png

按下Add新增一個條件,內容請參考各遊戲封包填寫
下方有Request跟Response兩種勾選框
Request指的是傳送封包,Response則是接收

charles_15.png

設定之後,請記得將中斷點的功能給打開
在主程式上的紅色按鈕即為快捷鍵

charles_22.png

我們以實際例子做測試,首先請打開中斷點
在Tyrant中,我們隨便選擇一個玩家進行對戰

charles_17.png

這時候由於進行了對該網站傳送封包的動作,Charles進入了中斷點

charles_18.png

在中斷點中,就能像Edit一般去修改封包內容。當修改完成之後,按下Execute即可繼續傳送
最後再回去Tyrant畫面,遊戲就會進入指定ID的對戰了
這樣做等同可以看到任意玩家的防牌......只要你知道他的ID編號(非名稱)

另外修改完成後,請記得將中斷點功能關閉,以免做出任何動作都中斷

在Tyrant這個遊戲中,若傳送封包沒有在指定秒數內回傳,會出現傳送失敗訊息
強迫你重新整理,因此修改動作請盡快完成,以免功虧一簣

可不可以修改Response呢?可以,但我個人建議不要
因為現在的網頁遊戲會一直對應Flash跟伺服器資料是否相同
如果強行修改而不同的話可能會造成資料錯亂等等問題

 

----
以上就是Charles的簡單功能介紹,Charles的功能當然不止於此,就留待各位發掘囉

再次呼籲各位網友,請將Charles用在正途上
若因非法使用造成任何損失,本人不會為他人行為負責

arrow
arrow
    全站熱搜

    蕭雲 發表在 痞客邦 留言(47) 人氣()