對國外手機游戲進行的漢化,使用該技術甚至可以輔助換皮技術,對公司已有手機游戲進行技術處理,替換掉游戲中的故事介紹、公司名稱、公司標示,一切和原游戲有關的文字信息。
技術分析:
漢化分以下幾種情況,分別詳細說明。
1. 從內容上說
(1)對國外游戲的漢化。對國外游戲進行漢化,就是將非漢語翻譯過來,轉化為漢語。
(2)國內游戲的“漢化”。對國內游戲,就是更改游戲相關信息,配合換皮使用。
2. 從存儲方式說
(1)相關信息存儲在.class文件中。游戲相關信息存儲在程序中。
(2)相關信息存儲在單獨得資源文件中。如果沒有加密還不難,加了密,就看運氣好壞了。這裡只討論不加密的情況。
技術原理:對於存儲在資源文件中的游戲信息。只要替換掉就可以。對於存儲在程序中的游戲信息,是本教程討論的重點。在程序中的信息用相關工具打開 *.class文件找到所有包含游戲信息的類。
替換掉內容,就ok了。
漢化工具 :Java反編譯器、jdk 、winRAR、Uedit32。
如果有 Java IDE工具更好。
漢化流程:
1.創建一個 a.java,內容如下:
public class a{
static{
String s= "一個不能少一個也不多";
System.exit (0);
}
}
程序非常簡單,到後面會用到,如果有IDE 就用IDE 編譯。
如果沒有IDE,用任何版本的 jdk(比如jdk1.3.1_16)編譯也可以。a.class文件備用。
2.用winRAR找到存有游戲信息的*.class文件。解壓該文件到任意位置,用Uedit32打開。可以看到*.class 文件的十六進制形式(截圖1)。
3.對於游戲信息是英文的,可以直接在十六進制右邊看到字符串。而對於游戲信息是漢語的,能看到不可讀的漢語(像亂碼)。我們就是要修改這些信息。先說漢語的情況,在.class文件中,我們最關心字符串的存儲格式,漢字在.class文件中以字符串長度的三倍字節存儲,比如10個漢字的字符串,在.class中就需要30個字節存儲字符串本身,而漢化就是替換掉相應字節存儲區,等長或不等長的字符串。等長只要替換掉就可以,不等長(外文轉漢語)需要更改字符串字節區域的長度屬性。見截圖1,陰影下的是十個漢字所占的字節,長度30個字節。紅色框內+紫色框是字節長度00 1E 轉化為十進制正好30。紫色框內在這裡為00,對我們沒有用。而相對於英文替換和漢語替換相似。不過要修改字節長度這個屬性值(字符串長度*3)適應新大小。
注意:一定要保證字符串字節區大小等於其相應長度屬性。
4.解壓存有游戲信息的*.class類。見截圖2。
5.找到相關漢字字節區域。見截圖3陰影所示30字節。
6.在前面a.java文件中寫入你要替換的文本。編譯後,將a.class用Uedit32打開,可以看到漢字亂碼,相應粘貼到游戲的*.class的陰影位置,替換掉原來字節。
7.用winRAR 打開游戲文件,找到修改*.class文件的目錄,采用替換方式,加進修改後的*.class文件。
8. 將修改後的游戲傳到手機裡。可以看到被修改的信息。