前言
小白第一次写这种类型的帖子,如有不妥之处望大家多多包含。
本文只供学习交流使用。
优惠券领取地址
页面抓包分析
Chrome打开活动页面,F12。
点击领取优惠券,填入手机号后,获取验证码,在控制台里面有这样一条记录
继续分析它的请求,可以看出它通过Get方式提交数据,看看提交了哪些数据。
我们可以看到上图中的param的值。手机号、10位时间戳、umid_token
,其他的都好说,umid_token
的值需要我们研究一下
在控制台里面Ctrl+F搜索一下关键字umid_token
可以看到umid_token
的值指向umidToken
这个变量,我们在控制台里面继续搜索umidToken
这个关键字,发现umidToken
的值在这一段js代码里
各种下断点单步调试之后,没有解析出token的具体算法(其实就是我菜)
经过一番度娘之后,了解到活动页面调用了某阿X云的风控系统 相关风控API介绍
于是彻底放弃了一开始的分析JS解析算法的想法(其实还是我菜)
打算从数据包里看看还能不能找到有用的东西,F5刷新后,发现了这个神奇的json数据文件
经过比对后,发现um.json
这里返回的tn
的值就是我们发送验证码所需要的
开心~继续分析调用这个接口时候的请求参数,发现data
的数据长达716位,鬼知道他是咋生成的
先不想那么多,把数据拿到调试工具里测试一下,发现接口成功的返回了token
尝试去掉data
参数,查看post结果,发现会返回空值
担心如果一直使用同一个data
数据会出现拒绝访问的问题,尝试修改数据的值
经过几次发送验证码抓包对比,发现data
开头的106!
这几个字符是固定的。106!
后面随意拼接字符都可以正常取到token
比如我想给他一铁锤,也可以正常获取到(笑)
打开E语言,写几行测试下
.版本 2
.支持库 spec
.子程序 获取验证码
.局部变量 url, 文本型
.局部变量 umidtoken, 文本型
.局部变量 data, 文本型
.局部变量 返回文本, 文本型
.局部变量 timestamp, 文本型
.局部变量 正则, 正则表达式类
手机号 = 编辑框1.内容
日志.内容 = “”
timestamp = 时间_取北京时间戳 (真)
' 获取umid_token
data = “data=106!” + 文本_取随机字符 (32) + “=” + “&xa=amap-aos-oss&xt=”
url = “https://ynuf.aliapp.org/service/um.json”
返回文本 = 网页_访问S (url, 1, data)
日志.加入文本 (“获取Token:” + 返回文本 + 字符 (10))
日志.加入文本 (“====================================” + 字符 (10))
调试输出 (返回文本)
正则.创建 (“\w{59}”, 返回文本)
umidtoken = 正则.取匹配文本 (1)
日志.加入文本 (“Umid_Token:” + umidtoken + 字符 (10))
日志.加入文本 (“====================================” + 字符 (10))
' umidtoken = “TBC3D2C5EA456DA1F4F5ADFF98AF8BEBFEAECAF1F26DDAB822F238FEE00”
' 发送验证码
url = “https://wb.amap.com/channel.php?aoscommon=1&callback=_aosJsonpRequest2&urlname=https%3A%2F%2Fsns.amap.com%2Fws%2Foss%2Fnewtaxi%2Fcoupon%2Fexternal%2Fverify¶m=%5B%7B%22mobile%22%3A%22” + 手机号 + “%22%2C%22sign%22%3A1%7D%2C%7B%22umid_token%22%3A%22” + umidtoken + “%22%2C%22sign%22%3A1%7D%2C%7B%22ts%22%3A%22” + timestamp + “%22%2C%22sign%22%3A1%7D%5D&method=get”
返回文本 = 网页_访问S (url, 0)
日志.加入文本 (“验证码发送状态:” + 返回文本 + 字符 (10))
日志.加入文本 (“====================================” + 字符 (10))
运行一下,发现可以正常发送出验证码
到此,我们离胜利已经不远了!
返回浏览器活动页面,走一遍发送验证码的流程,输入收到的验证码,抓包分析
分析他的请求数据,主要的就是那个验证码参数,别的没啥了
写个方法
.版本 2
.子程序 领取优惠
.局部变量 url, 文本型
.局部变量 timestamp, 文本型
.局部变量 验证码, 文本型
.局部变量 返回文本, 文本型
timestamp = 时间_取北京时间戳 (真)
验证码 = 编辑框2.内容
url = “https://wb.amap.com/channel.php?aoscommon=1&callback=_aosJsonpRequest3&urlname=https%3A%2F%2Fsns.amap.com%2Fws%2Foss%2Fnewtaxi%2Fcoupon%2Fexternal%2Fget_new¶m=%5B%7B%22source%22%3A%22hotel%22%2C%22sign%22%3A1%7D%2C%7B%22mobile%22%3A%22” + 手机号 + “%22%2C%22sign%22%3A1%7D%2C%7B%22ts%22%3A%22” + timestamp + “%22%2C%22sign%22%3A1%7D%2C%7B%22verify_code%22%3A%22” + 验证码 + “%22%7D%2C%7B%22mini_app%22%3A%220%22%7D%2C%7B%22subsource%22%3A%22%22%7D%5D&method=get”
返回文本 = 网页_访问S (url, 0)
日志.加入文本 (“领取结果:” + 返回文本 + 字符 (10))
日志.加入文本 (“====================================” + 字符 (10))
运行测试
结语
感谢大家的耐心观看
谢谢!