众所周知,验证码是用来防机器的。但是,随着神经网络的发展,近几年验证码难度持续上升,这玩意儿的存在存粹就是一种负担,特别是国内到处都是的【Ji验】。本文针对“J验”及其他类似验证方式。
项目地址GitHub - yixinNB/FuckCaptcha: AI check CAPTCHA;本项目实现了对拼图型验证码的识别与自动拖动,在某主流验证码的官网上的测试通过率达到95%,允许图片中包含文字、干扰线、颜色差别、大小写字母等,使用传统算法,不进行模型训练。本项目同时发现了国内某大型验证码公司所谓的拖动轨迹分析存粹就是个渣渣,啥也不是。
判断人机原理
1.拖动
2.拖的背后
轨迹分析
首先会记录你拖动的轨迹(官方承认),根据轨迹初步判断是否为机器人。
例如直接平滑地拖过去100%提示“错误,请重试”(亲自实验了的)。

浏览记录分析
如果仅仅只在一个或几个页面进行大量验证码验证,那是肯定过不去验证的。这个肯定是难度最大的部分,也是最能有效防止脚本攻击的东西,这点是自己很难写的。模拟也很烦,资源消耗也高。这里不再过多讲述。
开始识别验证码
肉眼一眼就可以看出有一个十分明显的深色区域,识别的第一步就是精准找到它(误差要求≤2像素,网上用python的开源库很多都达不到这个要求)
由上图可见,干扰肯定会有的,如果简单的判断深色区域肯定会被干扰影响。
主要算法有判断该深色方块的大小,形状,还有周围的颜色,整个识别区域整体的颜色,再根据其他疑似区域的数据来综合判断。这个就需要有耐心,一点一点去改进就行。
前面写的已经写过,找到这个黑方块才是第一步,也是最简单的一步。
拖动的过程
拖动的过程肯定是模拟真人拖动的过程,下图是我最开始用的算法,因为代码量巨大,并且还是可以被识别判定为机器,现在已经停止使用

因为现在还在实验阶段,没有完全成熟的代码,所以先把采集到的真人数据发出来,圈出来的地方就是需要特别注意的。
识别测试
bug还挺多,寒假上线测试
基本完工了
先来张GIF给你们预告下,免得你们说我瞎吹
jio印
19.12.29已经可以大致模拟了,机器拖动首次通过J验
