Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容) (18)

那么我们就好办了,我们只要获取到最后一个PT_LOAD的p_vaddr的值然后加上这个段的mem_size在做一下页面对其操作就可以得到内存中的末尾了。

关于页面对其的操作,网上有相关的资料,可以去搜一下,这里也不解释了。

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


这里就是0x3EB8+0x14c对0x1000对其操作结果是:0x5000也就是上面我们说的文件末尾值了。


第四、验证结果

好了,上面我就做完了所有的工作,下面就将我们修改之后的so文件保存一下,然后用readelf工具验证一下:

1、验证elf的头部信息中的section变成22了

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


2、验证Section Header

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


最后一个段是我们添加的


3、验证Program Header信息

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


新加的Section能够加载到内存中。


我们同样也可以用IDA进行验证一下:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)



用010Editor查看一下:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


段名位置都是正确的,那么下面我们就来修改字符串吧,因为我们新加的段完全就是一个空白地,想怎么加就怎么加?

下面我们来修改一下字符串:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


0x5010出添加了修改的字符串,那么我还需修改一下指针:

修改之后的指针:0x5010-0xBF4 = 0x441c

倒叙之后就是0x1C44,我们替换一下源字符串的指针,上面说到了是:0x3C14

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


这就改好了,我们这时候可以用IDA进行验证一下:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


可以看到我们修改应该是成功了。

Java版代码下载:

C++版代码下载:


但是最终的验证是集成到Android程序中测试:

测试Demo下载:

Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)


果然成功了。


第五、技术延展

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwgjw.html