图/文 听鬼哥说故事
---------------------------------------------分割线--------------------------------------------
这篇文章也是前段时间的文章,最近这个系列的so分析刚好可以做为一个实例教程,所以就补充拿回来了。
前四篇没看的,请继续关注博客,看完前面四篇。
趁热打铁,加深对so的分析过程,于是就有了这篇文章的补充························
另,此文章需要对android反编译逆向有一定基础,简单了解so的作用,有任何疑惑,可去群里和论坛或自行google搜索解决。
文章受www.pd521.com 站长邀请,首发在其论坛,大家可以过去关注,很多基础资料,方便新手学习
请大家自己动手去练习!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---------------------------------------------分割线--------------------------------------------
以TTX连萌来多层次分析游戏破解
这里只是摘取so部分过来给大家看,原文详细链接:
http://blog.csdn.net/guiguzi1110/article/details/40586339
0x1:直接修改金币
通过OnBillingFinish()方法
我们进入到这个PopStar查看:
当然,这个类里面还有很多方法,很多支持破解的方法,如:
定义购买金币数量的,即购买成功后增加的数量。等等。。。
长话短说,咱们看到PopStar.nativeAddCoin方法后,确定是一个native方法,那么我们找到上文
System.loadLibrary("xinxin");
用IDA加载libxinxin.so,然后定位到nativeAddCoin方法.
现在大家多数用的大佬的那个IDA,带F5的,那么我们直接f5
查看到这里的方法,useGameCoin方法。打开这个方法查看:
这里有我加的注释,很清晰的,看不明白的,F5一下也就知道了。
因为getIntegerForKey,返回值为R0,然后往下第二行代码,R0=R0+R6,所以我们关键是在这里修改R0,即金币数量
Hex查看一下二进制,这里为Thumb指令,那么我们可以操作局限性也很高了。
所以,这里提供一个思路,大家可以寻找更加简便的方法。
即,BL getIntegerForKey,我们直接复制R0一个数值,然后在下面Adds R0,R0,R6这里,直接对R0逻辑左移一下,即LSL一下,将其数值变大。
因为第一个BL是4个字节,我们直接修改 00 00 09 20 ,即Movs R0,R0 代表没有任何操作,09 20是将数字9赋值给R0
然后ADDs那一行,有两个字节,直接改为 00 04,即 LSLS R0,R0,#0x10
这样,我们即完成了对金币数量的赋值,如下图:
然后,我们在16进制下修改,选用010Editor或UE,ctrl + g,进行地址跳转,寻找到我们在IDA修改的地址,按照上文修改,保存,替换,回编译。
注释:: int a=9 ; a=a<<0x10; 即金币锁定为589824
这里需要说明的是,这个方法何时被调用,即才能激活我们对金币的赋值呢?
直接在IDA里面对这个方法按下x键,查看调用,有5处。那么应该很容易被激活。
红色标注的,是使用金币的道具,按照我们看到方法被调用的地方,这里被调用了,然后金币数量即我们定义的。
0x2:修改短信
这里不多说了,根据系统发送短信函数进行查找修改,替换短信内容,替换短信发送人即可。
我直接使用hook的方式替换的,比较省事了。。
相关代码不难,看完我前面几篇hook java的文章的同学,应该很容易能够写出来代码,这里不再多写,有兴趣,自己动手去。
文档和相关附件:
|