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

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%+
大家尽情玩耍
30512 次点击
所在节点    分享创造
93 条回复
binux
2014-10-13 12:56:36 +08:00
@mornlight A-Z,0-9,我随便用一个a,来个36次也有一次对啊。
procen424
2014-10-13 12:57:17 +08:00
@lshero 或者就一直提交一个固定的答案。比如A,因为每次的正确答案不过是大小写字母+数字中的一个,迟早有一次会碰到A。
这在注册垃圾账号时还能凑合用用,要是跑密码这种场景就太低效了。
当然,前提是验证流程不引入失败惩罚。
mornlight
2014-10-13 13:00:51 +08:00
@binux 噗,这种暴力啊,我刚才理解成对同一个验证码穷举了。这样的话只能怪网站没有失败惩罚机制吧,流程设计上就已经不完善了。
wangleineo
2014-10-13 13:15:35 +08:00
@procen424 嗯,加上推导就更难了。”什么东西喵喵叫?请在图上点一点“ 哈哈
panlilu
2014-10-13 13:17:23 +08:00
看到楼主的append,感觉好逗啊哈哈哈哈,Good Job
sriuu
2014-10-13 13:18:32 +08:00
收藏留名,最喜欢看到这种东西了~ ~
procen424
2014-10-13 13:19:58 +08:00
@panlilu 刚才打开豆瓣那一刻,我也是忍俊不禁了。。。。。。
procen424
2014-10-13 13:25:03 +08:00
@panlilu 靠。。。现在首页登陆也要输文字验证码了。。。
lshero
2014-10-13 13:31:17 +08:00
@foxsaid 错一次就换题了吧
wangleineo
2014-10-13 13:44:39 +08:00
@akfish 三个作者都是Google的,Google果然在探索人和机器的边界哦
foxsaid
2014-10-13 14:11:19 +08:00
@lshero 前面说过,它没有错误惩罚,我只需要输入A ,就有 1/36个机会正确。这个思路而已·····
airyland
2014-10-13 14:14:53 +08:00
cool........
changsha
2014-10-13 14:22:22 +08:00
hahahah
est
2014-10-13 14:28:56 +08:00
@bigtan 是这个意思。所谓行为判断,就是有一点行为不符合预期,那就是异端。直接给咔嚓。比如命名请求一个html的时候,客户端是支持flash控件,紧跟着后一个,又不支持了,那么直接咔嚓。再比如用cavans探测字体是否安装。就算你用headless browser去完全模拟用户行为,也是能探测出蛛丝马迹的。
11138
2014-10-13 14:38:01 +08:00
我来总结一下吧:
传统方式的验证码比楼主提及的“基于行为的验证安全技术”的安全性提高144.78倍。

另外,昨天他们都用了什么方式来修复问题这也会让人怀疑他们的技术经验(不评论技术水平)不太足够。
qiushibaikeHR
2014-10-13 15:02:33 +08:00
糗百需要这样的楼主来上班~
lshero
2014-10-13 15:06:06 +08:00
@foxsaid 额,脑子抽了一下,没反应过来
ichou
2014-10-13 15:12:49 +08:00
感觉好欢乐 极验的盆友这个月奖金估计没有了 哇咔咔~
matrix67
2014-10-13 16:37:04 +08:00
@lshero 我想出来这个验证码是怎么生成的,搞一个大的key-value对,对应文字-图片,每次生成后台随机取四个文字,与其中一个图片,五个元素组成一张验证码
gowithwind
2014-10-13 16:41:09 +08:00
@matrix67 破解这个东西感觉还是容易,主要是建立足够大的特征库。

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

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

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

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

© 2021 V2EX