关于极验的滑块分析可以看这里
献计献策:企业信用信息公开网-极验zhuanlan.zhihu.com本文分析极验的点选文字验证,首先还是抓包:
大概的过程是:
1.请求获取gt,challenge
2.获取极验版本信息
3.验证鼠标点击过程,成功返回下一步验证(可能是滑块或者点选文字)
4.返回图片的点选验证
从后面往前分析:
校验的轨迹还是在W参数中的,通过追踪到js可以发现这种代码:
现在不喜欢对这种代码进行硬刚,我们使用AST变换来对代码解混淆下,部分代码如下:
极验的混淆都是用一个加密函数来进行解混淆的,这种情况下,对于只有一个解密函数的混淆,在安全上是不够的,解混淆的成本很低.
通过解混淆之后的代码:
可以看到,可读性强了一些
找到w的生成地方:
o 获取鼠标在点击文字的时候的滑动轨迹信息,这个可以简单模拟下大概是这样的数据:
有"pointermove","pointerup"和"pointerdown"三个鼠标事件组成
e 才是点击的坐标信息.点击的坐标不是单纯的clientX,clentY信息,是做了一下变换的:
i = t["left"]
, o = t["top"]
, s = t["right"] - t["left"]
, a = t["bottom"] - t["top"]
, _ = (r - i) / s * 100
, c = (n - o) / a * 100;
if (100 < Math["abs"](_) || 100 < Math["abs"](c)) {
var u = e["$_IEu"]["$_BIDF"]();
_ = (r - (i = u["left"])) / s * 100,
c = (n - (o = u["top"])) / a * 100;
}
Math["round"](100 * _), Math["round"](100 * c)
单纯的算法上比轨迹的加密要容易,但是是文字理解层面上比滑块要难.
这里没有涉及到用深度学习的方式进行图片文字信息的识别.使用第三方打码的方式拿到点击的坐标信息.
剩下的就是模拟发包:
使用python + node执行js的方式,模拟发包:
舒服!