在觀看本文前,請閱讀以下事項
=======================
本教學可能會破壞遊戲的公平性與娛樂性,或是違背遊戲的使用者規範
請使用者自重,盡量以純研究為主
如果因修改封包造成使用者任何損失,本人不為他人相關行為負責
=======================
現今的網頁遊戲相當熱門,從開心農場開始,網頁遊戲如雨後春筍般的冒出
跟傳統網路遊戲相比,只要可以上網且能顯示Flash,無須安裝其他軟體,就能在任何地點遊戲
網頁遊戲大多以可愛風格呈現,吸引了平常不玩遊戲的女性玩家
且網頁遊戲大多是免月費+商城的形式,如果哪天撒手不玩也不會損失太多
目前網頁遊戲大多由Flash寫成,原因在於Flash在不同瀏覽器上可以顯示相同效果
其架構是玩家在單機Flash進行操作後,會傳遞網路封包至遊戲伺服器(Server)
伺服器運算過後再將結果回傳至Flash接收
由於封包走的是http協定,因此封包內容很容易被解析或攔截
而遊戲封包的內容,往往紀錄了許多遊戲不會顯示的內部資訊
利用重複傳遞封包等功能,甚至可以做到自動在開心農場拔菜等效果
本篇教學就是教你如何觀看/修改網路封包
※HttpFox
HttpFox是Firefox的一個開放原始碼的外掛套件
其功能可以解析Firefox所接收到的Http封包
如果你只想觀看封包,而沒有要做修改的話,建議使用這種方式
當然,這套軟體的限制就是必須使用Firefox瀏覽器
安裝完HttpFox後,請在功能表點選[工具]-[網頁開發者]-[HttpFox]-[Open In Own Window]
就可以開啟HttpFox的使用介面
首先,請先點選左上角的Start按鈕,接著在瀏覽網頁的時候
下面的列表就會傳送源源不絕的封包進來
我以這個讓我又愛又恨的網頁遊戲Tyrant為例
這遊戲的任何資料都會去跟伺服器要求封包資料
例如,我在遊戲中點選了Ranking之後,HttpFox就會得到一個網址上有getFactionRankings的封包
裡面記載的就是排行榜的封包資訊
封包內容我們只需要看Content即可,其他資料對一般使用者沒什麼幫助
看了內容可以發現,Tyrant裡的內容全都是用JSON格式來傳遞的
有了這些資料後,想要處理/備份之類的都很容易
另外,遊戲的封包會與其他封包混在一起,若只想要看某些封包
可以在上方搜尋欄打上關鍵字過濾
可以看封包,有什麼好處嗎?事實上,好處可多了
比方說,Tyrant載入時會載入為數不少的資料檔,像是你個人的記錄中(message=init)
記載了各種你想都想不到的資訊,例如你花了多少WB、牌組與任務紀錄
甚至是參加的Raid的BOSS Health
而工會會員資訊也記載了會員最後上線時間...等平常看不到的資訊,相當重要
順便一提,在接收完封包後,請適時的按下Stop或Clear
因為這些紀錄非常消耗記憶體,紀錄越多,Firefox越慢...
※Charles
如果今天你想做的不只是看封包,還希望能修改/重複傳送,或是不想安裝Firefox
這樣HttpFox就不敷使用了
以下介紹的是一款很知名的封包監測軟體Charels,不但有上述的功能,而且在IE/Firefox上皆可使用
(Chrome能不能用我不清楚,據其他人說是不行)
由於Charles是共享軟體,未註冊前每次只能使用30分鐘
如果手邊沒有這軟體的話,請低調囉...
安裝完Charles後,請開啟主程式
如果今天你使用的是Firefox瀏覽器,請先點選[Porxy]-[Mozilla Firefox Proxy]這個選項
會出現視窗確認是否要在Firefox安裝這個外掛
如果安裝完成後,前方會出現打勾圖示,這樣才能在Firefox使用Charles
[接收特定封包]
前面提到的HttpFox並不能只紀錄特定網址的封包,只能讀取所有封包後顯示特定關鍵字的封包出來
差別在於HttpFox背後仍會接收許多其他封包,造成記憶體大量消耗
如果今天安裝Charles只為了修改特定的遊戲,我們可以指定Charles只接收特定網址的封包
點選功能表的[Proxy]-[Recording Settings],點選[Include]分頁
點選Add按鈕後,可以設定過濾封包的條件,以Tyrant為例,輸入以下內容即可
其他遊戲請自行參考封包紀錄,找出其中的規則
之後一樣底選遊戲的任意功能,左方就只會接收該遊戲的封包了
點選後,右方請選[Response]分頁觀看內容,其他分頁目前用不到
Charles提供了各種方式解析封包,例如Tyrant使用的是JSON
當下方點選[JSON]分頁後,就會將封包內容以JSON格式建置成樹狀結構,方便讓你收合
如下圖所示
順便一提,接收到的資料可以按右鍵選擇[Save Response...]儲存
比方說我接收到一個背景音樂檔案,我可以使用這種方式另存新檔,很方便吧
[重複傳送封包]
這個技巧可以應用在很多方面,比方說在Tyrant中,利用Auto可以自動打完一場對戰
事實上戰鬥結果在你按下戰鬥的那一刻就已經確定了
但仍需等遊戲畫面跑完後,才能再點選對戰,很花時間
利用重複傳遞封包的技巧,我們先利用Auto進入一個Mission/Faction Fight
重複傳送進入Mission/Faction Fight的封包,這樣就能在幾秒內打完Mission/Faction Fight
或是某個成就必須在Arena跟玩家5000勝
這時也可以使用Charles重複傳送5000次跟某人對戰的封包,幾分鐘就能夠達成
這樣的作法充其量也只是便利而已
因為運算功能都是在伺服器上執行的,不會因為你多次傳送了封包就能夠無限進行任務
所以也談不上破壞平衡
要達成這樣的效果非常簡單
首先,請點選一個存在的封包
然後按下右鍵,選擇[Repeat]或[Repeat Advenced...]
Repeat是直接重複傳送一次,Repeat Advenced可以指定傳送次數,如下圖所示
Repeat Advenced畫面中,Iterations是指重複次數
Concurrency是指同時進行的執行緒數目
比較可惜的是,似乎沒有辦法指定要多少秒傳送一次封包,Charles會劈哩啪啦一次傳完
順便提醒一下,不少遊戲的封包會紀錄遊戲內部時間
如Tyrant每十分鐘(不確定)會更新一次時間的參數以及其hash
因此,如果傳送的是很古老的的封包,很有可能因為時間紀錄不同導致伺服器認定為錯誤的封包
請盡量用新的封包進行重傳
[修改封包]
修改封包是很容易破壞遊戲的行為,除非必要不然不建議去修改封包
修改封包能做的事情更多,比方說在Tyrant中,公會資料是由封包所傳送的faction_id決定的
但...遊戲公司蠢到沒有去判斷是否該玩家在該公會中
因此我們在讀取公會會員資料時,只要修改一下傳送封包的faction_id內容
就可以看到其他工會的名單了
還有,在競技場選人對戰時,會傳送要對戰的enemy_id
如果在傳送時攔截封包,改成其他玩家的id,就可以指定跟別人對戰了
這裡示範的是在Tyrant觀看其他工會的會員名單
首先請選擇一個網址包含(message=getFactionMembers)的封包,按右鍵選擇Edit
接著就可以任意修改要傳送的封包內容了
由於我們選擇了某個封包來編輯,因此內容會顯示該封包的資料
在這回合我們要修改faction_id的值
所以請將下面的分頁點到Form,然後在faction_id的Value打上別的公會ID即可
或許你會問,那我怎麼知道別家的公會ID?
遊戲中不少地方的封包會記錄公會名稱與ID(如宣戰頁面),自己尋找看看吧
修改完後,請選擇最下方的Execute執行,Charles就會將回傳封包顯示在左方的列表了
---
使用Edit的作法有個缺點,因為我們不是在遊戲中編輯的
因此即使回傳了內容,在遊戲中也不會顯示
例如我們修改了Arena對戰目標的封包,遊戲不會因此進入Arena
想要讓遊戲顯示相對應的內容,必須設定中斷點(Breakpoint)才行
中斷點指的是在指定的特定條件下,會中斷封包的傳遞(無論是封包接收或傳送)
讓你有機會可以修改封包內容,等使用者按下Execute後才繼續傳遞
點選功能表的[Proxy]-[Breakpoints...]
按下Add新增一個條件,內容請參考各遊戲封包填寫
下方有Request跟Response兩種勾選框
Request指的是傳送封包,Response則是接收
設定之後,請記得將中斷點的功能給打開
在主程式上的紅色按鈕即為快捷鍵
我們以實際例子做測試,首先請打開中斷點
在Tyrant中,我們隨便選擇一個玩家進行對戰
這時候由於進行了對該網站傳送封包的動作,Charles進入了中斷點
在中斷點中,就能像Edit一般去修改封包內容。當修改完成之後,按下Execute即可繼續傳送
最後再回去Tyrant畫面,遊戲就會進入指定ID的對戰了
這樣做等同可以看到任意玩家的防牌......只要你知道他的ID編號(非名稱)
另外修改完成後,請記得將中斷點功能關閉,以免做出任何動作都中斷
在Tyrant這個遊戲中,若傳送封包沒有在指定秒數內回傳,會出現傳送失敗訊息
強迫你重新整理,因此修改動作請盡快完成,以免功虧一簣
可不可以修改Response呢?可以,但我個人建議不要
因為現在的網頁遊戲會一直對應Flash跟伺服器資料是否相同
如果強行修改而不同的話可能會造成資料錯亂等等問題
----
以上就是Charles的簡單功能介紹,Charles的功能當然不止於此,就留待各位發掘囉
再次呼籲各位網友,請將Charles用在正途上
若因非法使用造成任何損失,本人不會為他人行為負責

*****
*****
重複傳送5000次跟某人對戰的封包不會被抓嗎...?
應該會......所以我是分幾次打完的 如果Charles有定時傳送封包的功能的話就好了
好棒的文章!推!
好東西,連間諜都不用當了...
好像不能直接獲得別公會的名單,還是得要靠間諜的樣子
當然可以直接獲得別的工會的名單 在宣戰的時候就可以知道別的工會的ID了 或是對方宣過來時,也會寫對方公會的ID 如果你回去看文件中的"宣戰目標" 你會發現B欄被隱藏起來了,顯示出來就是每家工會的ID 只要知道別家工會的ID,就會知道對方會員上線情形 等於可以計算對方的活躍度
防牌要看也很麻煩,如果沒有名稱要看ID會死人@@ 點看看首頁的cards (以前的profile) 也沒有response... 想破頭了
有自己公會會員名單的資料就知道自己公會會員的防牌啦 如果要看其他公會的會員防牌,只要抓對方公會的會員名單即可 我就一直在做這些事,不會很麻煩吧... 要看所有卡片資料的話可以直接下載以下檔案觀看啊 http://kg.tyrantonline.com/assets/cards.xml?1.10.1 載入遊戲時封包就會收到這些檔案了
請問我是用FB上FLASH的小遊戲 我能以觀看封包的方式來看他的整體運作 不過我改了傳送過去的封包 卻好像改不了他回傳回來的封包@@ 譬如說我也是修改 對戰ID 他回傳回來的封包也是這個ID的資料 不過它真正的對手並不是我修改的封包 感覺頂多只能將每天會做的事情 記錄下來 一次用REPEAT的方式傳送封包 來達到一秒鐘完成所有事情 但是好像改不太到值 想請問 我有設接受封包的中斷點 但是不知道怎麼改接受的封包 可以的話能請教一下嘛 很謝謝無意間逛到這部落閣^^
其實不太懂你的意思 你的意思是改了傳出去的對戰ID,可是傳回來是原本的ID嗎? 這可能是你沒有修改成功? 要改接受的封包,就是在Edit Breakpoint的地方 將Response打勾即可 這樣如果接收到指定條件的封包,就會進入中斷點 這時候就可以對其做修改了
我也想問這個問題,好像是伺服器拒絕修改的封包了。要連續打任務或戰爭會錯誤;明明修改成對戰公會的ID,傳回來的資料卻還是自己公會的。所以才有我之前說得仍然得靠間諜,雖然我沒開分身去當間諜,沒辦法確認這件事。
很久沒玩Tyrant了,也有可能是封包有做什麼修正 有跟hash綁定什麼之類的 這我就不清楚啦... 最近重灌電腦將Charles給格式化了,我也沒法測試~_~
charles是个java代理 附带数据更改之类的功能 不过我一般用firebug就够了 有些通信会附加校验 单纯重发没啥用 不过可以做镜像来学习还是不错的
謝謝你的補充,不過我覺得兩者用途不同耶 Firebug是用在建查網頁排版,類似IE的開發者工具 而Charles則是你說的java代理,能夠修改封包 Firebug應該只能改排版,不能改封包吧
請問collapse blast 這款遊戲可以使用嗎? 如增加遊戲時間,無限愛心,無限coin....之類的
因為我沒有玩過,所以沒有辦法回答你... 要看這遊戲對於這些資料有沒有做檢查 建議還是不要隨意修改比較好 網頁遊戲作弊是很容易被鎖帳號的
想請問一下 這個遊戲能改嗎? http://ppt.cc/8qO2 已經使用Charles的[Proxy]-[Recording Settings]-[Include]了 可是設定完以後 網頁遊戲動了還是沒有讀出來.."
看起來這只是單機的flash遊戲 所以跟server應該沒什麼關係喔 你需要的是修改flash遊戲的軟體
你也知道在大陆是封掉facebook的,这会导致Charles不能获取facebook的页面数据包,我该怎么办?
試試看用代理伺服器吧 我沒遇過這問題所以也沒辦法直接幫你解答,不好意思
這可以洗回復-.-
用下去應該會被刪文吧
*****
修改封包有秒數的限制,那麼有甚麼方法可以避免掉秒數的限制呢?
我文中的秒數限制指的是Tyrant這個遊戲 他只要X秒內沒有收到回傳的封包,遊戲就會認為你斷線了 其他遊戲的判定時間應該不同 因為是遊戲本身檢查的,所以我想很難去修改他吧 (用加速器把時間調慢不知道可不可以避過檢查)
大大 我想請問一下 我在玩的這個fb遊戲 http://apps.facebook.com/bro-basketball/?fb_source=bookmark_apps&ref=bookmarks&count=0&fb_bmpos=2_0 可以使用Charles 修改嗎 他類似網頁遊戲
其實我沒有時間去幫忙測試其他的遊戲 不過可以跟你說一下 Charles只能改封包,無法修改資料庫的資料 大部分的網路遊戲或往夜遊戲都是有對封包做檢查的 即使成功騙過,製作公司也很容易發現異常 若被抓到可就得不償失了 所以能不改還是建議不要改吧
我有點看不太懂 我修改的事別種 網頁遊戲 但是我接收封包 沒有看到數據 @@ 這是怎麼回事
不太清楚你的情況,我猜可能是他傳輸的數據有做過加密 或是用特別的格式來傳遞資料,所以沒法修改吧
請問單單只是重覆傳送封包,而不做任何修改 這樣容易被檢查到嗎?
如果對方server會紀錄所有傳進來的封包,是有可能發現這種不正常的情形 另外若封包有timestamp之類的屬性,傳出去也可能被server發現異常 詳細情形還是要看該公司的做法
*****
*****
*****
*****
您好拜讀完您的花瓶教學後,想請問同樣方法適用在使用BLUESTACKS上進行手機上的遊戲嗎? 我也想用此方法用於全民打棒球上,不知您是否了解作法呢
不好意思,我沒有玩那個遊戲,所以沒辦法給你回答喔 你可以先看看傳出去的封包是什麼樣的形式,明文或是密文 若是密文就不用試了
大大看了這篇文章後 我變成您的粉絲了是否有什麼聯絡方式,想要共同研究~XD
謝謝你的支持 可惜我已經很久沒用charles了,所以無法一同研究
*****
大大你好~我只玩FB的SLOTOMANIA可以请你教我如何更改vip或增加coin的做法吗?
不好意思,寫這篇教學並沒有打算幫大家修改遊戲 也請自行研究
求解決 全部都變Default了 要怎麼解決
什麼東西變成default啊?
*****
*****
*****
*****
*****
*****
摁....很棒的網路封包應用,請問你本身是從事電子遊戲行業嗎?
不是
大大請問一下, 我現在玩的一款遊戲所傳送的封包有一行叫Sig的東西, 還有一行是寫封包編號的。 我直接傳回去會有Response說封包invalid, 有沒有方法可以改掉傳回去? *我不需要量化生產,只要能傳一兩次也好。遊戲名稱:光暈戰記
你好,請參考本文有提到要如何修改封包
*****
*****
開FB的遊戲後, 全部都是default的頁面, 如圖: http://i.imgur.com/fWjDiT7.png 求解~
這問題我也不清楚 要麻煩你自行嘗試了,不好意思
你好~我想請問一下 就是遊戲過關的時候會有獎勵 能不能先看他給我什麼再決定要不要接受? 如果不想要的話可以令他判斷為我斷線了 然後再重新傳一個獎勵回來嗎 直到得到想要的才接收~ 但伺服器是不是只會一直重複傳同一個封包回來也不知道⋯
你好,你的想法不太可能實現 因為Client端的資料很容易被破解 一般遊戲都是在Server端運算後,僅將結果回傳 所以像是手機遊戲的轉蛋,就算沒有直接抽或是故意斷線 重開時會發現抽到的東西實際已經取得了
有什麼軟體可修改封包 支援 GOOGLE 流覽器嗎? 除了 WPE
我查了一下Charles是否支援Chrome http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/ 似乎經過一些操作就可以讓他支援Chrome了
你好, 我是Charles的初學者 你提到 看了內容可以發現,Tyrant裡的內容全都是用JSON格式來傳遞的 我想問你是如何判斷出這是JSON格式? 是靠經驗嗎? 還是有一些方法?
因為只要有接觸過JSON的話應該會覺得很熟悉 而且交換資料的語言也主要也就XML跟JSON了
那有什麼方法/規律可以讓我們這些菜鳥判斷出來嗎 還是只能靠經驗?
就...請靠經驗吧 有看過JSON格式的應該一眼就能認出來才對 https://zh.wikipedia.org/wiki/JSON
有些game就算是更改封包game裡數據也是不變 請問這是甚麼情況?
你沒說是改送出去的封包還是收到的封包 我猜你是指改送出去的封包 這是因為遊戲中Client端的數值大多只是顯示用 實際紀錄的值在Server端 所以就算用修改器改網頁遊戲之類的也會發現數值會變回來 那為什麼改送出去的封包也會這樣 應該是因為遊戲中不會再收到回傳的目前數值並更新 例如遊戲中有錢10000,買東西花100,如果Server端回傳9900顯然多此一舉(因為Client端算得出來) 這樣可以減少傳輸量 重新啟動遊戲,我想數值應該就會變了
你好 我想請問一下 我開啟charles以及我想要修改的網頁遊戲後 重整該網頁 雖然charles是有顯示出一些相關的資料(10筆) 可是在response那邊看到的都是類似網頁原始碼而已 而且無論我做什麼動作 資料量都沒有增加 在overview那邊 有3筆是kept alive 7筆不是 請問這樣是什麼意思呢?
抱歉,我不太懂你的意思,如果可以貼圖的話比較能釐清狀況 關於你說資料量都沒有增加 可能是一些動作不會回傳(例如開啟選單之類的,通常只有會影響到數值的才會有回傳) 另外請看Request Tab,這才是你真正送出去的資訊
你好版大,我想請問一下 手機遊戲的轉蛋能用觀察他的封包來判斷出哪時候會出好武器的機率嗎? 還是我們只能攔截到自己傳給伺服器的?
雖然每個遊戲伺服器的撰寫方式都不同,但我可以很明白跟你說不行 所謂封包就是client跟server交換的資料 server不給的是不可能看到的 正常的遊戲轉蛋都是用以下兩種方式來計算機率 1. 在後端產生亂數,每次轉蛋就判斷一次 2. 建立一個陣列,並在其中放上指定數量的中獎籤,然後依序給予決定中不中 這樣的好處是不會因為運氣關係導致送出比預期多或少的獎品 無論是上面哪種都是在server端做 如果真有在client端計算結果的課金遊戲,簡直是不要命了
*****
*****
突然改變的遊戲封包會影響電流的大小值嗎?
並不是突然改變而是改變內容再傳出去
所以只適用於網業遊戲嗎
所有網路遊戲都是用封包傳遞資料(差在有沒有加密) 只要你能把Charles作為代理伺服器就能看到了 也有人試過用Charles看手遊的封包 但是操作上較為複雜,所以我沒有去研究或嘗試 可以參考以下這篇 Charles - 來漫談手機封包入門修改概念 http://blog.xuite.net/lucas.froums/psp/230771601-Charles+-+%E4%BE%86%E6%BC%AB%E8%AB%87%E6%89%8B%E6%A9%9F%E5%B0%81%E5%8C%85%E5%85%A5%E9%96%80%E4%BF%AE%E6%94%B9%E6%A6%82%E5%BF%B5
若網頁遊戲封包重要資料地方都有經過加密 且在伺服器端都有記錄著玩家所擁有的禮物資訊 我們是不是就無法修改封包,重送也沒用了 ?
是的 通常取得什麼項目在伺福器端都會記錄 改封包只能突破client端的限制,沒法突破server端 (但曾經也聽過有遊戲把重要資料記錄在client端,只回傳結果) 順便一提,如果封包使用https加密傳輸 除非能取得SSL證書不然也無法解開封包
你上述教的是網頁遊戲嗎,那麼手機要怎麼連上charles,看了其他的教學也照著步驟進行,但是charles連線的同意書都一直沒有跳出來,這是什麼問題?
手機連charlie也要設手機的代理伺服器 請自行Google一下囉
*****
*****
*****