大富翁4Fun游戏短信内购破解思路
本帖最后由 hafeng45 于 2019-3-19 21:47 编辑非常荣幸赶上了上周论坛开放注册,弄了个论坛帐号,跟着帖子中的大佬认真学习安卓app破解。正好手机上有个大富翁4Fun的app,这个是n年前的游戏了,原本只是想下载来怀旧的,没想到里面有移动短信内购,看着不爽,正好拿来练练手。
1.破解前先找到我们要查找的短信支付相关字符串。先把手机调飞行模式,或者用安全软件把该游戏的发送短信权限屏蔽,这一步很重要,免得接下来造成财产损失!然后手机上运行游戏,打开游戏的内购,这里的内购分两种,一种是通过游戏内可以挣到的元宝来购买,一种是用短信支付购买。前者随便用个八门神器就能搞定,本文不准备介绍;后者需要发送短信支付(我的rmb啊!),就拿它开刀!随便点开一个“豪小子角色”后面的“购买”按钮,点击“确定”。随便输入一串数字,点击“获取验证码”,此时显示 “请输入有效的移动手机号码”,好记住这几个字!
2.用androidkiller反编译游戏。尝试搜索“请输入有效的移动手机号码”字符串,搜索成功!继续搜索该字符串对应的id,也就是红圈处的“gc_billing_invalid_china_mobile_card”。
3. 下图中红圈编号1、2、4从文件名看,应该是资源ID编号有关的文件,不是重点,先忽略;画圈编号3看文件名cn.cmgame.billing.ui.a.smali,应该是跟游戏界面响应有关的代码,尝试打开它!
4.这时候来到了a.smali文件,接着点击红圈图标反编译:
5. 反编译后我们来到了a.class文件,红圈1就是是我们要查找的“请输入有效的移动手机号码”字符串在代码中的位置,我们接下来在代码附近看看有什么线索发现。往上看到红圈2处,此处代码和红圈1处类似,通过工程搜索可知,红圈2是“未找到手机号码,请重试!”字符串。红圈1和红圈2这两个地方都位于函数cn.cmgame.billing.ui.a.bg()函数内,可以猜想,这个bg()函数,很有可能就是一个界面判断移动支付是否成功的判断函数。继续往下看几行,看到红圈3处“this.br.onBillingFail(this.bo);” !英文还凑合的伙伴应该可以看出来,这个英文单词可能是一个“支付失败”函数,函数被本类的br成员变量调用。
6. 看看这个br成员变量到底是啥玩意儿。在本界面查找到br成员变量,发现他是一个GameInterface.BillingCallback()类型的的成变量,从名称大概可以猜测,这可能是一个移动支付有关的接口!点击红圈处横线,跳转到GameInterface.class中。
7.这时候我们来到了GameInterface.class中,看到红圈处3个地方,说明这个GameInterface.BillingCallback是一个interface接口,里面有三个函数onBillingFail、onBillingSuccess、onUserOperCancel,这三个函数从字面意思分析应该是分别对应支付失败、支付成功、支付取消。因为是interface接口,所以肯定要在其他某些地方进行接口实现,我们再联想到我们之前第5点a.class中的“this.br.onBillingFail(this.bo);”可以看出来,在a.class中的br成员变量实现了该接口。
8. 所以接下来我们回到a.class中找到br成员变量的定义,发现br确实通过匿名内部类的形式实现了GameInterface.BillingCallback接口。其中onBillingFail和onBillingSuccess函数参数、返回值都一样,只有名字不同,所以我们下一步的思路就是打开br成员变量所在的mali文件,直接用onBillingSuccess函数体中的smali代码替换掉onBillingFail函数smali代码,具体替换过程就不说了, br成员变量所在的smali文件即a$11.smali,$是匿名内部类的意思。
9. 经过上一步的改动,onBillingFail()函数实际上已经变成了onBillingSuccess函数,还记得第5步中提到的bg()函数吗,接下来,我们只要在bg()函数开始处加一个调用onBillingFail或者onBillingSuccess函数并直接返回就大功告成了。开始动手!回到br()函数所在的a.smali文件中,找到bg()函数开始标记,并把后面的onBillingFail();return;对应的smali代码复制黏贴过来。
10. 以上所有步骤完成后记得保存所有修改->编译->安装,回到游戏,点击购买,输不输手机号码都行,直接点确认,购买成功!
应坛友要求附上未破解游戏下载链接:https://pan.baidu.com/s/1fgYRQ2i3rn3Ef8IhpNMhkQ 提取码:3kty
破解工具为AndroidKiller,在论坛爱盘里有:https://down.52pojie.cn/Tools/An ... idKiller_v1.3.1.zip
涛之雨 发表于 2019-3-19 08:00
楼主这个方法有时候会有问题。。。
如果调用的时候传进的参数类型或数量不相同
直接就无法保存了。。。
是的。
不过破解的关键其实就是找到内购函数位置,再深入一点的话,摸清大概的内购调用过程。这些如果剖析明白了,具体操作起来的话可以有很多种方法,不拘泥于文章所提方法。只是因为这个游戏刚好参数类型和数量包括返回值都一样,所以这个直接复制内购成功函数的方法比较简单粗暴,新手也比较容易上手并看的懂。
假如参数的类型和返回数量不同,问题也不大,内购成功或者失败势必要有一个判断的位置,不改内购函数你可以改判断流程。再不行的话既然内购函数都暴露在你面前了,只要对比一下内购成功和内购失败两个函数的实现的不同地方,大不了直接smaili重写。 感谢分享{:1_921:} 感谢分享! 学习了,感谢大佬,一会去试一下 待会去试下,谢谢分享 很好,多谢交流 多谢交流 有空去试试 ,正好下载了这个游戏 感谢分享