某东登录滑块验证逆向
- 逆向网址
- 验证流程
- 输入账号密码点击登录弹出验证
- 验证数据包
- 分析如何去构造这个请求参数
- cookie参数
- __jdxxx
- wlfstk_smdl
- 3ABxxx
- 加密参数a与d
- jcap_dvzw_fp
- payload参数
- 加密函数
- 轨迹的模拟
- 代码效果图
逆向网址
aHR0cHM6Ly9wYXNzcG9ydC5qZC5jb20vbmV3L2xvZ2luLmFzcHg=验证流程
输入账号密码点击登录弹出验证
这里的验证分为两种,滑块验证及图标点选验证,注意这里的滑块验证码有点坑哪怕你滑正确,它都可能会判断你滑动失败,从而触发下一个验证码,可能是滑块验证,也可能是图标点选验证。
验证数据包
失败验证数据包
注意它会返回一个st的数据,这个是需要请求下一个验证码的关键参数
成功验证数据包
分析如何去构造这个请求参数
要构造这个请求参数主要是两个cookie及payload
cookie参数
__jdxxx
这个参数是由一个字典生成的
生成这个字典的开始位置在这
最终生成的字典
那生成这些__jdxxx位置如下
wlfstk_smdl
这个cookie是通过访问链接https://qr.m.jd.com/show返回的有
3ABxxx
3ABxxx的cookie值是访问链接https://jra.jd.com/jsTk.do返回的
从这里开始就要接触jd的加密
这个链接所需要的参数如下图所示
加密参数a与d
这两个加密参数是相呼应的,你需要先生成d,在通过d来生成a
d的生成时通过收集浏览器指纹数据在通过自定义的base64加密而成
a的生成需要通过d来参与,但是其中还有一个重要的参数fp
fp的加密算法是哈希算法其中也参杂了一些浏览器的指纹数据
a的生成与d的生成别无二至,把这些加密参数搞定直接base64加密即可
jcap_dvzw_fp
这个cookie的值是通过访问链接https://jcap.m.jd.com/cgi-bin/api/fp访问的有
这里主要有两个参数si与ct,si是session_id,是通过访问链接https://passport.jd.com/new/login.aspx的网页内容中有ct值是JD加密最主要的,它的加密算法和后续的验证码加密算法一致
它的加密位置如下图
o是加密函数, 哪个数组是是加密的参数其中s是session_id,l是你的账号以及一些浏览器指纹数据
它这个加密是wasm加密,这里先不展示加密函数。
至此cookie的生成到此为止
payload参数
payload参数主要如下
它对应的代码生成位置如下
其中tk加密的数组中t就是我们的轨迹数组以及点选轨迹
其它就不展示了
加密函数
这几个加密函数都是你需要取实现的,tk参数是getTKData,同理CSDCTDSED都是不同参数运行的加密函数
最后是什么加密,我也很懵,在我完成之前是wasm,但是最近好像更新了,但是我再去看好像没什么变化,
这个加密函数生成的位置如下
要想实现它,只需要把代码扣下来,异步执行即可
轨迹的模拟
对于滑块的模拟没有什么好说,但是对于图标点选,我的思路是
首先它会返回一个大图,一个小图
对于小图直接使用rembg的AI抠图
然后用颜色匹配或者其它匹配策略即可
代码效果图
代码就这样,主要是模拟的滑块轨迹数组没有去优化,随便写的,导致通过率不高(但这个不重要,主要是图标点选验证才是大头,只要图标点选验证目标坐标正确即可),以及图标的匹配算法还需要再一次优化,