前言
最近下載了神魔之塔這款遊戲…orz。 我發現在 Facebook 打廣告還算有用,真的就是因為他出現贊助在我牆上太多次,才決定下載試試看,而且當我意識到的時候,我已經花了整整一天在轉珠上面了,也難怪神魔之塔版會佔據 PTT 熱門看板前幾名,不是沒有道理 XD 我喜歡從應用層的協定來了解一款網路遊戲,了解程式和程式間的溝通,總能更了解開發者的思維。身為一個研究僧,動手來看看神魔之塔的 API 吧!
發現
一開始錄封包還滿訝異的,因為它是走 HTTP,沒有 SSL/TLS 的狀況下很容易被偷走遊戲資訊,而且其 session 好像大喇喇的出現在 GET 參數裡面,如下面一個取得獎賞清單的請求:
不過其實神魔之塔這款遊戲帳號被偷走也不太會有影響,畢竟虛擬的卡片也不能流通。影響比較大能想到的就是把其他玩家六星神卡當肥料餵史萊姆。(但有人會這麼無聊嗎?)
神魔之塔的 API 還滿清楚簡單的,結構一目了然。唯一讓我有興趣的,是 hash 那個參數,因為如果對請求做了修改,伺服器就會回傳 Invalid Hash Code.
,看起來這串 hash 值是對所有參數做某種演算法的結果。
所以我就翻翻翻,翻到了產生 hash 的演算法:
1
|
|
其中 GetHash 是下面這個樣子。
1 2 3 4 5 6 |
|
在有了這串 hash 演算法的前提下,可以做的事情好像就很多了,例如說 自動戰鬥。
實作
為了要證實這樣的想法,我寫了一支程式去測試。模擬戰鬥中的參數,然後送出戰鬥勝利的請求。實作影片如下:
這只是一支 POC (Proof of Concepts) 程式,雖然看起來很強大,但就寫到這邊為止了。要不是前兩天陪朋友們去參加比賽,我順便去練練程式,不然這應該永遠只是一個 concept 而已。 利用同樣的前提,以下還有其他猜想,但我已經不會去驗證了: - 感覺夠做到自動化首抽,應該可以不受官方開新帳號的限制 - 例如在戰鬥中回合次數改成 9999,不知道會不會把 skill 等級提昇
結論
本篇從神魔之塔 API 的角度出發,嘗試了解參數的意義,並實作程式自動化戰鬥。 從這件事情也學習到,在開發者的角度,有必要在重要的加密程序上做一些混淆,可以增加有心人解析的困難度。
我能夠預料到這篇文章寫出來有些人可能會有問題想問,但這只是我突發奇想做的事情,也不會繼續研究下去,所以請原諒我不會在這篇文章下回應留言。