【SDK通用内购破解方案】5ri46YGT5piT全版本全平台所有游戏内购

查看 214|回复 10
作者:soyadokio   
前言
和咪咕、支付宝、微信、4399等第三方支付SDK一样,
游道易的支付SDK也应该是单独部门开发的,存在一定的判断漏洞。
前面的应该都耳熟能详了,比如说个9000稍微有点经验的朋友都知道是哪家的,
游道易的内购我做了一下尝试,本来是尝试破解一个游戏的,结果发现是游道易支付SDK的通用破解。分享一下吧。

扔个图标(斜眼笑.gif)
分析过程(尝试)
以“滑雪大冒险2”为例
华为版(其他手机平台的版本应该类似)比较特别,等一下就知道了。
定位关键判断

如上图所示,在酷安版搜索关键词“购买”(本来想找到“购买失败”字样的,但是没有),
仅有如图所示三个类中有,看情况分析应该是第二处,

点击进入,转java查看流程,如上图所示,发现一共有三类:
  • 第一部分为验证支付订单(case 1)
  • 第二部分为支付成功/失败(失败字符串没有展示)(case 2)
  • 第三部分为开始支付(case default)


    注:下面的支付成功其实是无效的。。。
    因为在判断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

  • 打包即可

    方案二(便于记忆)
  • 有点:便于记忆
  • 缺点:相对于上面那个没有上述这么快(其实也还好吧2333)

    (其实和分析的过程一样。提取出来方便不看分析的朋友直接使用)
  • 搜索“购买”
  • 向下翻几行,找到purchased
  • 点击跳转
  • 方法内调用前的任意位置插入赋值语句const p1,1
  • 打包即可

    总结一下
    大概就是这样了,公司的游戏全军覆没(仅国内,貌似国外是另一个团队的sdk,对接谷歌的,应该也可以类似的分析吧)


    个人认为相比怎么怎么操作,比方法更重要的是分析,毕竟分析会了可以创造方法。
    成品的话以一个“滑雪大冒险2(华为版)”作为代表吧(华为版几乎没有广告,不用去23333)

    滑雪大冒险2(华为版)破解版
    https://taozhiyu.lanzouj.com/ic5w1af
    密码:sdk

    华为, 赋值

  • 尕豬i   

    @涛之雨  如果涛哥有空,有两个疑问请教一下:
    从你的截图中筛选出如下代码:
    [Java] 纯文本查看 复制代码class Yodo1PayHelper$6$1$1 implements ChannelSDKCallback {
    ...
    final String val$orderId;
    ...
    Yodo1PayHelper.access$400(this.this$2.this$1.this$0, this.this$2.this$1.val$activity, this.this$2.this$1.val$productData);
    疑问1:
    请问这些似乎是一个类名/变量名的中间有个$符号是什么意思,直接当普通字符即可吗?
    疑问2:
    【this.this$2.this$1.this$0】,this后面加上$0或$1或$2是什么意思?这样多个this用点符号连接是什么意思?
    请不吝赐教,有劳~
    dfgrf   

    自古楼主坐沙发,
    有问题可以回复
    目前是国内平台的全部通用,
    不排除日后更新SDK导致失效
    point34cm   

    看不懂,感觉很厉害的样子
    point34cm   

    终于知道怎么破解华为里的游戏了,感谢分享
    只为丹颜   

    思路很好,感谢分享
    vethenc   

    请问大神对一些专业资讯类vip如何找断点?
    feichedang   

    不错不错  方法好极了    人间好方法啊
    myg2528   

    感谢分享
    vethenc   

    是所有收费游戏免费玩吗?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部