饥饿鲨破解练习。
本帖最后由 红心J 于 2017-7-14 18:47 编辑破解练手用的,发出来和大家分享一下自己的心路历程。
我这个版本是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的压缩包的对应位置。
用APK改之理重新打开,什么都不动,生成新的APK,安装,进游戏,不闪退了。验证就过掉了。
接下来,就是破解内购了。查考:http://www.52pojie.cn/thread-399992-1-1.html
直接搜 paySuccess 去到下面位置。
打开java源码看看,有 取消,失败,成功3个方法。
接下来,我把取消,失败的代码都删除掉,把成功的代码复制过去。
也就是说,无论我们支付失败,还是取消,都会执行成功的代码。
然后保存,生成,安装游戏,进去看看。
发现破解成功。
效果图如下:
一键技能满级,也是调用上面修改的支付代码的地方,所以一键技能满级也破解成功了。
最后,就是我们在支付时,会弹出支付的窗口。我想把它过掉。
去搜索 pay 这个函数。
如下图蓝色那段,去到那个方法里面。
打开java源码看看,pay函数如下:
有个if判断,里面是调用了 payFailed 这个函数(这个函数的代码我们在上面已经改为成功的代码了)
还有个for 循环,应该就是弹窗的位置。
那么改法很简单,去到smali代码,找到 if 的判断位置。
把 if - eqz改为 if - nez
也就是说,不要出现支付的弹窗,直接让其支付失败,但是我们修改了支付失败的代码,所以就支付成功了。
然后再次安装运行游戏,发现支付没有弹窗,修改成功。
--------------------------------
最后,我安装到我的手机上,发现连网的状态下,依然出现闪退,我关掉网络,打开游戏,虽然不出现闪退,可游戏一直运行不起。
关掉网络,游戏进不去一直黑屏,我也不清楚为什么。但在bluestacks上运行没有任何问题。
--------------------------------
还有一点:就是解锁特殊鲨鱼,这里我没有搞定。搜索关键字也没有找到相应的代码位置。后面我会继续琢磨,搞定了就补上过程。
样本(没有去掉验证),成品(只修改了x86的,要想在手机上玩,修改下另一个文件夹的so):
链接: https://pan.baidu.com/s/1hs68kyo 密码: 1tjv
---------------------------------------------------------------
补充(解决手机上玩不了的问题):想在手机上用自己破解的这个游戏的话,过签名验证的时候,就应该修改armeabi-v7a 中的 libourpalm_sdk_a.so。
方法与修改x86里面的差不多,ida 打开libourpalm_sdk_a.so,找到runsign函数。
区别是,这是arm指令,在2个check函数那里,需要修改的就是把地址: 000244c4 和 000244ce 处的代码 换成 00 00 00 00
而 00 00 对应的代码是 movs r0,r0 它是一条空语句,相当于X86系统的NOP。
再用ida看看修改的结果
嗯,这里就大功告成了。
最后放回到 armeabi-v7a 文件夹中,再用改之理编译一下。拿到手机上安装试一试,发现游戏不黑屏,可以玩了,破解成功。
附上一张手机上的截图。
-----------------------------------------------------
最后,需要注意的是,要在手机上运行我们破解的这个游戏,需要修改 armeabi-v7a 里面的.so文件。。我前面修改的是x86里面的,所以在手机上无法运行。
我开始以为连网的时候还会服务器验证,不然安装在手机上游戏为什么闪退了。后来发现是我没有修改armeabi-v7a 里面的.so文件。
程序在运行的时候是去加载不同平台对应的.so文件,所以要修改对应的.so文件才可以。 很好很强大 SharsDela 发表于 2017-7-14 16:50
手机上不应该重新修改armeabi-v7a里的so吗?
谢谢谢谢,我试试。 好帖子 受益了 时光深存少年梦 发表于 2017-7-14 14:55
好帖子 受益了
谢谢谢谢。 厉害了,楼主好强啊 楼主很强势请问还收徒不! 学习了感谢 手机上不应该重新修改armeabi-v7a里的so吗? 谢谢分享,支持一下