学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

340

积分

3

好友

9

主题
发表于 2019-5-11 16:16:51 | 查看: 2543| 回复: 0
本帖最后由 钞sir 于 2019-5-11 16:22 编辑

滑雪大冒险2 App内购

前言

相信这个游戏很多人都玩过,游戏里面的道具和地图都是需要出钱购买的;而且不同平台下载的这个APP,里面道具的购买方式可能不一样,但是原理都一样;
这里的支付方式是支付宝和微信.....
界面
支付方式

工具

  1. 夜神模拟器
  2. AndroidKiller_v1.3.1
  3. Apktool
  4. JEB2
  5. Monitor.exe

分析

先让夜神模拟器与monitor.exe连接,找到一些活动的名称,减少工作量:

nox_adb.exe connect 127.0.0.1:62001

然后我们点击支付按键,然后在monitor中Clear LOG,此时点击返回键取消支付,查看LOG:
Log
我们发现一个Yodo1PayHelper的可疑活动,猜测我们支付成功与否就与它有关;
在 AndroidKiller_v1.3.1中搜索这个字符串,找到文件的位置然后在jeb2中查看:
AndroidKiller_v1.3.1
看到文件位置在com\yodo1\android\sdk\helper中:
jeb2
然后我们反编译这个smali文件,发现在onResult类里面有一些关键函数:

case 2: {
    this.this$2.this$1.this$0.removeProductDatatoLocal(this.this$2.this$1.val$activity, this.this$2.this$1.val$productData);
    if(arg8 == v4) {
        YLog.i("Yodo1PayHelper,  这是已购买的商品,购买成功");
        this.this$2.this$1.this$0.purchased(1, this.this$2.this$1.val$channelPayInfo.getOrderId(), this.this$2.this$1.val$productData, this.this$2.this$1.val$payType);
        return;
    }

    this.this$2.this$1.this$0.purchased(2, this.this$2.this$1.val$channelPayInfo.getOrderId(), this.this$2.this$1.val$productData, this.this$2.this$1.val$payType);
    break;
}

发现这里有购买成功的字样;
仔细分析这个文件的内容你会发现他的业务逻辑是:
用户发起购买请求-->获取购买的商品信息-->查询订单状态-->订单状态校验成功-->提交订单状态-->购买成功
所以,我们可以修改它的流程,不管订单状态,直接返回购买成功;

修改

通过"购买成功"字符串转Unicode后查找到onResult类所在的smali文件的位置:
Yodo1PayHelper$4$1$1.smali

:goto_1
    if-ne p2, v4, :cond_5 //修改时删除

    .line 435
    const-string/jumbo v1, "Yodo1PayHelper,  \u8fd9\u662f\u5df2\u8d2d\u4e70\u7684\u5546\u54c1\uff0c\u8d2d\u4e70\u6210\u529f"

    invoke-static {v1}, Lcom/yodo1/sdk/kit/YLog;->i(Ljava/lang/String;)V

    .line 436
    iget-object v1, p0, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1$1;->this$2:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;

    iget-object v1, v1, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;->this$1:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;

    iget-object v1, v1, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;->this$0:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper;

    iget-object v2, p0, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1$1;->this$2:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;

    iget-object v2, v2, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;->this$1:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;

    iget-object v2, v2, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;->val$channelPayInfo:Lcom/yodo1/sdk/adapter/entity/ChannelPayInfo;

    invoke-virtual {v2}, Lcom/yodo1/sdk/adapter/entity/ChannelPayInfo;->getOrderId()Ljava/lang/String;

    move-result-object v2

    iget-object v3, p0, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1$1;->this$2:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;

    iget-object v3, v3, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;->this$1:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;

    iget-object v3, v3, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;->val$productData:Lcom/yodo1/android/sdk/helper/ProductData;

    iget-object v4, p0, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1$1;->this$2:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;

    iget-object v4, v4, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4$1;->this$1:Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;

    iget-object v4, v4, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper$4;->val$payType:Lcom/yodo1/android/sdk/constants/PayType;

    invoke-virtual {v1, v5, v2, v3, v4}, Lcom/yodo1/android/sdk/helper/Yodo1PayHelper;->purchased(ILjava/lang/String;Lcom/yodo1/android/sdk/helper/ProductData;Lcom/yodo1/android/sdk/constants/PayType;)V

    goto/16 :goto_0

然后这段就是购买成功的smali代码了,所以只要我们在开始的位置加一个goto/16 :goto_1,并且把if-ne p2, v4, :cond_5这句删除了,那么我们在购买东西是就可以绕过检测了:
修改

最后Apktool编译,然后签名安装就可以了.....

效果

购买成功
点击购买,然后取消可以了....

总结

Android逆向的难点主要在于麻烦与类的繁杂,并且需要不断的编译签名安装运行验证....

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-4-24 08:47 , Processed in 0.098158 second(s), 38 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表