我以前對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