极验滑动验证码图片还原
极验滑动验证码图片还原
极验的图片进行了分块乱序处理,本地加载后,会通过JavaScript对图片进行还原。
下载的图片:

调试方法:
在创建Canvas的函数上设置断点。

刷新验证码,会在创建Canvas的地方断下来。

一直单步,直到还原后的图像显示出来。

在console中执行
z=i,将此时的i保存为全局变量。退出单步,刷新验证码,再次断到创建Canvas的地方,此时在console中执行z['$_BBJV']('ready'),然后继续单步,就可以即时显示一块一块被还原的图片。
至此,定位到了图片还原的关键代码,验证一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas1" width="312" height="160">
Your browser does not support the HTML5 canvas tag.
</canvas>
<br>
<canvas id="myCanvas2" width="312" height="160">
Your browser does not support the HTML5 canvas tag.
</canvas>
<br>
<img id="img1" src="7d3e55d7a.webp" onload="main()" style="display:none;" >
<script>
function main() {
var c = document.getElementById("myCanvas1");
var cxt = c.getContext("2d");
var img = document.getElementById("img1");
cxt.drawImage(img, 0, 0);
cxt.fillStyle="white";
var c2 = document.getElementById("myCanvas2");
var cxt2 = c2.getContext("2d");
SEQUENCE = [39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 42, 12, 13, 23, 22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17];
r = 160;
for (var a = r / 2, u = 0; u < 52; u += 1) {
var c = SEQUENCE[u] % 26 * 12 + 1,
_ = 25 < SEQUENCE[u] ? a: 0,
l = cxt.getImageData(c, _, 10, a);
cxt2.putImageData(l, u % 26 * 10, 25 < u ? a: 0);
cxt.fillRect(c, _, 10, a);
}
}
</script>
</body>
</html>
