我们这篇文章可能只是通过添加一个section来进行修改字符串的内容,其实有了添加段的知识之后,我们可以去给别人的so文件植入恶意代码了,而这段代码我们就可以放到我们新加的段中,然后在利用修改.got和.plt段的信息,干掉别人的so文件还是很简单的。但是呢,这个想法是初级的,我想到了,想必大家也都想到了,那么就有了防范之道了,比如他们对so加密,这会导致我们无法分析so文件了。那谈何修改so文件呢?或者是对so文件进行校验,一旦修改了,就不能运行,这些都是防御的方法。但是关于so加密的知识,我后面会详细介绍,所以说防御和逆向是相生相克的,永不停息的战争。
这里我们就算是完成了汉化功能,有的人说?这不是忽悠人吗?这哪是汉化呀。就是修改so中的字符串内容呀。但是这里我说道了一个添加新段的方法,这个才是本文的核心,如果都能添加段了,那么替换中文又有何难呢?不过从这篇文章的篇幅来看,就知道这里的知识点真的很多?而且我可能还有遗漏的地方,下面就来总结一下我们这篇文章的思路把:
思路:
1、我们需要修改so文件中的字符串从而达到汉化效果,但是在在这个过程中我可能会遇到一些问题,就是我们修改的字符串的长度和修改之后的字符串的长度,因为我们要秉承着修改之后其他部分内容的偏移地址不能发生变化的原则,所以当要修改的字符串的长度大于源字符串的长度的话,我们就要做一些操作了,这里我们可以观察so中有没有空地,如果有空地而且空地的大小够用的话,那么问题就简单了,如果没有空地的话,那么就引出了我们今天的核心内容,自己加段。
2、在加一个段的时候,我们需要注意的哪些问题和具体步骤上面也都说了。我们还是遵照一个原则就是修改之后不能影响之前的内容的偏移值。所以就在文件的末尾添加,然后构造一个Section header,和追加一个空白的section即可。
3、修改完之后的so,我们需要校验一下,用readelf工具进行查看添加的段信息,或者IDA也是可以的。
技术点:
1、对elf文件的格式有了深刻的了解
2、对内存映像的概念有了深刻的了解
3、C语言中的字符串的指针如何修改
4、IDA工具的初步使用
5、.got和.plt段对hook的过程的作用
有了这篇文章的讲述,我们汉化一个游戏的话,那是轻松的话,而且汉化游戏也是一个赚钱之道。本人只是为了研究,并没有尽力去搞这些,所以就留个后人去赚大钱吧。其实说到最后,这篇文章主要介绍了如何在so中添加一个段,这个用处还是很大的,其实我们看了代码之后可以知道,我们只需要将段名和段的大小当做参数抽取出来的话,那么这个就是一个小工具了,输入:需要修改的so,新加的段名,新加的段的大小,输出就是修改之后的so文件了。后面我会继续分享逆向的相关知识,下一篇会介绍如何动态调试smail/dex/so。尽情期待~~
PS: 关注微信,最新Android技术实时推送