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

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%+
大家尽情玩耍
30194 次点击
所在节点    分享创造
93 条回复
miyuki
2014-10-12 18:28:50 +08:00
v2ex找po主
bigtan
2014-10-12 20:01:59 +08:00
我去黑他们员工去,楼主简直不能再赞。
Iblard
2014-10-12 20:09:02 +08:00
Nice Job.
vipdomain
2014-10-12 20:18:33 +08:00
niubi
14
2014-10-12 20:23:37 +08:00
干得漂亮!
belin520
2014-10-12 20:24:32 +08:00
极验证会不会因为你这个脚本玩完呢?哈哈!
shiny
2014-10-12 20:26:36 +08:00
记得极验验证的人在知乎信誓旦旦用一堆概念说破解不了。
procen424
2014-10-12 20:38:26 +08:00
@bigtan 我特想问问他们,“安全性提高44.78倍”,这个怎么算的啊。。。
procen424
2014-10-12 20:45:53 +08:00
@belin520 玩完可不太好。希望他们能改进算法,打败我这个简陋的脚本。
zzlettle
2014-10-12 21:11:42 +08:00
楼主要端了极验证的技术核心壁垒。
哈哈
看楼主的分析,这种简单的验证一般都不可能靠谱。
一定要配合网站的后端搞出比如汉字这样的复杂验证码才是解决办法。验证码要你手动输入汉字,才是真正的破解无门我觉得。
procen424
2014-10-12 21:16:27 +08:00
@zzlettle 是的。写一个reCAPTCHA的bypass算法就要比极验的难很多很多,更何况复杂的汉字了。
貌似极验已经发现了这个帖子,浏览器端的js库神速更新了。
反应非常迅速积极,这点需要赞一个。
zzlettle
2014-10-12 21:54:06 +08:00
他们核心的东西不改变,就修改了个JS库是没用的。
就是要搞成汉字这样的,否则什么都没用。
romotc
2014-10-12 21:56:22 +08:00
挡不住人肉验证的码都不是好码
bigtan
2014-10-12 22:14:21 +08:00
@romotc 除了谷歌那套人都看不懂的验证码,估计能挡住人肉的比较少吧
Mihuwa
2014-10-12 22:18:52 +08:00
膜拜楼主。
Gauin
2014-10-12 23:18:48 +08:00
我去豆瓣体验过拖动验证 确实感觉不靠谱。。。

给楼主点赞

验证码的作用是区别人和机器,防止机器恶意注册。楼主的脚本证明了技术也是可以破解发现漏洞的。

极验证,这样的验证方式,感觉是方便了用户,不用输入较难识别的数字或者文字,但却本末倒置了,如果机器能破解这样的验证方式,就玩完了。
bigtan
2014-10-12 23:42:44 +08:00
@procen424 据我跟他们工作人员沟通,据说已经封了;可以测试一下。然后他们的系统是Python开发的,在武汉这个地界上用Python的真是极少。
procen424
2014-10-13 08:32:11 +08:00
@bigtan 是的,旧脚本已经不能用了。极验在本地端改了一个函数,服务器端加入user-agent校验。新脚本通过率与正确率重回99%+。
感觉要发展成拉锯战了。。。
procen424
2014-10-13 08:42:14 +08:00
@Gauin 事实证明,和传统文字验证码相比,机器非常容易通过极验的验证。而且,最令人震惊的是,只需要很简单的算法和极低的计算代价就能达到接近100%的通过率。
目前,他们的封禁处理仅仅是改个js代码里的计算式、后端加入ua检查。如果以后仍是这样的对策,而不改进核心的模式识别算法的话,前途非常堪忧。
est
2014-10-13 08:45:28 +08:00
极验证思路是对的,但是方式不够狠。直接服务器判定各种资源请求先后以及参数正确性,少一个直接封IP。

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

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

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

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

© 2021 V2EX