记一个游戏内购破解

破解练手用的,发出来和大家分享一下自己的心路历程。

我这个版本是3.3.0.3的(比较旧的版本)。
“”
首先,这个版本的有签名验证。
怎么发现的,就是直接 IDE改之理 反编译,然后什么都不改,生成APK,安装游戏,打开游戏后,游戏闪退。
至于为什么是本地验证,断网,打开这个游戏,依然闪退,猜测是本地验证。
下面开始找验证的地方。
由于游戏进入的一瞬间就闪退了,那么从入口位置开始找。
在 AndroidManifest.xml文件中,找到下面这个 :com.fgol.IAPInterface
“”

去到 smali/com/fgol/IAPInterface 中
“”

查看 IAPInterface 中的 onCreate()函数。
“”

闪退的问题出在 init() 函数中,至于为什么,动态调试跟进就能找到(动态调试的方法我在另一篇文章里写了)。
也可以看看这个帖子:http://www.52pojie.cn/thread-506140-1-1.html
“”

init()函数中的,RunSign 这里出现了问题。
“”
点RunSign看看,发现是native函数。
“”
那么接下来,搜索 : loadLibrary,要去到 Ourpalm_Entry.smali
“”
来到这里
“”
对应的java源码。
“”
所以应该是 ourpalr_sdk_a.so这个文件。
来找找这个文件,把 源APK改成后缀为 .rar 的文件,解压出了,去到lib文件夹里。
“”
这里有2个文件夹。
armeabi-v7a
x86
而且2个文件夹里面放的so文件都相同。
而我选择改了x86里面的 libourpalm_sdk_a.so 文件。
至于这2个文件夹有什么不一样,参考这篇文章:http://blog.csdn.net/loveyaozu/article/details/51205820
“”
“”

然后,上ida打开 libourpalm_sdk_a.so,在左侧搜索:runsign,去到下面这个图的位置。
“”
发现有2个check函数的调用。
我用的 UltraEdit 打开libourpalm_sdk_a.so,找到地址: 0x000302DA
“”

“”

如上图: E8 21 FD FF FF 对应第一个check函数,我把它nop掉, nop 对应 16进制代码为 90,也就是给它改为 90.
“”

这是第二个的check函数,如同上面一样 nop掉。
“”

“”

改为90
“”
修改成功后,保存退出。
我这里用的UltraEdit 去修改,然后看到文件夹下多了个文件(红框那个),这是对libourpalm_sdk_a.so文件没修改之前的一个备份。
“”
然后检查下我们的修改是否成功了。
用IDA打开 libourpalm_sdk_a.so,到修改的位置去,看到2段nop代码。这就修改成功了。
“”
然后把修改的libourpalm_sdk_a.so放回到之前的 .rar的压缩包的对应位置。
“”
在ide改之理重新打开,什么都不动,生成新的APK,安装,进游戏,不闪退了。验证就过掉了。
接下来,就是破解内购了。
直接搜 paySuccess 去到下面位置。
“”
打开java源码看看,有 取消,失败,成功3个方法。
“”
接下来,我把取消,失败的代码都删除掉,把成功的代码复制过去。
也就是说,无论我们支付失败,还是取消,都会执行成功的代码。
然后保存,生成,安装游戏,进去看看。
发现破解成功。
效果图如下:
“”

“”

一键技能满级,也是调用上面修改的支付代码的地方,所以一键技能满级也破解成功了。
“”

“”
最后,就是我们在支付时,会弹出支付的窗口。我想把它过掉。
去搜索 pay 这个函数。
如下图蓝色那段,去到那个方法里面。
“”
打开java源码看看,pay函数如下:
“”
有个if判断,里面是调用了 payFailed 这个函数(这个函数的代码我们在上面已经改为成功的代码了)
还有个for 循环,应该就是弹窗的位置。
那么改法很简单,去到smali代码,找到 if 的判断位置。
把 if - eqz 改为 if - nez
“”
也就是说,不要出现支付的弹窗,直接让其支付失败,但是我们修改了支付失败的代码,所以就支付成功了。
然后再次安装运行游戏,发现支付没有弹窗,修改成功。


补充:想在手机上用自己破解的这个游戏的话,过签名验证的时候,就应该修改armeabi-v7a 中的 libourpalm_sdk_a.so。
方法与修改xp里面的差不多,ida 打开libourpalm_sdk_a.so,找到runsign函数。
如果要在手机上运行的话。
“”

movs r0,r0 它是一条空语句,相当于X86系统的NOP.
就是填00就行。
把地址: 000244c4 , 000244ce 处的代码 换成 00 00 00 00
“”
然后打开ida看看修改的结果
“”
嗯,这里就大功告成了。
最后放回到 armeabi-v7a 文件夹中,再用改之理编译一下。拿到手机试一试,发现游戏不黑屏,可以玩了,破解成功了。
附上一张手机上的截图。
“”


最后,需要注意的是,要在手机上运行我们破解的这个游戏,需要修改 armeabi-v7a 里面的.so文件。。我前面修改的是x86里面的,所以在手机上无法运行。程序在运行的时候去加载不同平台对应的.so文件,所以要修改对应的.so文件。