前言
自己的锅自己背。。。
当年第一次破解成功的喜悦,现在虽然依然无法忘怀但是却不再有当时的自豪和骄傲,甚至看到曾经的弯路,恨不得把当时的自己拉过来,抽一耳光子:
“不好好学习就罢了,写个教程也就算了,问题你的方法都不对还在那里瞎(粗鄙之语)扯”
正文
支付宝,找9000 ,微信,找resp (为了尽可能多的匹配,尽量搜的短一些,应该是两个,respCode 和respMsg ),当然什么成功 、失败 、取消 之类的词就不赘述了。
定位判断
搜索9000。
只有一处,(其他的都是行数(.line )或是字符串)
点进去,很短,转java看一下流程。
发现把字符串resultStatus 和9000 进行了比较,
尝试
改流程就是把不对的过程跳过去。实现支付正确走的流程。
搜索9000 就是因为支付宝的正确调用代码就是这玩意(都被玩烂了。。。。)
把判断跳转if-xxx 注释了,按照9000 代码里的流程(即给resultStatus 赋值0)。
没错很奇怪,这种判断我也是第一次见到。不过改就完了。。。
按照下图改完,保存后转java,发现0 没了。。。
因为被反编译引擎直接给翻译到后面的关键调用里了。。。
好了这个不是我们该关心的。。。
编译保存
完成
购买,点击支付,点击取消。
回合结束
更进一步(思考题)
- 打开支付界面自动破解
- 点击支付(无论是支付宝还是微信)无弹窗自动破解
咳咳,其实我之前实现过,但是这个懒得看了
思路:
1.进入支付解锁提示页面 -2.点击支付按钮 -3.生成orderID -4.请求微信/支付宝支付 -5.监听返回参数 -(假设是真的付过钱了)-6.微信返回succ /支付宝返回9000 -7.执行正确支付的操作
破解的流程是在第6步对代码流程进行了更改,把判断去掉,假装返回了成功信息。
那么是不是(就是有!只不过语气委婉)有可能把流程改成
进入支付解锁提示页面 -生成orderID -执行正确支付的操作
或是
进入支付解锁提示页面 -点击支付按钮 -生成orderID -执行正确支付的操作
一般来说,支付成功解锁的代码都会封装在一个方法里,简单地说就是生成orderID后,直接调用成功的代码(比如文中例子调用u3d的接口MainActivity . CallUnity() )那我在哪里调用不是调用?为啥不能我自己调用?
生成orderID直接调用成功代码(这里不需要该参数,大部分软件因为内购不唯一一般都需要货物ID进行区分)
|