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

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 条回复
matrix67
2014-10-13 17:04:26 +08:00
@est 你太暴力了,有点白色恐怖时期党国的作风,还是关小黑屋吧
lshero
2014-10-13 17:46:03 +08:00
@matrix67 关键是能画出这么多东西来我感觉还是蛮拼的
对了关于一直尝试输入A去破解的这种你说有没有可能某一个ip连续输入A的次数太多了
验证码以后选项就不会出现A了?
est
2014-10-13 19:35:12 +08:00
@matrix67 哈哈。技术是中立的,看怎么用。比如可以用于付款的风控。
matrix67
2014-10-13 20:32:14 +08:00
@lshero 那就得写poc验证了,理论上他设计答案的时候应该36种均匀分布,如果有偏,必然能找到一种破解概率大于 1/36的答案。你的意思在于后台设计已经意识到连续暴力攻击,应该参考关小黑屋策略。

例如草榴社区就不是用验证码来阻挡的,5次错误后锁 ip 15分钟,对于穷举弱密码的攻击者来说,代价就挺大。

再例如,支付宝,5次之后锁密码3小时,但是为了防止有人恶意搞拒绝式服务攻击,他又有短信找回密码的策略,对正常人友好,让攻击者蛋疼。

所以,策略都是可以考虑叠加的,比如验证码加ip。

可以参考 范凯 有一篇反爬虫的博文,里面提到一种移动窗的思想。

没有银弹!!
messyidea
2014-12-01 23:44:25 +08:00
楼主简直不能再赞
chinafeng
2014-12-23 21:51:37 +08:00
楼主这是极验的?
imwower
2015-01-07 16:34:12 +08:00
@wangleineo 谷歌最新的noCaptcha就是看图识别猫咪或者其他东西;
基于语义的词语联想,可以作为验证码的一种模式。比如:
问题:橘子又叫什么?给出几个随机字符,随机排列(像《疯狂猜图》那样)然后让用户点击鼠标,选择正确的答案。(正确答案为:桔子)
其他类似的问题:米饭是由什么做成的?
题库可以由其他用户提供;也可以训练人工智能的问答助手等。
xierch
2015-01-19 20:06:06 +08:00
赞。
刚又看到一家用极验验证的,怎么想都不靠谱。
想来 V2EX 会有讨论,果然不靠谱..

这种方式还是要积极 fallback 到传统验证码才妥当,就像现在 reCAPTCHA 的门牌号一样
nanhuo
2015-06-12 10:09:39 +08:00
哈哈,赞一个,我们也用的极验验证。。
no2oo3
2015-06-15 02:02:14 +08:00
@procen424 最近都在研究极验的验证,正好搜索到你的大作,无奈原文中的go代码https://github.com/procen424/scripts/blob/master/geetest-bypass.go无法下载了,能否传一个给我?感谢
alilialili
2016-05-31 09:32:25 +08:00
SingeeKing
2017-01-07 15:52:19 +08:00
我是回来观望的

ps.我怎么记得 append 最多只能有三条
QUIOA
2020-01-20 22:04:25 +08:00
你的 github 没了

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

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

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

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

© 2021 V2EX