全自动区分计算机和人类的图灵测试
2002年,路易斯在卡内基梅隆第一次提出了CAPTCHA(验证码)这样一个程序概念。该程序是指,向请求的发起方提出问题,能正确回答的即是人类,反之则为机器。
对于验证码,人们有一个理想预期,就是假设:提出的问题要容易被人类解答,并且让机器无法解答。但是随着技术不断的发展,尤其是图像识别技术,曾今机器无法解决的问题,一个一个被攻克,所以验证码技术在攻防双方的较量中一直在快速发展。
先看下传统验证码,这张图可能暴露了你的网龄
验证码大致遵循这样的规则,越复杂相对越安全,但用户体验越低,比如看看这几种验证方式。
中庸之道这里也适用~
滑块验证码是最常见的行为式验证码,广泛出现在登陆,绑定,防刷等场景中,并且在近几年在技术也经历了多次迭代。举例常见的三个版本。
样式二 相对复杂的,三张图(背景图,有缺口的背景图,小滑块)
前两种相对简单
样式一
使用selenium或者其他模拟方式,找到滑块拉到最右边即可
样式二
两张图都是 24bit-color,并且在大小和颜色都是一样的,可以理解为除了滑块区域不同,其他地方都是一张图。
所以,我们就可以通过遍历像素点的方法,找到最左上角颜色不一致的点B,就是滑块要滑动的终点(计算滑块左上角点A到B的距离,再通过样式一的方法拖动滑块)
这里可以执行js隐藏对应上层或者下层的背景图 document.querySelector('.geetest_canvas_bg.geetest_absolute').style.display = 'block'
样式三
背景图是24bit-color,缺口图是32bit-color
所以,上面的方法不适用了。
以XX平台为例(此处提供代码并不能完成破解,只是提供交流思路)
2、控制滑块如何滑动
先加速再减速 L=V0t + 1/2at2(是不是很熟悉的公式呢)
其他验证码也有一点介绍
目前大多数平台提供的验证码在经过大量实际调用场景后,随机仅仅是滑块出现的位置是随机的,但上述的背景图片基本是固定的图片库,所以经过大量的访问是可以拿到所有的图片,再针对不同图片进行不同的匹配策略,但是成本较高,这里不做说明。
写在做后,验证码最终的目的是用来区别人和机器,所以人工打码虽然成本高,但是也的确最为无赖,毕竟真的是人在背后。