【饥饿鲨 进化】Android游戏 完美破解流程分析记录
本帖最后由 liye1320 于 2015-8-13 14:13 编辑原始Apk文件(来自爱游戏):http://pan.baidu.com/s/1mgJ4fHI
破解工具:Android Killer 等等等
其他说明: 1. 本文适合初学者,破解过程中没有高级的技术手段,都是常规分析及破解。
2. 破解过程中,还区分了有SIM卡,无SIM卡(平板),是否联网等情况,移动联通电信区分待定(欢迎留言)。
回帖问题反馈:
1.有人说失效了,我上面提供的是原始apk,未破解的,破解的在原创发布区http://www.52pojie.cn/thread-400016-1-1.html
2.@淡然出尘 大神 提到有二次打包校验,目前我测试了平板和手机,也测试了一段时间了,暂时没有发现呢。请大家也测试下。
0x01 游戏界面
0x02 寻找关键位置
寻找关键位置是一个可以完全靠经验积累迅速完成的工作,新手没经验的话也可以参考我的另外一篇文章从界面开始找关键位置http://www.52pojie.cn/thread-392856-1-3.html。
下面是常见的 支付相关的关键函数:
(爱游戏)
pay
paySuccess
payFailed
payCancel
doBilling
onBillingSuccess
onBillingFail
onUserOperCancel
onBillingFinish (移动MM的支付方式)
onresult()
onActivityResult
由于这个游戏是爱游戏内购,所以我们直接搜索paySuccess,结果如图:
第一条带有abstract,是抽象函数,一般都是空的,可以直接忽略。那么直接进入第二条,代码如图:
这样关键位置就找到了。
0x03 破解内购,适用于所有情况
payCancelpayFailedpaySuccess
这三个函数的意思很明确,支付取消,支付失败,支付成功。
一般直接交换函数名,比如说payFailed和paySuccess的函数名互换,那么支付失败后,调用的其实是支付成功的代码。但是如果他们参数不一样,就不能直接换函数名了,这种情况也是经常有的。
这时候,我们可以稍微分析下paySuccess的代码,把关键代码拷贝过去,越少越好,拷贝代码需要很仔细。
稍微分析一下,我们发现,paySuccess和payCancelpayFailed分别调用的是 Ourpalm_Statics.PaymentSuccess()和Ourpalm_Statics.PaymentFail(),那么我们把Ourpalm_Statics.PaymentFail()换成Ourpalm_Statics.PaymentSuccess()即可。
paySuccess下面还开启了一个线程,如图,我们先不管,看看破解是否完成,失败了的话,我们再把它拷贝到payCancelpayFailed中。
测试,可以成功购买!说明破解是有效果的。平板和移动SIM卡手机上均测试成功。
但是,发现2个问题:
1.如果设备是联网状态,购买的时候,会有相当长的一段验证时间,虽然最后还是会成功,但是总感觉不好。
2.对于有SIM卡的手机,点击购买的时候会出现支付框,需要点击支付或者取消支付才会支付成功,虽然最后还是会成功,但是总感觉不好。
下面我们就解决这2个破解瑕疵问题!
0x04 完美破解,去掉验证过程
经测试,这个验证时间是在设备联网的时候才出现的,所以我们有足够的理由推测,让设备判断网络不通,则可达到目的。可能有人想直接去掉网络权限,但是之前发现,很多app如果去掉了联网权限和读取设备信息的权限,app就直接崩溃了,所以我不推荐在修改配置文件的时候把联网权限去掉,当然,个别app可以这样做。
Android判断网络环境都是调用的 ConnectivityManager 所以我们搜索这个函数,得到结果如图:
发现结果太多了,完全无从下手。这里可以慢慢分析推测,但是我们还可以想想在调用支付函数的那块,程序究竟做了什么。
我们通过paySuccess所在的文件,找到了下面这里:
基本所有的支付相关的代码都在这里了,我们看看这个.java文件中,都有些什么函数,很快可以发现下面这个:
这里就好办了,我们直接让函数NetworkIsAvailable()返回false,让设备觉得网络不可用。如图:
重新编译,安装,果然发现不论联网还是不联网,现在都是秒付成功!
0x05 完美破解,去掉支付框
这种情况是在有SIM卡的手机上出现的,支付框弹出,是因为走了正确的支付流程,为了不让它弹出来,我们需要修改流程。查看对应的代码,如图:
我们看 EgamePay.pay,这个是要进入正确的支付流程了,我们进入到里面看看:
破解,无非就是让app走我们自己的流程,达到最后走向支付成功的地方,我们已经修改了payFailed为支付成功,那么这里沿着箭头的方向,直接让其跳到最后调用payFailed,不就可以了吗,我们试试。
重新编译,安装运行,购买道具,讨厌的支付框没有了,购买及成功,秒付。这样,这个问题就解决了。
0x06 修改AndroidManifest.xml配置文件
现在,我一般,只去掉,发短信,打电话,定位,修改联网状态等权限。
像读手机信息,联网,这2个权限,我一般都不会去掉,因为经历了无数次的崩溃呢,有些手机崩溃,有些手机不崩。
0x07 其他相关
如果App支付方式区分了网络制式,即,移动,联通,电信有不同的支付方式,我们可以修改代码,让其总是判断为移动,或者其他。
关键函数为:getSimState()
0x08 结束
到此,这个APP就破解完美了,支持无sim卡(平板),手机,无需联网,秒付,无支付弹窗。
Tab123 发表于 2015-8-28 12:27
0x05 完美破解,去掉支付框
这一步讲得不明不白
做破解,最好还是有一点软件开发的基础比较好,这样有软件开发的逻辑思维,就好理解了。
第三步中,已经让支付会出现的三种结果(支付取消,支付失败,支付成功)都变为了支付成功。
那么,我们在弹出支付框之前,让支付函数失败,就行了,这步就是这个意思。
一般的调用某个功能函数之前,都会有很多条件判断,这里用的就是这个条件,让它能够失败。 {:301_1008:} 额ipad能用吗
虽然不玩,支持原创 很喜欢这个,谢了 看似不错,收藏 还是支付失败,不能购买 我记得是验证的啊?二次打包的验证 牛逼的楼主甚好甚好 求发破解软件,不能用了失效了