首页
社区
课程
招聘
#30天写作挑战#某购物平台抢券功能粗略分析
发表于: 2020-9-13 21:08 17793

#30天写作挑战#某购物平台抢券功能粗略分析

2020-9-13 21:08
17793

目录

分析步骤

这样就看到app 自己封装的类了,不过这里看到的还是app自己封装的网络类,没有看到具体的业务类,所以还得继续查找,这里我们直接hook 上图中的 HttpGroupAdapter 类,发现每次发起请求时会调用 add 方法;则我们就hook该add方法;

1.然后通过看代码,猜想是关键函数,然后写代码进行验证

 
android hooking watch class_method okhttp3.OkHttpClient.newCall --dump-args --dump-backtrace --dump-return
android hooking watch class_method com.android.volley.RequestQueue.add --dump-args --dump-backtrace --dump-return
function doRobCoupon() {
 Java.perform(function () {
     var jh = Java.use("com.xxxx.newcoupon.utile.h");
     var jf = Java.use("com.xxxxx.newcoupon.c.f");
     var batchId = "xxxxxxx";
     var receiveKey = "xxxxxxx";
     var jb = Java.use("com.xxx.coupon.lib.b");
     var jc = "";
     Java.choose("com.xxxx.newcoupon.c.c", {
         onMatch: function (instance) {
             jc = instance;
         }, onComplete: function () {
         }
     })
     Java.choose("com.xxxxx.newcoupon.activity.NewCouponCenterActivity", {
         onMatch: function (instance) {
             var newjc = Java.cast(jf.$new(jc), jb);
             jh.a(instance, batchId, receiveKey, newjc);
         }, onComplete: function () {
         }
     })
 })
}
  • 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
  • 前段时间同事让我研究xx购物平台的优惠券,让我帮他抢个优惠券,所以就有了这篇文章,
  • 本文主要是分享下我的逆向过程中找关键接口的一些思路; 如有不对的地方,请大神指点 ;
  • 工具
    1. objection
    2. frida
    3. Charles
  • 分析步骤

    1. 拿到app的时候,先抓个包试试,打开app,切换到抢券界面,发现有很多抢券的按钮,
      则随便点一个,看看抓的包信息,发现该app,http用的是基于okhttp框架;
    2. 接下来就用 Objection 来验证了 ,我们先打印app内所有的类,我们找到了关键类
    3. 为什么说 okhttp3.OkHttpClient 是关键类呢,因为如下图
    4. 所以 我们hook 该类的 newCall 方法,看调用栈,
      android hooking watch class_method okhttp3.OkHttpClient.newCall --dump-args --dump-backtrace --dump-return
      
    5. 看调用并没有看到app自己的类,只是看到了另外个网络框架android volley 网络框架,由于对他不了解,所以就 百度呗,看看其用法
    6. 直接hook add方法
      android hooking watch class_method com.android.volley.RequestQueue.add --dump-args --dump-backtrace --dump-return
      
    7. 这样就看到app 自己封装的类了,不过这里看到的还是app自己封装的网络类,没有看到具体的业务类,所以还得继续查找,这里我们直接hook 上图中的 HttpGroupAdapter 类,发现每次发起请求时会调用 add 方法;则我们就hook该add方法;

      1.然后通过看代码,猜想是关键函数,然后写代码进行验证

      function doRobCoupon() {
       Java.perform(function () {
           var jh = Java.use("com.xxxx.newcoupon.utile.h");
           var jf = Java.use("com.xxxxx.newcoupon.c.f");
           var batchId = "xxxxxxx";
           var receiveKey = "xxxxxxx";
           var jb = Java.use("com.xxx.coupon.lib.b");
           var jc = "";
           Java.choose("com.xxxx.newcoupon.c.c", {
               onMatch: function (instance) {
                   jc = instance;
               }, onComplete: function () {
               }
           })
           Java.choose("com.xxxxx.newcoupon.activity.NewCouponCenterActivity", {
               onMatch: function (instance) {
                   var newjc = Java.cast(jf.$new(jc), jb);
                   jh.a(instance, batchId, receiveKey, newjc);
               }, onComplete: function () {
               }
           })
       })
      }
      
    8. 最终如下图,服务器已经返回错误(我这里用了一个过期的receiveKey 和一个正确的 receiveKey 测试),说明接口已经调用成功了
    9. 这里还有另外一种方法也可以查找到关键接口,可以通过搜索关键字来定位(这里不推荐哈)r0ysue大佬 一再强调我们要用开发的思路去逆向哈
  • 可能应网络的原因或者券少的关系吧,一直没有抢到过,(也不排除其他原因)
  • 之前有试到过一次,返回xxx值不够的错误,后来发现领这个券是需要条件的 (全品类券【每天14/18/20/22点限量抢/xxx值5000以上)
  • 都是套路啊,条件不够,后来就放弃了
  • 通过Charles 抓包分析对比只有下面三个字段是变化的,所以接下去就找加密关键点了
  • 通过上面的分析后,我们会发现数据都会经过 HttpSetting 这个类,这个类中有个 setSignature方法可以拿到sign的调用栈,
  • 找到后 我就可以写 rpc 代码了(另外一些其他的字段我就不举例了,查找方法类似)这里就贴下关键的代码片段了,没什么技术含量


  • 拿到一个app的时候,如何快速分析出想要的结果,好的思路可以事半功倍噢;
  • 如果不涉及协议逆向的话(加密协议都在so层,比较菜还没研究),整体过程是没有什么太大的难点
  • 这里推荐 r0ysue大佬的星球,可以学到很多东西
  • 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
  • 如有侵权,请联系作者删除
  1. objection
  2. frida
  3. Charles
  1. 拿到app的时候,先抓个包试试,打开app,切换到抢券界面,发现有很多抢券的按钮,
    则随便点一个,看看抓的包信息,发现该app,http用的是基于okhttp框架;
  2. 接下来就用 Objection 来验证了 ,我们先打印app内所有的类,我们找到了关键类
  3. 为什么说 okhttp3.OkHttpClient 是关键类呢,因为如下图
  4. 所以 我们hook 该类的 newCall 方法,看调用栈,
    android hooking watch class_method okhttp3.OkHttpClient.newCall --dump-args --dump-backtrace --dump-return
    
  5. 看调用并没有看到app自己的类,只是看到了另外个网络框架android volley 网络框架,由于对他不了解,所以就 百度呗,看看其用法
  6. 直接hook add方法
    android hooking watch class_method com.android.volley.RequestQueue.add --dump-args --dump-backtrace --dump-return
    
  7. 这样就看到app 自己封装的类了,不过这里看到的还是app自己封装的网络类,没有看到具体的业务类,所以还得继续查找,这里我们直接hook 上图中的 HttpGroupAdapter 类,发现每次发起请求时会调用 add 方法;则我们就hook该add方法;

    1.然后通过看代码,猜想是关键函数,然后写代码进行验证

    function doRobCoupon() {
     Java.perform(function () {
         var jh = Java.use("com.xxxx.newcoupon.utile.h");
         var jf = Java.use("com.xxxxx.newcoupon.c.f");
         var batchId = "xxxxxxx";
         var receiveKey = "xxxxxxx";
         var jb = Java.use("com.xxx.coupon.lib.b");
         var jc = "";
         Java.choose("com.xxxx.newcoupon.c.c", {
             onMatch: function (instance) {
                 jc = instance;
             }, onComplete: function () {
             }
         })
         Java.choose("com.xxxxx.newcoupon.activity.NewCouponCenterActivity", {
             onMatch: function (instance) {
                 var newjc = Java.cast(jf.$new(jc), jb);
                 jh.a(instance, batchId, receiveKey, newjc);
             }, onComplete: function () {
             }
         })
     })
    }
    
  8. 最终如下图,服务器已经返回错误(我这里用了一个过期的receiveKey 和一个正确的 receiveKey 测试),说明接口已经调用成功了
  9. 这里还有另外一种方法也可以查找到关键接口,可以通过搜索关键字来定位(这里不推荐哈)r0ysue大佬 一再强调我们要用开发的思路去逆向哈
  •                  内容摘要
  •                  分析思路
  •                  效果展示
  •                  协议研究(利用 frida rpc)
  •                  最后总结
  • 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
  • 前段时间同事让我研究xx购物平台的优惠券,让我帮他抢个优惠券,所以就有了这篇文章,

  • [培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

    最后于 2020-9-14 09:59 被Snark编辑 ,原因: 图片挂了,重新编辑下
    收藏
    免费 6
    支持
    分享
    最新回复 (6)
    雪    币: 25242
    活跃值: (4697)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    2
    图片都看不了
    2020-9-14 00:22
    0
    雪    币: 3003
    活跃值: (3336)
    能力值: ( LV5,RANK:70 )
    在线值:
    发帖
    回帖
    粉丝
    3
    现在应该好了
    2020-9-14 10:00
    0
    雪    币: 25242
    活跃值: (4697)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    4
    可以了,谢谢
    2020-9-14 10:56
    0
    雪    币: 21
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    5
    整个rpc代码能不能分享下学习,当然重要数据可以pass掉
    2020-9-17 17:59
    0
    雪    币: 477
    活跃值: (1412)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    6

    京东的sign可以直接还原的,不过京享值几万以下根本抢不到

    京东还有自己的黑号等级,之前还有接口可以查是不是黑号,是的话绝对领不到大额全品券

    最后于 2020-9-17 21:38 被mb_foyotena编辑 ,原因:
    2020-9-17 21:37
    1
    游客
    登录 | 注册 方可回帖
    返回
    //