本文作者:梁东东

前言: 今天你撸茅台了么? 撸茅台已经成为社会现象,茶余饭后讨论的最佳实践

2022年双十一大促已经完美收官,兄弟姐妹克服种种困难与挑战.. 备战的会议室忙碌中带着紧张,当峰值过后的喜悦不言而喻,今年备战室里听着对面的兄弟讲述了他抢茅台的经过,以及对马上来临的整点茅台活动期待,我也立马参与进去,但是....没抢到, 带着种种的疑问,百度了下网上抢茅台的种种手段与方法,发现里面的猫腻还真不少,同时作为风险人也想不断的通过各种技术手段识别发现风险,让羊毛党无处躲藏;也许,竞争对手比你想象中要更加的强大, 今天就带你走近抢茅台的脚本,领略下TA们有趣的灵魂;

下面的列表是我总结网络上普遍存在的一些抢购的方式,这些方式的共性是:模拟单人或多人的操作行为,在最短的时间内完成抢购流程

一、webUI脚本解析:

下面是一段网络上比较常见的某宝的一种抢茅台的脚本,底层逻辑是: 模拟人点击操作路径,通过脚本重放,循环实现定时、自动化、多并发等操作,最终实现代码替代人工操作抢走商品;

•像人一样控制浏览器:脚本里是基于webdriver的一种浏览器驱动方式,可以通过驱动来控制浏览器实施控制页面操作,例如里面使用频繁的find_elemnt_by_id是通过页面ID识别的(ID可以通过控制台元素定位获取到),find_element_by_link_text通过精准匹配页面上的文案,是辨识元素的一种方式;click()是识别元素后的鼠标点击动作;

•像人一样进入登录:脚本里面的run_driver方法,里面调用了login_in方法,里面的逻辑大概是模拟用户输入用户名+密码,点击登录按钮后,实现登录;

•像人一样的循环抢购商品:抢购茅台会有对应的抢购时间,这里的times就是作者设定的抢购时间,循环体里面会判断当前时间是否大于等于times时间,如果出现大于等于后,会进入到第二个循环体,寻找下单的按钮然后进行点击操作;在点击成功后继续进入到提交订单页面,通过link_text识别文案,进行点击操作,最终成功抢购商品成功,进入到待付款页面;else,如果抢购后无法结算,脚本会通过驱动重新打开商品页面,然后选择商品,重新走判断时间的逻辑,以上。

二、后端接口脚本解析

下面的代码是之前GitHub很火的抢购京东飞天茅台jd_seckill脚本,一度被很多人使用(现项目已经停止),底层逻辑:绕过前端UI,整体流程通过协议接口层串联,可以通过自定义控制抢购的速度,最终实现代码替代人工操作抢走商品;

•后端接口串联整体流程实现登录:通过登录访问二维码页面、获取Token票据、校验票据,获取cookies

•串联接口实现抢购流程:点击“抢购”按钮后,会有两次跳转302,最后达到订单结算页面,这里返回第一次跳转后的URL,作为商品的抢购链接;

三、APPUI脚本 以及 adb命令方式 解析

APPUI脚本方式 底层逻辑是:通过手机端(安卓、IOS或模拟器等)通过UI自动化工具或adb命令的方式控制app以及webview来模拟人操作,实施抢购的过程;

•直接进入商品抢购页面,通过adb命令操作抢购:os.system是py调用shell的一种方式,adb的全称为Android Debug Bridge,就是起到调试桥的作用; 通过adb shell input tap命令,可以控制手机操作点击手机区域(注:区域为传递的X,Y轴的坐标),通过这种方式可以连续操作手机进行抢购活动

appUI脚本攻击方式,是通过工具化的手段,例如Uiauto.js、uiautomator、appium等等,实现的手机控制app(内置的webviewH5需要结合webdriver)实现模拟人为操作,实施抢购;

•setup方法:封装了驱动的一些必要参数,系统的类型、设备名称、app包名、首页面活动页、使用的浏览器驱动的地址(H5)等等关键核心驱动说明

•appium:此案例里面使用了appium工具操作,所以remote方式链接appium-server

•核心模拟路径:所有的操作路径,业务逻辑封装在test_search里,通过坐标点击 以及 H5页面的操作,在while True里面无限循环进行抢购商品

四、风险防守、识别篇:

再高明的攻击手段,在智能风控面前下,都会毕露无遗,风险侧通过关联黑名单、设备指纹、生物探针、风险标签(群控、设备聚集性、陀螺仪、云手机等等)可以识别出来人的操作轨迹,按压行为等等,可快速识别风险,锁定风险,消除风险;(注:由于机密性比较强,此处不做过多详细说明)

剖析一下"抢茅台"脚本底层逻辑的更多相关文章

  1. Elasticsearch集群规模和容量规划的底层逻辑

    转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484628&idx=1&sn=666e416ae ...

  2. 微信、QQ、微博、陌陌……社交网络的底层逻辑是什么?

      两 年前的社交产品泛滥犹在眼前,场景之胜几乎到了言必谈社交的地步.时任阿里新CEO陆兆禧举全集团之力,力推新社交产品“来往”,动作之大震惊整个互联 网.如今,陆兆禧早早退场,只留下一个硬汉的孤独背 ...

  3. python3.7之12306抢票脚本实现

    悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研 ...

  4. Python 实现的 12306抢票脚本

    Python12306抢票脚本 本脚本使用一个类来实现所有代码,大体上分为以下几个模块及其步骤:- 初始化对象属性(在抢票前进行的属性初始化,包括初始化浏览器模拟对象,个人信息等).- 建立模拟浏览器 ...

  5. MySQL数据分析-(2)数据库的底层逻辑

    (一) 数据库存在的逻辑 1.案例开篇-大部分公司对于数据和数字的管理都是低效率的 我们要学习数据库,就必须要搞清楚数据库是在什么样的情景下发明并流行的?学习新知识就要搞清楚每个知识点的来龙去脉,这样 ...

  6. JS自运行函数的写法和MVVM框架数据驱动的底层逻辑

    1.JS自运行函数的写法 ( function(){ console.log(111)} )( ) !function(){ console.log(111) }() ( function(){}() ...

  7. NewSQL分布式数据库,例如TIDB用K/V的底层逻辑

    内容参考 对分布式对定义参考这篇文章: 微服务都想用,先把分布式和微服务之间的关系说清楚 对分布式架构中心或无中心对比参考这篇文章: 分布式存储单主.多主和无中心架构的特征与趋势 对HDFS对内部机制 ...

  8. 新零售SaaS架构:组织管理的底层逻辑与架构设计

    想要深入理解零售企业的组织架构,是非常困难的一件事.因为大部分人都没有实际经营过一家零售企业,更没有参与设计过零售企业的组织架构. 调研商家时,我们只能了解商家组织架构的现状,我们也很难和企业高层直接 ...

  9. C++ 炼气期之基本结构语法中的底层逻辑

    1. 前言 从语言的分类角度而言,C++是一种非常特殊的存在.属于高级语言范畴,但又具有低级语言的直接访问硬件的能力,这也成就了C++语言的另类性,因保留有其原始特性,其语法并不象其它高级语言一样易理 ...

  10. Python写一个京东抢券脚本

    最近看到京东图书每天有优惠券发放,满200减100,诱惑还是蛮大的.反正自己抢不到,想着写个脚本试试. 几个关键步骤 获取优惠券的url 直接审查元素 获取cookie 通过本地代理,比如BurpSu ...

随机推荐

  1. kingbaseES V8R3数据安全案例之---审计记录清除案例

    ​ 案例说明: 对于KingbaseES V8R3数据库,默认用户无权限删除审计记录,只有对审计记录做了转储以后会自动清理审计记录. 适用版本: KingbaseES V8R3 本案例数据库版本: S ...

  2. git revert总结

    git revert git revert 是一种创建一次新的commit 来回退某次或某几次commit的一种方式 命令 // 创建一个新的commit,这个commit会删除(下面)commit- ...

  3. Android开发2021.3.9日【模拟器路径】【外观字体】【简单快捷键】

    一. 1.模拟器存储路径 D:\Android\SDK\platforms(在本人的dell上) 2.使用软件 Android Studio4.2 3.注意事项 (1)修改JDK的路径为自己下载的JD ...

  4. C++ "链链"不忘@必有回响之单链表

    1. 前言 数组和链表是数据结构的基石,是逻辑上可描述.物理结构真实存在的具体数据结构.其它的数据结构往往在此基础上赋予不同的数据操作语义,如栈先进后出,队列先进先出-- 数组中的所有数据存储在一片连 ...

  5. 【一月一本技术书】-【MySQL是怎样运行的】- 8月

    mysql 基础 mysql分为 客戶端/服务端 客户端向服务端发送一段文本(mysql语句),服务器处理后向客户端进程返回一段文本. 查询请求执行过程 客户端->处理连接->查询缓存-& ...

  6. 应用健康: Liveness 与 Readiness

    文章转载自:https://www.kuboard.cn/learning/k8s-intermediate/workload/pod-health.html 介绍 Liveness 指针是存活指针, ...

  7. css自定义会话框

    效果图图下: HTML代码: <div style="background-color: transparent; border: 1px #DDDDDD solid; width: ...

  8. 把train数据集生成txt(test同理)

    import cv2 import numpy as np import os import sys import pickle data_dir = os.path.join("./&qu ...

  9. UVA12186 工人的请愿书 Another Crisis (树形DP)

    dp[i]表示要让i向上级发请愿书,最少需要多少个工人递交请愿书,因为要取前T%最小的,所以还要将i的子节点排序(这里用vector实现),取前c个最小的作为dp[i]的值. 这里用dfs可以省去dp ...

  10. MergeOption.NoTracking的使用

    前两天项目维护出现一个bug,报错信息是提交出错:AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突.请在调用 AcceptChange ...