針對無資源檔、字串硬編碼在 class 檔中的遊戲,透過反編譯器、十六進制編輯器直接修改常數池字串,實現漢化或換皮。流程標準化,工具鏈輕量。
工具準備
- Java 反編譯器(JD-GUI、Fernflower)
- JDK(編譯測試用)
- WinRAR(解壓 JAR)
- UltraEdit / 010 Editor(十六進制編輯)
Class 檔字串儲存格式
- UTF-8 修改版:
[長度高位][長度低位][字節序列]
- 中文字元佔 3 位元組 → 10 字 = 30 字節,長度欄位為
0x001E
- 修改時須同步更新長度欄位,否則 JVM 校驗失敗
漢化操作步驟
- 建立測試類別
a.java,靜態區塊放入目標中文字串,編譯得 a.class。
- 用 WinRAR 解壓目標 JAR,用 UltraEdit 開啟含目標字串的
.class,定位十六進制字串區塊(右側可見亂碼)。
- 用 UltraEdit 開啟
a.class,複製其字串字節區塊(含正確長度)。
- 覆蓋回目標
.class 對應位置,存檔。
- WinRAR 以「取代」模式將修改後的
.class 放回 JAR。
- 實機測試驗證。

注意事項
- 僅適用於未加密、未混淆的 class 檔。
- 字串長度變更時,必須修正常數池長度欄位,且不影響後續常數池項目偏移(等長替換最安全)。
- 若遊戲有簽名,修改後需重新簽名。
此技術亦可用於替換公司名稱、版權資訊等「換皮」需求。