众所周知,验证码是用来防机器的。但是,随着神经网络的发展,近几年验证码难度持续上升,这玩意儿的存在存粹就是一种负担,特别是国内到处都是的【Ji验】。本文针对“J验”及其他类似验证方式。
项目地址https://github.com/yixinNB/FuckCaptcha
判断人机原理
1.拖动
2.拖的背后
轨迹分析
首先会记录你拖动的轨迹(官方承认),根据轨迹初步判断是否为机器人。
例如直接平滑地拖过去100%提示“错误,请重试”(亲自实验了的)。
浏览记录分析
如果仅仅只在一个或几个页面进行大量验证码验证,那是肯定过不去验证的。这个肯定是难度最大的部分,也是最能有效防止脚本攻击的东西,这点是自己很难写的。模拟也很烦,资源消耗也高。这里不再过多讲述。
开始识别验证码
肉眼一眼就可以看出有一个十分明显的深色区域,识别的第一步就是精准找到它(误差要求≤2像素,网上用python的开源库很多都达不到这个要求)
由上图可见,干扰肯定会有的,如果简单的判断深色区域肯定会被干扰影响。
主要算法有判断该深色方块的大小,形状,还有周围的颜色,整个识别区域整体的颜色,再根据其他疑似区域的数据来综合判断。这个就需要有耐心,一点一点去改进就行。
前面写的已经写过,找到这个黑方块才是第一步,也是最简单的一步。
拖动的过程
拖动的过程肯定是模拟真人拖动的过程,下图是我最开始用的算法,因为代码量巨大,并且还是可以被识别判定为机器,现在已经停止使用
因为现在还在实验阶段,没有完全成熟的代码,所以先把采集到的真人数据发出来,圈出来的地方就是需要特别注意的。
识别测试
bug还挺多,寒假上线测试
求大佬解决BUG(网络传输问题) https://github.com/yixinNB/cs-internet
基本完工了
先来张GIF给你们预告下,免得你们说我瞎吹