前言
最近心血來潮,想玩一玩很早之前的ARPG游戲——澤諾尼亞5了惯疙,去谷歌Play商店下載了钱床,運行一看荚斯,咋沒中文,后來一想會不會只適配繁中查牌,于是把手機系統(tǒng)語言改成中國臺灣的繁體中文事期,再次運行,真的是中文纸颜,不過是繁體兽泣,我一口老血噴出來。想著玩這個游戲需要切語言太麻煩(畢竟不習慣繁中)胁孙,便想著能不能自行"優(yōu)化"一下唠倦,使得在簡中語言環(huán)境下能玩到中文的游戲,遂開始了折騰之旅涮较。
成果和工具鏈接
游戲地址:https://pan.baidu.com/s/1fROgF4vtQ9_7aa2L1uZreA 密碼:0s40
apktool: https://ibotpeaches.github.io/Apktool/
dex2jar: https://github.com/pxb1988/dex2jar
0x00.修改Smali文件
反編譯apk(用的macOS+apktool工具)牵敷,打開目錄一看assets中存在分別以ENG、CHN-S法希、CHN-T這兩者結尾的文件,那么這必然就是文本文件了靶瘸,而且還幫我們適配了簡中(嘻嘻)苫亦。那么最簡單的方法是直接把默認的ENG文本替換成CHN-S文本,后來發(fā)現(xiàn)怨咪,ENG文本會多出一個屋剑,貌似是對話文件(英文版的竟然有3個,亞洲語言的只有2個诗眨,試著直接替換發(fā)現(xiàn)也能運行唉匾,但不保證后期玩不會閃退,萬一他是動態(tài)且分多個文件加載文本的呢[攤手])匠楚,于是便老老實實的走分析之路巍膘。
我搜索"rCN"、"rTW"均無果芋簿,后來搜"TAIWAN"發(fā)現(xiàn)有相關結果峡懈,在此路徑(/smali/com/gamevil/circle/utils/)下有一個GvUtils類,里面有2個這樣的方法:getLanguage()和getLanguageCode()与斤,心想這2個就是判斷語言的函數(shù)了肪康,于是用到了第2個神器"dex2jar"荚恶,這個可以加載編譯好的apk文件解壓后得到的classes.dex文件,如果沒被加殼或混淆的話磷支,幾乎90%的代碼都會被還原且能看懂谒撼。用了dex2jar看GvUtils類中的這2個函數(shù),發(fā)現(xiàn)是這樣的:
public static String getLanguage(Context paramContext) {
String str2 = Locale.getDefault().toString();
String str1 = str2;
if (str2 == null)
str1 = "0";
return str1;
}
public static String getLanguageCode() {
return Locale.getDefault().toString();
}
那么就是說我們只需要營造繁體中文系統(tǒng)語言下的結果就行了雾狈,手機調成繁體后廓潜,我分別運行了上面2個函數(shù),結果都是"zh_TW_#Hant"箍邮,于是問題來了茉帅,怎么修改原來的GvUtils.smali呢?我想到自己寫一個返回固定值的函數(shù)锭弊,然后打包成apk堪澎,再反編譯自己的程序,看看相應的位置會變成什么就好了嘛味滞。于是我這樣做了樱蛤,發(fā)現(xiàn)格式是這樣的:
.method public static getLanguageCode()Ljava/lang/String;
.locals 1
.line 321
const-string v0, "zh_TW_#Hant"
return-object v0
.end method
注意到這里有個line,后面還跟了代碼行數(shù)剑鞍,于是我決定照搬過去昨凡,但是不改原代碼行數(shù),于是乎這兩個方法就被我改成這樣了:
.method public static getLanguage(Landroid/content/Context;)Ljava/lang/String;
.locals 1
.line 567
const-string v0, "zh_TW_#Hant"
return-object v0
.end method
.method public static getLanguageCode()Ljava/lang/String;
.locals 1
.line 321
const-string v0, "zh_TW_#Hant"
return-object v0
.end method
0x02.替換文本
因為游戲自帶簡中只是并沒適配(也許是跟安卓10不兼容蚁署?)便脊,所以我按照上一步提到的,替換了相應語言文件光戈,是這2個路徑:/assets/zn5/data和/assets/zn5/script哪痰,把簡中的文本復制出來改成繁中的名字替換掉即可。
小結
至此久妆,自行適配簡中的步驟就完成了晌杰,而且不需要切換手機語言環(huán)境,文章需要用到的工具的鏈接和成果放在最前面筷弦。