【小白】某活动 注册机领取优惠券实现过程
本帖最后由 a976606645 于 2020-4-18 10:48 编辑## 前言
小白第一次写这种类型的帖子,如有不妥之处望大家多多包含。
本文只供学习交流使用。
[优惠券领取地址](https://cache.amap.com/activity/2019RideouterUpdate/indexwx.html?gd_from=hotel&mini_app=0)
## 页面抓包分析
Chrome打开活动页面,F12。
![活动页面](https://attach.52pojie.cn//forum/202004/18/093130qh8dz01adhd180in.jpg?l)
点击领取优惠券,填入手机号后,获取验证码,在控制台里面有这样一条记录
![发送验证码](https://attach.52pojie.cn//forum/202004/18/093132bgnnk7ulznzld44d.jpg?l)
继续分析它的请求,可以看出它通过Get方式提交数据,看看提交了哪些数据。
![请求分析](https://attach.52pojie.cn//forum/202004/18/093135y3h883shlp2ooop7.jpg?l)
我们可以看到上图中的param的值。手机号、10位时间戳、`umid_token`,其他的都好说,`umid_token`的值需要我们研究一下
在控制台里面Ctrl+F搜索一下关键字`umid_token`
![搜索token](https://attach.52pojie.cn//forum/202004/18/093137a7345zazu783j0jx.jpg?l)
可以看到`umid_token`的值指向`umidToken`这个变量,我们在控制台里面继续搜索`umidToken`这个关键字,发现`umidToken`的值在这一段js代码里
![搜索umidToken](https://attach.52pojie.cn//forum/202004/18/093139r740po02s7rmr47m.jpg?l)
各种下断点单步调试之后,没有解析出token的具体算法(*其实就是我菜*)
经过一番度娘之后,了解到活动页面调用了某阿X云的风控系统 [**相关风控API介绍**](https://help.aliyun.com/document_detail/101030.html)
于是彻底放弃了一开始的分析JS解析算法的想法(*其实还是我菜*)
打算从数据包里看看还能不能找到有用的东西,F5刷新后,发现了这个神奇的json数据文件
!(https://attach.52pojie.cn//forum/202004/18/093141ozr1rgarrqf41be7.jpg?l)
经过比对后,发现`um.json`这里返回的`tn`的值就是我们发送验证码所需要的
!(https://attach.52pojie.cn//forum/202004/18/093143hpocb2teo3p6ce4p.jpg?l)
开心~继续分析调用这个接口时候的请求参数,发现`data`的数据长达716位,鬼知道他是咋生成的
!(https://attach.52pojie.cn//forum/202004/18/093146c7gr84e9g48hxh9g.jpg?l)
先不想那么多,把数据拿到调试工具里测试一下,发现接口成功的返回了token
!(https://attach.52pojie.cn//forum/202004/18/093240ephbdiz2divpbuhf.jpg?l)
尝试去掉`data`参数,查看post结果,发现会返回空值
!(https://attach.52pojie.cn//forum/202004/18/104046q6cd2r007296693o.jpg?l)
担心如果一直使用同一个`data`数据会出现拒绝访问的问题,尝试修改数据的值
经过几次发送验证码抓包对比,发现`data`开头的`106!`这几个字符是固定的。`106!`后面随意拼接字符都可以正常取到token
!(https://attach.52pojie.cn//forum/202004/18/093244nba1x8q8bmao5ihh.jpg?l)
比如我想给他一铁锤,也可以正常获取到(笑)
!(https://attach.52pojie.cn//forum/202004/18/104321ecfhwkhzwft9890z.jpg?l)
打开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))
```
运行一下,发现可以正常发送出验证码
![发送测试](https://attach.52pojie.cn//forum/202004/18/104051c3km6iobw8sjoigw.jpg?l)
---
**到此,我们离胜利已经不远了!**
返回浏览器活动页面,走一遍发送验证码的流程,输入收到的验证码,抓包分析
![领取结果包](https://attach.52pojie.cn//forum/202004/18/104032b164yv1u1i969q71.jpg?l)
分析他的请求数据,主要的就是那个验证码参数,别的没啥了
![数据分析](https://attach.52pojie.cn//forum/202004/18/104053znqr6vj4hussqun0.jpg?l)
写个方法
```
.版本 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))
```
## 运行测试
![数据分析](https://attach.52pojie.cn//forum/202004/18/104055a64s4nif6g26kz6s.jpg?l)
## 结语
感谢大家的耐心观看
谢谢!
你这样还是小白的话,那我是啥?{:301_977:} 丿凉城 发表于 2020-4-18 12:55
这玩意..值得学习 ,用处不大
要说作用的话仁者见仁智者见智吧{:301_998:}
经常打车的老哥可能会用到
他家不止这一个活动多领些券打车能省点 不错不错,给你评分! 感谢分享顶一下 谢谢分享 我比你海菜,看的懵懵的哦。 不错,支持一下{:1_921:} 感谢楼主分享
厉害了,好厉害的样子 这一波分析就很6了。