豆瓣登陆验证码的识别脚本

2014-10-12 17:44:35 +08:00
 procen424
无意间发现豆瓣在登陆页使用了极验验证提供的验证码服务。
总觉得吧,这东西好像不安全。这个“基于行为的验证安全技术”到底是啥呢?
看了看调用的js,大概是只要鼠标发生移动就记录xy坐标和时间,最后对这个序列以及最终停下的位置分别加密,发给服务器判定。

那么问题来了。。。
1.最终停止位置xpos
每次验证请求都会得到三张图,fullbg:完整的验证图形、slice:拼图那一小块、bg:拼图对应那一块加阴影的fullbg,对比fullbg和bg,哪一列像素上开始发生较大变化那就是xpos
如果以后不提供fullbg,只要得到几张不同的bg,求它们的交集即可得到fullbg,不需要机器学习算法
2.鼠标移动轨迹a
根据xpos可以确定大概需要生成多少帧
x随帧编号产生不均匀增加,直至xpos,开始是用arctan函数模拟的,后来发现完全没必要,建个bitmap[xpos],从里面随机挑选不重复项选就行了
y用长周期小振幅的sin函数模拟
t随时间产生不均匀增加,并加入一些跳变
用以上方法填充a
3.加密
不需要破解,从js中剥离加密相关的函数,放入js虚拟机,传入xpos和a并执行,获得加密后结果

问题解决,大家应该知道哪家强了。。。

代码戳这里
https://github.com/procen424/scripts/blob/master/geetest-bypass.go
写得仓促,码风dirty

说明
go run geetest-bypass.go -c=次数 -gt="站点的gtid" 默认尝试豆瓣的验证码100次
success = 1 message = blahblahblah 通过
success = 0 message = failed 未通过
forbidden 判定为机器人

截至发帖时,识别通过率99%+
大家尽情玩耍
30237 次点击
所在节点    分享创造
93 条回复
7654
2014-10-13 10:41:37 +08:00
@wangleineo 遇到过这种验证码,图片上有几个文字,需要点亮正确的文字
其实google的那个被认为变态的验证码,不需要全部输入对,允许有错误的。它有两部分,其中一部分是实体影印出来的,用的人越多OCR识别也越高,对图书数字化有帮助
gkiwi
2014-10-13 10:42:10 +08:00
@wangleineo 想法很好玩,可以是各种猫狗.

问题来了:
物品识别的算法目前已经有不少实现,一般只要人能看出的,机器都能识别出来轮廓,虽然他不晓得这个是什么,匹配下触发点击就好了,根本不需要像字母验证码那样子完全匹配.另外就是出现的东西一定要常见,而且图像中和他类似形状的很少,如果常见的话模式就容易匹配.

准确率说不好.

但这个依然是个好点子.
Showfom
2014-10-13 10:43:32 +08:00
最恶心的还是腾讯微博的拼图验证码
viaNull
2014-10-13 11:11:23 +08:00
留名学习
wangleineo
2014-10-13 11:13:37 +08:00
@7654 是的,reCaptcha一个聪明的地方就是用人眼解决OCR做不到的识别。

@gkiwi 嗯,人类能做机器不能做的事情越来越少了。不过说到轮廓识别,背景图中一定也有些轮廓可以识别的,可以干扰机器的算法。
matrix67
2014-10-13 11:55:59 +08:00
@wangleineo reCaptcha更聪明的地方就是拿ocr失败的图来叫人识别,google的ocr已经失败了,所以你要破解reCaptcha相当于和google拼ocr

还有一点就是放两个,提个已经识别的,一个未知的,已知的通过大规模分布式人力验证
akfish
2014-10-13 12:08:33 +08:00
几年前看到过一篇paper,用的是随机旋转的图片做验证码,用户需要把图片调整到正确的姿态。
因为目前没有通用的算法识别出任意图片的”上“方向是什么,对于人类则很简单。
akfish
2014-10-13 12:12:36 +08:00
lshero
2014-10-13 12:15:07 +08:00
http://www.cmpassport.com/
这种验证码有破解思路嘛
除了把题库全都下载下来
hustlzp
2014-10-13 12:33:04 +08:00
LZ甚吊啊!
procen424
2014-10-13 12:34:16 +08:00
@wangleineo 遇见过这样的验证码,体验非常好。验证过程不仅涉及模式的识别,还有推导,这都是机器不擅长做的事,破解难度应该比较大。
matrix67
2014-10-13 12:34:29 +08:00
@lshero

http://imgcode.cmpassport.com:4100/getimage?clientid=9&rnd=0.908878123820685328

应该不是题库,随便改几个数字都有返回,
mornlight
2014-10-13 12:38:34 +08:00
@procen424 话说,你有研究过百度贴吧的那种汉字+拼音验证码么,感觉也很难识别的样子。
foxsaid
2014-10-13 12:40:57 +08:00
@lshero
http://www.cmpassport.com/

如果是这样,暴力破解有难度吗?···
假设我从A-Z,0-9无脑随机刷······
tzrens
2014-10-13 12:41:04 +08:00
<script>alert('1')</script>
mornlight
2014-10-13 12:44:24 +08:00
@tzrens 少年,你不会想在V2搞XSS吧,这里不是一般的论坛
mornlight
2014-10-13 12:45:29 +08:00
@foxsaid 验证码哪来暴力破解,你提交一次验证码就换了啊。
procen424
2014-10-13 12:48:57 +08:00
@lshero 图案部分和其它内容没有重叠,很容易提取出来。既然是面向公众的验证码,要保证每个人都看得懂,图案肯定不会特别多。遍历所有图案,然后人工或者使用第三方资源标记。剩下的就是图形匹配和传统的文字验证码识别问题了,有很多成熟的方案。
下载题库貌似是避免不了。
因为网站没有失败惩罚机制,而且答案空间不大,随机猜测是个可行的办法。
kisshere
2014-10-13 12:50:15 +08:00
@tzrens 好高大上的一次xss攻击
9999999999999999
2014-10-13 12:51:13 +08:00
楼主敢不敢公布手机号?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/138479

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX