来自知乎文章
极验验证码验证的是鼠标拖动滑块时的鼠标轨迹,完整步骤就像这样:先向目标网站请求一个id,然后拿着id去geetest服务器请求图片;接下来就开始拖动滑块,拖动的过程会被js记录下来;松开鼠标后会向geetest发送一个验证的请求,请求包含加密后的鼠标轨迹、拖动距离、所用时间等信息,如果成功,返回一个秘钥,用来向目标网站进行下一个请求。
那我们需要做什么呢?
- 向目标网站请求id
- 用id去geetest请求图片
- 合成图片得出拖动距离
- 生成鼠标轨迹
- 用Python把加密的方法实现一遍
- 发送加密后的数据
思路:
前两个都还好说
第三个、图片是混淆之后的图片,需要按着他的规则把相应的块换换位置就可以得到完整的图片了;缺口位置:每张图片各转为一个Python列表,每个值对应图片上每一列像素值的和,然后对两个列表进行比较(缺口的位置和所需要拖动的距离不相同,有一个固定的差)
第四个、轨迹生成有许多方法,1.找找规律,写个循环直接生成。如果写的不好影响成功率。2.找一些样本,然后随机选一个,根据自己需要拖动的距离按比例方法缩小23333
第五个、找到相应的js代码然后用Python实现一遍(体力活费时间,还好我写好了是吧)。。。或者可以调用v8
在验证码分析过程中我搭建一个简易的后台。极验有开放的Python demo,flask和django的都有,我用的flask。滑动成功之后,通过js把加密之前的鼠标轨迹等信息发送到后台,后台存入数据库。我又在页面上加了一个图表,可以把自己的轨迹显示出来,也可以把后台生成的轨迹显示出来,看看自己生成的轨迹和自己拖动的轨迹有什么区别,不过是否通过还是得发到极验后台去了。
最后放一张测试时搭建的后台。渣前端):
2017年3月9日更新:
极验的验证码更新挺快的,用这种方法去分析请求工作量挺大的,还是控制浏览器来的稳定,当然了,以前研究的东西正好可以用在这里,就像距离计算、轨迹生成之类的。