特點:無需修改客戶端,只需設置代理即可應用修改。但是目前還沒有開發出自動化的修改工具整個修改過程比較麻煩。
方法:
使用代理處理https請求,返回修改好的數據。
需要修改的文件:
- setting_…….unity3d,excel_output_…….unity3d(省略部分爲hmac-sha1值,文件經過AES加密)文件內有所有數據(屬性,文本,關卡等)。也就是每次熱更新的文件。
- DataVersion.unity3d,(每字節與0xA5異或)不保存在本地,包括用於解密上面兩個文件的AES密鑰和hmac-sha1密鑰(經過RSA加密,密鑰在程序中,是固定的)和兩個文件的名稱N,大小CS,CRC(hmac-sha1)和內部的文件列表。用於判斷是否需要更新。
大致操作過程:
- 找到RSA密鑰:使用IDA和il2cppdumper發現密鑰是固定的爲xml格式的RSA密鑰,具體過程見(52pojie鏈接),或者在global-metadata.dat中搜索<RSAKeyValue>也可以找到RSA密鑰。
- 抓包確定文件的url:使用Fiddler抓取,得到三個文件的url。
- 下載文件:瀏覽器直接輸入地址即可。
- 解密:dataversion.unity3d每字節與0xA5異或。使用Assets Bundle Extractor提取其中的PackageVersion爲txt,第一行爲加密的AES和hmac-sha1密鑰。使用第一步得到的RSA密鑰解密得到56字節數據,按順序爲32字節AES key,16字節AES IV,8字節hmac-sha1 key。使用得到的AES key和IV可以解密另外兩個文件。
- 修改:解密後excel_output和setting可以用Assets Bundle Extractor導出修改並導入。其中excel_output中主要爲數值數據,setting中主要爲關卡的lua腳本。
- 重新加密:使用AES密鑰對修改後的excel_output和setting加密,使用hmac-sha1的key重新計算sha1值,並對應修改dataversion.unity3d中PackageVersion裏的對應的文件大小(CS)和sha1(CRC)的值,然後再次異或0xA5得到加密的文件。
- 應用:在Fiddler中設置AutoResponder,把文件對應的url的respond設置爲本地修改好的文件。或者使用其它工具,github有很多類似功能的項目。
- 在手機上安裝證書並設置好代理打開遊戲會自動下載這些文件,進遊戲即可看到效果。
總之現在還沒有自動化的工具,手動修改還是比較麻煩。聽說遊戲要加強防護措施,估計不久這種方法就可能不行了,也懶得做自動化的工具了。有興趣的可以自己跟着做一做。如果看懂它關卡的lua腳本的話就可以自制關卡,還是比較有意思的。用於作弊的話應該很容易就會封號。