本教程通过实战的方式详细分析内购PJ的原理,让你对内购PJ有更深的理解,从而遇到各种各样的游戏都可以自行分析并PJ。

通过本教程的学习可以达到以下目标:
1.明白内购PJ是什么
2.了解内购PJ分类
3.了解内购PJ原理
4.通过内购PJ游戏
三、内购PJ的分类
按照PJ方法可分为:
1.将支付成功的代码复制并替换掉支付失败的代码
2.将支付失败的跳转改成支付成功的跳转
3.删除支付成功的判断
按照PJ类型可分为:
1.软件内购PJ
2.游戏内购PJ
四、内购PJ的原理
内购PJ的原理很简单,就是通过反编译修改游戏的支付代码,使其在支付失败或支付取消时直接执行支付成功的代码,从而免费获取游戏货币。
五、实战内购PJ一款游戏在了解了以上知识点后我们就可以进入实战环节了,我将采用详细分析的方式来给大家讲一下内购PJ一款游戏的整个流程,让大家对内购PJ有更深的理解,从而遇到各种各样的游戏都可以自行分析并进行PJ。本次实战的游戏是汤姆猫跑酷,这貌似还是一款联网游戏。
首先,我们从4399游戏盒下载汤姆猫跑酷:

试玩该游戏后我们发现这款游戏支持微信和支付宝购买小炸药:

当点击确认充值后弹出支付界面,取消支付后又弹出取消充值的界面:

通过对游戏的信息收集,我们得知该游戏支持微信和支付宝充值,并且取消支付后会弹出取消充值的界面。那么我们就可以从该游戏的支付宝或微信充值着手,本次实战我打算从支付宝着手。
下面正式开始分析内购PJ的流程:
打开MT管理器并找到游戏安装包,点击查看:

因为游戏的支付代码在dex文件里,而该游戏有多个dex文件,我们不知道支付代码具体在哪一个里面,所以全选该游戏的dex文件:

既然我们想从支付宝着手,那么肯定要知道支付宝的支付成功状态码是多少,这里我直接给你们了:支付宝的支付成功状态码是9000,而9000的十六进制是0x2328,所以我们要搜索0x2328。

得到如下结果:

我们点击名为t2的类进入smali代码界面:

进入后发现0x2328是在a方法里面的,所以我们可以将t2类转为Java文件看一下:

通过对上图的分析又有了新的发现,我们搜索的0x2328在转为Java文件后变成了9000,这足以说明0x2328就是支付成功的状态码。
其次,我们可以看到包含pay_status_success字符串的代码是在else代码块里的,这说明只有当以上if条件都不满足时才会执行支付成功的代码,也就是说当执行else代码块时才会支付成功。
那这不就好办了吗,直接将以上if条件的代码块全替换为else代码块的代码不就行了吗?因为替换后不管你怎么支付都会执行支付成功的代码。

回到smali代码界面
通过150行代码可知148-156行代码是支付成功的代码,将它复制。

通过178行代码可知176-184行代码是支付取消的代码,将支付成功的代码粘贴到这里即可,修改后的代码:

到这里已经PJ成功了,当取消支付时就会执行支付成功的代码,从而欺骗游戏的支付系统,获得游戏内的付费物品。
暂无评论内容