本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负!
如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦!
目标网站:aHR0cHM6Ly9wYXNzcG9ydC5mYW5nLmNvbS8=``
接口:短信验证码登录接口
在此特别感谢k哥的文章及本人的指导。
【验证码逆向专栏】房某下登录滑块逆向分析
目标很明确,滑块验证码的识别,使用算法还原。
打开网站,输入手机号后点击【获取短信验证码】后就会弹验证码。
流程如下:
滑块划到缺口校验成功后就会发送验证码。
打开F12查看这两部分内容发包情况。
第一个包会返回chanllenge
和gt
,这两个参数十分关键,是整个流程的重中之重。
接下来就是将滑块的图片返回回来。
将url进行一下拼接进行请求就可以得到背景图和滑块图。需要注意的是在做距离识别时需要查看图片大小,然后进行图片的缩放或者轨迹的缩放。
实际大小和渲染大小比例大概是1:0.9375
接下来就是滑动提交滑块的接口,分别对应三个状态。
状态码 | 含义 |
---|---|
100 | 成功并且发送敦信 |
101 | 参数错误 |
102 | 滑动距离错误 |
请求加密的地方只有后端校验滑块的接口。
其中c
、a
为固定参数,可以写死。start
是滑块滑动的开始时间,end
则对应的是结束时间,i
是浏览器环境的加密,t
是轨迹的加密。
gt
和challenge
在之前就已经获取了。
直接搜索i:
就可以定位到加密点。
可以清楚的看到加密函数是x.compress
,参数是一个自执行函数,里面有大量的环境。环境的话尽量还是补全,防止后面出现问题。
跟进函数可以将整个对象都拿下来,因为在加密中都会使用到,直接一步到位
然后就是直接调用函数,将剩下需要的一些参数和所缺函数扣下来即可调用。
至此,参数i
就已经拿下了。
继续看参数t
t
和i
相邻,直接就能看到。
老规矩将函数整体复制下来,然后自己改改就可以了。
函数的开头和结尾打上断点,关注一下入参和结果即可。
参数e
是一个转换后的轨迹数组,传入之后返回了加密轨迹。
加密的函数逻辑
function (e) {
for (var t = "", n = e.length / 6, r = 0; r < n; r += 1)
t += E.charAt(f.parseInt(e.slice(6 * r, 6 * (r + 1)), 2));
return t
}(l)
逻辑并不复杂,k哥的文章也有讲到。
接下来就是寻找轨迹转换的地方了(这个地方还是看了大佬的文章才找到的,只能说还是太菜了,哈哈)
后知后觉才发现在哪里。
参数e就是轨迹函数。
该站点对于轨迹校验不算太严格,本地调用成功率大概在75%
还需要继续优化。
很多小伙伴关心的轨迹生成,我这里找的是github上开源的,可以参考使用。
链接:python_ghost_cursor
如果有能力手写的小伙伴也可以分享私信博主,万分感谢~