使用gan破解极验滑动验证码
本文提供一个使用GAN破解滑动验证码的思路,完整代码由于利益关系,没有办法公开。
极验的滑动验证码原理
捕捉滑动轨迹,通过分类器判断动作是人做的还是机器做的。
极验是没有办法捕获我们完整的动作的,它会在几个时间点,捕捉滑动块的位置,生成一个序列发送给服务端做检验。这也为我们提供了破解的思路。
破解方法
破解方法很直观,我们生成一组滑动块位置,然后以0.3秒的间隔依次滑动过去,骗过极验的后台。
1,获取原始图片
极验验证码的原始图片会和带缺口的图片一起传过来,但是并不会显示给用户,虽然它就在页面上,但是被设置为不显示。
获取方法也很简单:
仔细分析极验的验证码,你会发现,在标签里面有一个叫geetest_canvas_fullbg 的cavas非常奇怪,鼠标放上去会有完整的图片展示出来。
废话就不多说了,这就是我们要的原始图片。
2,获取带缺口的图片
3,计算滑动距离
获取原始图片和缺口图片以后,就可以开始计算需要滑动的距离。这里,计算距离方法如下:
依次遍历图片的每一个像素,找到原始图片和带缺口图片差异较大的点。这些点都有可能师缺口位置的点
def get_distance(image1, image2, left=57, threshold=60, deviation=6):
i = 0
for i in range(left, image1.size[0] - 40):
for j in range(image1.size[1] - 40):
rgb1 = image1.load()[i, j]
rgb2 = image2.load()[i, j]
res1 = abs(rgb1[0] - rgb2[0])
res2 = abs(rgb1[1] - rgb2[1])
res3 = abs(rgb1[2] - rgb2[2])
if not (res1 < threshold and res2 < threshold and res3 < threshold):
# image2.crop((i,j,i+40,j+40)).save('tmp_cod1.png')
# image1.crop((i,j,i+40,j+40)).save('tmp_cod2.png')
if is_sub_cod(i, j, image1, image2, threshold)://有可能为缺口,需要进一步确认
tmp_imge = image2.crop((i, j