和咪咕、支付宝、微信、4399等第三方支付SDK一样,
游道易的支付SDK也应该是单独部门开发的,存在一定的判断漏洞。
前面的应该都耳熟能详了,比如说个9000稍微有点经验的朋友都知道是哪家的,
游道易的内购我做了一下尝试,本来是尝试破解一个游戏的,结果发现是游道易支付SDK的通用破解。分享一下吧。
扔个图标(斜眼笑.gif)
分析过程(尝试)
以“滑雪大冒险2”为例
华为版(其他手机平台的版本应该类似)比较特别,等一下就知道了。
定位关键判断
如上图所示,在酷安版搜索关键词“购买”(本来想找到“购买失败”字样的,但是没有),
仅有如图所示三个类中有,看情况分析应该是第二处,
点击进入,转java查看流程,如上图所示,发现一共有三类:
注:下面的支付成功其实是无效的。。。
因为在判断errorCode后赋值了3因此永远不可能执行。
把成功前面的所有判断全部去掉,使转java后成如上图所示的形式,
保存编译签名安装(以下简称打包)后发现除华为版外,官网版和酷安版都破解成功了。
按照惯例,猜测华为版应该是签名验证或是登录错误,导致在支付的SDK调用前就强制返回错误了。
回到刚才的部分转java后看到如果成功,purchased的第一个参数为1,否则为2。
跳转过去,转java看流程,如上图所示,发现判断listener后就调用了另一个方法。
回到smali代码,如图所示在调用前的任意一行插入
const p1,1 #赋值code为1(成功)
转java查看,
打包发现已破解。
观察到路径,xxxxx.sdk.xxx
感觉应该可以作为通用破解方案。
根据测试,目前已发布的所有游戏的所有平台所有版本均可通过这一行赋值破解。
整理思路,得出以下通用破解方案(虽然公司的游戏数量比较少。。。)
通用破解步骤
方案一(一步到位)
优点:一步找到对应位置
缺点:需要复制,不方便记忆
复制:
Lcom/yodo1/android/sdk/helper/Yodo1PayHelper;->purchased(ILjava/lang/String;Lcom/yodo1/android/sdk/helper/ProductData;Lcom/yodo1/android/sdk/constants/PayType;)V
(注:上述代码为一行)
搜索上述代码
任意点击一个,进入后,跳转到选中方法的位置
mt管理器需要先取消选中状态后,再此点击该处才会出现跳转
方法内调用前的任意位置插入赋值语句const p1,1
打包即可
方案二(便于记忆)
(其实和分析的过程一样。提取出来方便不看分析的朋友直接使用)
总结一下
大概就是这样了,公司的游戏全军覆没(仅国内,貌似国外是另一个团队的sdk,对接谷歌的,应该也可以类似的分析吧)
个人认为相比怎么怎么操作,比方法更重要的是分析,毕竟分析会了可以创造方法。
成品的话以一个“滑雪大冒险2(华为版)”作为代表吧(华为版几乎没有广告,不用去23333)
滑雪大冒险2(华为版)破解版
https://taozhiyu.lanzouj.com/ic5w1af
密码:sdk