這問題很嚴重,然後MH死不修,現在感覺越來越多人發現了,乾脆直接公開,對MH施加一點壓力。
用電腦看排版可能會比較舒服。
2021/08/13更新:
目前看起來已經修正,用錯誤的mppb覆蓋關卡會不給結算,另外在修復後才安裝遊戲的裝置,所有相關存檔都被放在root權限區了。原本的裝置存檔位置暫時還沒移動,但是我猜近期也會跟進。
結論:有人關注才修。
開始之前有幾件事要說。
第一件事,我個人對修改數據行為的立場。
遊戲或多或少會在手機上儲存數據,因為是儲存在本地的,所以一定會有各種手段可以竄改、濫用。
如果這些資料是放在root權限的保護區塊內,那基本上MH沒有責任,因為這不是一般人可以隨便動到的地方,所以歸類為「惡意修改遊戲數據」我完全沒有意見。
但是,如果資料被放在一般權限區,一般人就有機會可以動到,如果會因此造成嚴重的問題,那代表重要數據放錯地方,也就是遊戲設計上存在漏洞/瑕疵。我會把利用這點的事件定位成「濫用遊戲漏洞」,也就是說,玩家亂改資料還是有問題,但是主要責任在造成漏洞的MH身上。
第二件事,發到巴哈來燒之前的事情。
這個漏洞根據考證,最早出自2020/06/08發布的v19.1,我認識的這幾個人發現並開始刻意研究的時間是2021/01左右。
在這之後,知情者一直有透過各種管道試圖回報,但是不知道是沒有傳達到正確的人手上,還是官方根本不重視這個問題,總之這個漏洞總共被放置了14個月,一直被保留到現在的v2021.1。
第三件事,請不要考古。
下文中我會放一些以前文章的連結,這些文章大多已經符合板規對古文的定義,請欣賞就好,不要回覆,以免觸犯板規。
第四件事,請勿隨意嘗試本文提供的不正規遊戲手段。
這次的漏洞造成的問題類似上次無限呂布,那次官方已經對造成的排行榜問題發出警告,如果這次你嘗試了本文提供的方法,而造成帳戶出問題,與我無關。
好的,以下正文開始。
一、手機上的玩家數據存放位置
大致上分在兩個檔案裡面,底下簡單說明一下。
1. com.madhead.tos.zh.v2.playerprefs.xml
有受到root權限保護的檔案。
如同副檔名所示,是一個人類可讀的XML檔案,裡面有存放hash參數,所以還算是有點最基本的防修改保護。
之後提到這個檔案的時候,簡稱為prefs。
2. MPPB.dat
放在一般權限區的檔案。
內容是人類不可讀的二進位編碼,所以裡面放了什麼東西都是由實驗結果推測的,有可能猜對也有可能完全錯誤。
這個檔案首次出現於v19.1,以前玩家資料都放在root權限區。
之後提到這個檔案的時候,簡稱為mppb。
還有一個不太重要的
3. MAPSB.dat
放在一般權限區的檔案。
首次出現於v2021.1,用於單獨存放遊戲設定。
這就是你更新完後打開遊戲發現一堆設定跑掉的原因,目前看起來好像沒有什麼重要內容放在裡面。
基本上後面提到的問題,成因就是太多資料被放到mppb裡面。
二、帳號備份與遊戲的登入機制
這部分要講的是玩家不在關卡內時的mppb相關機制。
可能之前有人看過
這篇教學,知道
mppb可以用來切換帳號,原理是這樣,
mppb存放的東西包含「帳號的登入權」,你可以把他想像成一把鑰匙。
比較特別的是,當鎖換掉的時候,舊鑰匙會發生什麼事:在你試著拿舊鑰匙登入的時候,伺服器會因為你持有舊鑰匙,認定你擁有這個帳號,然後就發給你新的鑰匙。
也就是說,只要你持有一份mppb的備份,就可以隨時登入這個帳號來玩。
然後來聊聊使用FB登入的時候,伺服器會做什麼事。
(1) 伺服器會根據你的FB帳號,發送帳號的鑰匙給你。
(2) 下次上一個裝置登入的時候,伺服器會拒絕。
神奇的點就在於,(2)的拒絕對象是「上一台裝置」而不是「以前的舊鑰匙」,而且因為被拒絕之後,舊鑰匙會被銷毀掉,所以在一次拒絕之後,伺服器就會認定這台裝置不再有任何可以登入的方法,而把他從伺服器上的「拒絕往來戶」名單除名。
意思是,前面提到的備份mppb對FB綁定的帳號同樣適用,只要持有mppb,不管你有沒有對應的FB帳號,都隨時可以登入那個神魔帳號。
這裡就有一個問題點,不知道各位有把帳號借給別人玩的經驗?
你以為在你的裝置上重新用FB帳號登入,對方就會被登出,然後你把FB密碼改一下,對方就不能再玩你的帳號。
然而事實上,只要對方有備份mppb,這個帳號就可以說是回不來了。
最後是近期終於出現的「登出」按鈕到底做了什麼。
基本上簡單而粗暴,就是把mppb丟進岩漿銷毀。
總結一下MH在這部分出了什麼問題。
(1) 把太多重要資訊放在一般權限區。
(2) 登入機制過度依賴client side的資料。
三、關卡資料與黑科技的機制
這部分要講的是玩家在關卡內時的mppb相關機制。
事態逐漸混亂。
開始之前,請大家先去複習
這棟樓的1樓、5樓、6樓。
先說明在關卡內黑科技的時候,遊戲做了什麼事情。
原始的關卡資訊,包含敵人ID、數值設定、技能、掉落物,會被放在prefs裡面,這部分幾乎可以說是個裝飾品。
剛進關的時候,遊戲會根據上述的關卡資訊生成對應的關卡物件,這些物件連同隊伍配置等內容,會被存進mppb裡面。
出關結算的時候,遊戲會向伺服器要求結算prefs記錄的關卡。
重開遊戲的時候,遊戲主要參考mppb的內容來還原關卡。
講到這裡,應該有人知道我想做什麼了:備份其他關卡內的mppb,拿來蓋掉現在的關卡mppb,我就可以用A關的內容通關B關。
這是測試結果:
(不要問我為什麼沒有零石標記,我也不知道,這個機制有夠謎)
我和小米提到的時光機指的就是這件事。
接下來講一些出關結算的細節。
結算的時候,遊戲會對伺服器送出prefs的關卡ID、一些關卡內統計資訊(其中有一部分可以在排行榜上看到)。
統計資訊裡面有一個重點:waveCount,也就是通過的wave數。伺服器會根據通過的wave數,決定你能拿到哪些掉落物。
舉例來說,上個月被虐殺到沒有呼吸的【仙術天才的傲然 夢魘級】,如果我用一個8 waves的mppb關卡內容覆蓋掉這關,然後打贏進入結算階段,因為通過的wave數是8,所以伺服器會判定我能拿到R7的燭龍,不能拿R10的盤古。
但是只要進入結算階段,伺服器就會認定你有成功通關,所以只求clear和過關石頭的話,只要存一份摩斯拉豆子隊打布蘭克洞窟關卡的mppb就可以高速通過大多數關卡。
接下來,有一種特殊關卡,無論打贏打輸還是右上出去,都會進入結算階段。
因此,這是唯一會用wave數判定通關成功與否的關卡,只有通過的wave數恰等於關卡的wave數,才算通關成功。
所以,洞窟關卡的mppb沒辦法讓你通過月份挑戰、輪迴、飛龍EX之類的挑戰關卡。
但是,右上飛龍有一種神奇的東西,叫做十二宮EX,某些星宮有20 waves,而且因為是遠古關卡,難度是娛樂等級,如果存了核彈打這關的mppb,基本上除了40層那種長輪迴以外都可以通關。
例如剛關掉的【七月挑戰任務 LV.10】,有18 waves,用十二宮EX的打法就是一路輾壓到R19,然後右上退出,這樣通過的wave數就是18,會被伺服器判定成功通過。
實際應用,英格麗4卡速刷西摩:
西摩在R11,所以選用必定結算的關卡,在R12退出進入結算階段。
把後面打完也是可以,但是沒什麼意義。
總結一下MH在這部分出了什麼問題。
(1) 還是一樣,把太多重要資訊放在一般權限區。
(2) 伺服器的關卡結算對傳回去的數據照單全收,根本沒做驗證。
四、解決方案
根據以上的實驗推測內容,我放幾個可能可以參考的解決方法。
1. 把重要數據移進root權限區
就像我一開始提到的立場,試著更動root權限區資料的話,很明確的屬於「惡意修改遊戲數據」的範圍,沒辦法用遊戲漏洞來辯解,而且修改的難度也會上升。
2. 伺服器端應該驗證數據
很基礎的東西,早該做了好嗎?
基本上會被拿來濫用的內容就到這邊,後面算是額外的一點實驗結果。
1. SL大法
關卡進度的存放位置有點微妙,如果要玩無限SL的話,必須要把prefs和mppb都備份起來才可以。
不過會用這招的人大概只有堅持通關的角色廚吧,能直接用簡單關卡覆蓋,誰還跟你SL。
2. 重置關卡進度
prefs和mppb應該有存放某些共同數據,如果對不起來的話,載入關卡的時候會以mppb的物件為主,並且把進度重置回R1,這也就是SL大法需要連prefs都備份的理由。
重置進度的同時,遊戲會重新放置一個進場版面,我之前
測進場版面的數據收集方法有提到一句「4/30更:稍微修改腳本,累積到1500啦」,就是改成用一封和二封的
mppb互壓,讓進度不斷被重置,效率和穩定性都有顯著提升。場景是古神遺跡又是另外一個故事,在此略過。
3. 黑科技之後的你有新情報
黑科技之後,mppb裡面存的鑰匙會變成過時的鑰匙,所以在結算階段完成後,會試著重新要一份鑰匙。
「在結算階段完成後」這個時機點也是很智障,從v20.1開始結算階段甚至放棄認證mppb的UID是不是和prefs的UID相符,所以可以用別的帳號的隊伍解新手帳的五色七種成就。
補充:跨帳號的問題v2021.1修掉了。
4. 負時間排行榜
看起來目前儲存進關時間的機制有點狀況,不然就是根本沒存,所以重開過還上榜的話會看見負時間。
我原本是這樣以為啦,但是上面那次測試居然弄出正時間來,什麼鬼。
重點就這樣,還有很多瑣碎的細節沒提,要我解釋完太浪費篇幅,而且很多東西目前也沒有明確的結論,所以就到此為止。
本文在新版實驗告一段落後會備份於小屋。