so文件漢化心得【整理】

這篇是我對 @布加迪20 在安智寫的一篇<漢化so文件的心得>中的技術附件做的簡潔性整理,原來的看起來不是很方便。一起分享學習..
正文

SO文件漢化心得

                                                 --By布加迪20   2014/08

       我自己也是新手,研究了好久,網上也找不到相關教程,所以決定寫一個比較詳細的教程,教程是關於漢化so文件時出現的字符串長度不夠的問題,後面還有做字庫的簡單教程,相關文件都在文章結尾處,如果出現排版問題,建議在手機上用WPS看,選適應手機就好了。

漢化so修改偏移

       IDA在電腦上用,HE是安卓上的十六進制編輯器HexEditor。以“浮游生物2:孢子的世界”(版本1.0.1.1)爲例。手機上用HE打開libcocos2dcpp.so,找到“MostDepth:"如圖:

   

(libcocos2scope.so可以用Xplore管理器導出,長按安裝包,選以zip方式打開,在lib裏)記下M的位置爲004eea07。

“START”和“Most Depth:”對應遊戲中位置,如下圖:

可以看到,“Most Depth:"前面的“START"要漢化成“開始”位置不夠(一個漢字抵三個字母,每個詞前後都要有00隔開),而後面的“Most Depth:"可以改成“MostDepth:"也可以漢化爲“最深處:”,也就可以在“START"後面移出一個空格,正好可以漢化爲“開始”,如圖:

記下這時M的位置爲004eea08。但是這時侯“START”偏移沒變,“MostDepth:"的偏移變了,遊戲裏是顯示不出的:

以上在手機上完成,電腦上可以用其它十六進制編輯器,推薦UE32。
這時候就需要用到IDA,用IDA打開電腦上的so文件,在“查找”裏選“文本”,輸入“Most Depth:"(我電腦裏的還是原文件),找到這裏

記下198112 。然後打開一個十六進制計算器,用之前“Most Depth:"裏M的位置減去198112,即“4eea07-198112”,得到3568f5,這時候要用HE在so文件裏搜索f56835(要反過來),找到了。

我們要改的就是這個,之後用改過的“MostDepth:"裏M的位置減198112,即“4eea08-198112",得3568f6,之後要做的就是把“f56835"改成“f66835",如圖:

接下來保存文件,打開遊戲測試吧

可以看到,“MostDepth:"已經顯示出來了。

做字體庫漢化

        當然,要漢化這個遊戲還需要做字庫,以下附簡單教程。字庫我是用hiero做的。遊戲裏的字庫都在assests/fonts裏:

         

      有7種字,每種都要做一個,打開hiero,以segoe_ui-16_0.png和segoe_ui-16.fnt爲例:

    

選微軟雅黑(我覺得和遊戲字體挺像),在右邊的“Sample Text"裏輸入“開始”,並選定字號爲16,選“Glyph cache",把寬高都設爲2048(方便以後字多了可以一張圖解決)。

軟件有點問題,所以Rendering裏沒有顯示字體,不過不管它,點File→Save BMF on files (text)...,文件名就寫“segoe_ui-16_0.fnt",點保存就會生成兩個文件“segoe_ui-16_0.fnt”和“segoe_ui-16_0.png",注意之後把“segoe_ui-16_0.fnt”改成“segoe_ui-16.fnt”。

其他字體以相同的方式生成,然後替換assests/fonts裏的字體(教程裏的只增加了“開始”兩個字)。然後用HE打開so文件,我們剛剛在“START"後面增加了一個空格,可以改成“開始”了,用HE搜索到“START ”,並查到“開始”的十六進制爲“e5 bc 80 e5 a7 8b”,替換掉原來的。

打開遊戲看看效果:

可以看到漢化成功了“開始”。

藉助“空位”漢化so

        這是我自己的漢化心得,拿出來分享一下,這個教程只是簡單介紹一下增加字符串長度的一種方法,適用於前後有多餘的空位(通常是漢化其它語句留下來的),不過要是前後都沒有空位,就要用另一種方法

這種方法其實也是修改偏移,看這裏的字符串:

一大堆擠在一起,漢化成中文位置根本不夠,但是我們可以看到so文件裏有很多空白的地方,比如這裏:

看這裏有這麼大一片空白,足夠我們改了!隨便從哪裏開始,比如我想把“Game Over”改成“遊戲結束”,


就在把任意位置的空字符串替換成“e6b8b8 e6888f e7bb93 e69d9f”

(別忘了在字庫裏添加新的字,不然會出現兩種情況:1.顯示不出字;2.進遊戲直接卡死。)

接着按照上面的方法把“Game Over”的偏移修改到“遊戲結束”的位置,就可以了。

注意

1、不是哪裏的空白位置都可以改,這個叫空白數據段,通常像這種前後都有字符串而中間空出來的一般就是了。(好像有尋找exe或dll數據段位置的工具,但是so的好像沒有,所以不清楚是不是空白數據段時,可以自己修改試試)

2、每一次修改一定記得備份,改這種十六進制的東西特別容易出錯,如果沒備份的話,後果很嚴重。。。。。。


有關下載

下面是一些相關工具的鏈接,很多版本都低了,不過也沒什麼影響

浮游生物:孢子的世界

http://pan.baidu.com/share/link?shareid=3428872989&uk=3324813120

Hex editor

http://pan.baidu.com/share/link?shareid=3434074993&uk=3324813120

IDA

http://pan.baidu.com/share/link?shareid=3454802130&uk=3324813120

Hiero

http://pan.baidu.com/share/link?shareid=3495231926&uk=3324813120

Hiero(已有java環境的直接用)

http://pan.baidu.com/share/link?shareid=3510464528&uk=3324813120

Xplore文件管理器

http://pan.baidu.com/share/link?shareid=3543020754&uk=3324813120


原文完。謝謝所有技術的無私分享,交流纔有有進步...


發佈了28 篇原創文章 · 獲贊 9 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章