漢化修改so文件心得篇一(帶偏移修改)

這篇教程是安智論壇的一篇技術筆記的分享,By布加迪20,原帖地址在:http://bbs.anzhi.com/thread-9130314-1-1.html。

我以前對so的直接修改比較少,仔細的看了一遍,並跟着模仿,現在分享出來,一起交流。


修改對象
浮游生物2:孢子的世界_Ver1.0.1.1

過程

在修改so裏面字符串的過程中,特別是在做漢化時,由於漢字佔用空間比較大,所以增加長度是比較常見的。

我們以<孢子的世界>爲例,來淺顯的探討一下so增加字符串長度的方法。

用WinHex打開程序唯一的so文件:libcocos2dcpp.so,搜索文本“START”,定位到如下圖:

程序對應的界面顯示:



我們今天就試着將“START”增加修改爲“STARTS”。

通過觀察發現,“START”後面的字符“Most Depth:”中間有一個空格,正好可以利用它,

先把“Most Depth:”擠一擠讓它變成“MostDepth:”,修改的結果如下:


這樣“START”後面就多出填充一個字母的位置了,添加“S”,如下圖:


修改之後,回編其實是打不開的,因爲“Most Depth:”的開始偏移位置從 004EEA07->004EEA08 ,

程序打開會出錯,具體的原理不清楚,見引用:

這個時候可以注意到,DAY的偏移並沒有改變,但是score的偏移變了,字符串是不能得到正常調用的。因此需要修改對應的調用偏移。但是arm程序對應的基地址我是真的沒找到,所以無法計算出對應的調用偏移,也沒有找到相應的工具。這裏有一個相對簡單的方法,我們注意到arm程序當中有一個特點,就是對應的字符串並非是在數據段直接調用的,而是通過一個指針指向數據段。我們現在要做的就是找到指針,並修改。(http://bbs.anzhi.com/thread-6097570-1-1.html)

IDA打開原來的so文件,搜索“Most Depth:”



用開始偏移004EEA07-0x198112=3568F5 即程序調用“Most Depth:”的指針是F56835(反序,原理不清楚),

而我們修改之後004EEA08-0x198112=3568F6,所以需要用WinHex將調用字符的指針F56835修改爲F66835,

搜索十六進制碼“F56835”直接修改,如下圖:


這樣回編、安裝之後即看到效果。


相關的下載
鏈接: http://pan.baidu.com/s/1mgiLeqs 密碼: qa7t

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