首页
论坛
课程
招聘
#30天写作挑战#某购物平台抢券功能粗略分析
2020-9-13 21:08 1734

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

2020-9-13 21:08
1734

目录

 

目录

内容摘要

  • 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
  • 前段时间同事让我研究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以上)
  • 都是套路啊,条件不够,后来就放弃了

协议研究(利用 frida rpc)

  • 通过Charles 抓包分析对比只有下面三个字段是变化的,所以接下去就找加密关键点了
  • 通过上面的分析后,我们会发现数据都会经过 HttpSetting 这个类,这个类中有个 setSignature方法可以拿到sign的调用栈,
  • 找到后 我就可以写 rpc 代码了(另外一些其他的字段我就不举例了,查找方法类似)这里就贴下关键的代码片段了,没什么技术含量


最后总结

  • 拿到一个app的时候,如何快速分析出想要的结果,好的思路可以事半功倍噢;
  • 如果不涉及协议逆向的话(加密协议都在so层,比较菜还没研究),整体过程是没有什么太大的难点
  • 这里推荐 r0ysue大佬的星球,可以学到很多东西
  • 本贴仅限学习交流使用,切勿用于非法行径,否则后果自付
  • 如有侵权,请联系作者删除

[公告]请完善个人简历信息,好工作来找你!

最后于 2020-9-14 09:59 被Snark编辑 ,原因: 图片挂了,重新编辑下
收藏
点赞2
打赏
分享
最新回复 (5)
雪    币: 506
活跃值: 活跃值 (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangyalei 活跃值 2020-9-14 00:22
2
0
图片都看不了
雪    币: 3089
活跃值: 活跃值 (913)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
Snark 活跃值 1 2020-9-14 10:00
3
0
现在应该好了
雪    币: 506
活跃值: 活跃值 (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangyalei 活跃值 2020-9-14 10:56
4
0
可以了,谢谢
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
classis 活跃值 2020-9-17 17:59
5
0
整个rpc代码能不能分享下学习,当然重要数据可以pass掉
雪    币: 79
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_foyotena 活跃值 2020-9-17 21:37
6
0

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

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

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