汉化修改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”,定位到如下图:汉化修改so文件心得篇一(带偏移修改)_第1张图片

程序对应的界面显示:

汉化修改so文件心得篇一(带偏移修改)_第2张图片


我们今天就试着将“START”增加修改为“STARTS”。

通过观察发现,“START”后面的字符“Most Depth:”中间有一个空格,正好可以利用它,

先把“Most Depth:”挤一挤让它变成“MostDepth:”,修改的结果如下:

汉化修改so文件心得篇一(带偏移修改)_第3张图片


这样“START”后面就多出填充一个字母的位置了,添加“S”,如下图:


修改之后,回编其实是打不开的,因为“Most Depth:”的开始偏移位置从 004EEA07->004EEA08 ,

程序打开会出错,具体的原理不清楚,见引用:

这个时候可以注意到,DAY的偏移并没有改变,但是score的偏移变了,字符串是不能得到正常调用的。因此需要修改对应的调用偏移。但是arm程序对应的基地址我是真的没找到,所以无法计算出对应的调用偏移,也没有找到相应的工具。这里有一个相对简单的方法,我们注意到arm程序当中有一个特点,就是对应的字符串并非是在数据段直接调用的,而是通过一个指针指向数据段。我们现在要做的就是找到指针,并修改。(http://bbs.anzhi.com/thread-6097570-1-1.html)

IDA打开原来的so文件,搜索“Most Depth:”

汉化修改so文件心得篇一(带偏移修改)_第4张图片

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

而我们修改之后004EEA08-0x198112=3568F6,所以需要用WinHex将调用字符的指针F56835修改为F66835,

搜索十六进制码“F56835”直接修改,如下图:

汉化修改so文件心得篇一(带偏移修改)_第5张图片


这样回编、安装之后即看到效果。

汉化修改so文件心得篇一(带偏移修改)_第6张图片


相关的下载
链接: http://pan.baidu.com/s/1mgiLeqs 密码: qa7t

你可能感兴趣的:(技术杂烩)