极验点选文字分析

关于极验的滑块分析可以看这里

大概的过程是:

1.请求获取gt,challenge
2.获取极验版本信息
3.验证鼠标点击过程,成功返回下一步验证(可能是滑块或者点选文字)
4.返回图片的点选验证

极验点选文字分析_第1张图片
从后面往前分析:

极验点选文字分析_第2张图片
校验的轨迹还是在W参数中的,通过追踪到js可以发现这种代码:

极验点选文字分析_第3张图片
现在不喜欢对这种代码进行硬刚,我们使用AST变换来对代码解混淆下,部分代码如下:

极验点选文字分析_第4张图片
极验的混淆都是用一个加密函数来进行解混淆的,这种情况下,对于只有一个解密函数的混淆,在安全上是不够的,解混淆的成本很低.

通过解混淆之后的代码:
极验点选文字分析_第5张图片
可以看到,可读性强了一些

找到w的生成地方:
极验点选文字分析_第6张图片
o 获取鼠标在点击文字的时候的滑动轨迹信息,这个可以简单模拟下大概是这样的数据:
极验点选文字分析_第7张图片
有"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的方式,模拟发包:
极验点选文字分析_第8张图片
舒服!

交流联企鹅: 1790017954

你可能感兴趣的:(爬虫)