玩CF途中为什么玩cf不能全屏要输入验证码啊!!输入的时候还有时间…

UPDATE: 有人提到验证问题中文字的识别。所以加入了 tesseract 试了下,Good Case不多,需要改进。这里只是展示可行性。&br&----&br&中午看到这个验证码就囧了。&br&以前和同学讨论过图片验证码的问题,结论就是不靠谱。&br&&ul&&li&图片过于复杂、混淆过多、条件太诡异时会挡住大部分正常用户&br&&/li&&li&容易被枚举,题库太弱,不如字符组合可能性多&/li&&li&破解门槛不一定高于字符型Captcha&/li&&/ul&目测12306图片是低分辨率网络图片。猜想用公共服务就足够破解了,不需要自己搞机器学习什么一类。公共服务例如:&br&&ul&&li&百度识图 &a href=&///?target=http%3A//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&百度识图——以图搜信息,发现更多可能&i class=&icon-external&&&/i&&/a&&/li&&li&Google图片 &a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/li&&li&...&/li&&/ul&撸代码,试运行,一次通过,放截图:&br&第一次:&br&&img src=&/33c77854a_b.jpg& data-rawwidth=&293& data-rawheight=&190& class=&content_image& width=&293&&&img src=&/782ac71ddf6538bdaaa7_b.jpg& data-rawwidth=&738& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&738& data-original=&/782ac71ddf6538bdaaa7_r.jpg&&&br&&br&第二次:&br&&img src=&/fcc5cefae78f7e9d386ad_b.jpg& data-rawwidth=&293& data-rawheight=&190& class=&content_image& width=&293&&&img src=&/8e8ec015f9f_b.jpg& data-rawwidth=&728& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&728& data-original=&/8e8ec015f9f_r.jpg&&&br&挂上 tesseract 识别试试(其实用过都知道官方训练数据准确率不高),来个Good Case。&br&&img src=&/7a5e62c02c7b33e6ced100a2f7bf31b6_b.jpg& data-rawwidth=&293& data-rawheight=&190& class=&content_image& width=&293&&&img src=&/a3cb0daed831e6f85c7ca0_b.jpg& data-rawwidth=&806& data-rawheight=&368& class=&origin_image zh-lightbox-thumb& width=&806& data-original=&/a3cb0daed831e6f85c7ca0_r.jpg&&&br&&br&结论:&br&233333 ~&br&&br&代码:&br&&a href=&///?target=https%3A///andelf/fuck12306& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&andelf/fuck12306 · GitHub&i class=&icon-external&&&/i&&/a&
UPDATE: 有人提到验证问题中文字的识别。所以加入了 tesseract 试了下,Good Case不多,需要改进。这里只是展示可行性。 ---- 中午看到这个验证码就囧了。 以前和同学讨论过图片验证码的问题,结论就是不靠谱。 图片过于复杂、混淆过多、条件太诡异时会挡住…
知乎首答一发!!!!&br&&br&&br&还记得从前,验证码还只是这样:&br&&img src=&/a13abdafeaaebbd_b.png& data-rawwidth=&60& data-rawheight=&21& class=&content_image& width=&60&&&br&&b&作为一名优秀的程序猿的你在想,为什么不做一个自动识别软件,验证码全是数字,你只要收集一个包含10个数字的训练库,把图片二值化然后分隔单个字符最后对比训练库里的数字最终识别,so easy!&/b&&br&作为一个有情怀的天才程序猿,你花了1天搞定了该程序,自豪感爆棚。&br&自己用了几天赶脚非常不错,于是你不仅自己用,还发给亲戚朋友们用。尽管它只是省了3秒钟的输入验证码的时间不过你的亲戚朋友们因为觉得它确实很高大上,纷纷夸你并把它分享给自己的朋友。&br&&br&然而,终于有一天,你的作品被传到了另一个天才程序猿手里,非常不巧的是,&b&他就是运营这个网站并且整出“验证码”这玩意儿的那个程序猿。&/b&他的工作任务就是确保在用户电脑前执行登陆或者注册操作的是一个“人”而不是某个黑科技刷子。&br&看完你的东西他瞬间觉得日了狗了,觉得你的软件是对他工作的侮辱,是在向他的智商发出挑战...&br&&br&于是,这货大手一挥,后来的验证码变成了,这样:&br&&img src=&/2a105b98c92afa83ffd5ba_b.png& data-rawwidth=&89& data-rawheight=&25& class=&content_image& width=&89&&&br&次日你刚起床,发现你的邮箱已经炸了,里面全是大家在向你反馈你的软件不能用了。于是打开网页看到了新版的验证码。&br&你冷哼一声,当然,你是一个天才程序猿,你只简单的向你的训练库里又添加了52个大小写英文字母就解决了这个问题。完了以后你还顺手添加了几个日文平片假名,也没别的目的,就是多装个B。&br&于是你的软件又能用了。&b&你觉得你的智商已经碾压了这个做网站的货。&/b&&br&&br&然而,不可避免的,过了几天你发现,验证码开始丧心病狂了,它已经变成了这样:&br&&img src=&/989e1cad214bf0b2e3b2bbb_b.png& data-rawwidth=&67& data-rawheight=&22& class=&content_image& width=&67&&&br&&b&现在你就觉得有点懵逼了&/b&,汉字那么多,你觉得这个对面那个做验证码的程序猿就是想玩儿死你。不过没关系,换汤不换药。于是你又花了一个礼拜,写了一个字符自动截取的代码,在网上整理出了常用汉字3000个,并且分别截取了这3000个字的黑体、宋体和楷体的图片并放进了训练库里。你的程序又能用了。&br&这次以后你觉得很累但是真的很有成就感,你觉得你就是全天下最diao的程序猿。然后你就去补睡了。&br&&br&然而,你不会意识到的是,在你睡觉的时候,另一个程序猿正在被你逼疯。&br&几天以后,你发现验证码突然变得开始反人类:&br&有,这样的&img src=&/f8bbac59d82ae647e4987a_b.png& data-rawwidth=&64& data-rawheight=&23& class=&content_image& width=&64&&这样的&br&&img src=&/1f9d9c6b491b74efd133_b.png& data-rawwidth=&117& data-rawheight=&29& class=&content_image& width=&117&&这样的&img src=&/fde2917806a_b.png& data-rawwidth=&114& data-rawheight=&30& class=&content_image& width=&114&&这样的&img src=&/f9bf4de67bedfc9a1e4d45_b.png& data-rawwidth=&82& data-rawheight=&30& class=&content_image& width=&82&&还有这样的&img src=&/fe23544eada58ca0b06408bfe9f2f216_b.png& data-rawwidth=&79& data-rawheight=&38& class=&content_image& width=&79&&- -|&br&&br&等到某天你再从睡梦中醒过来的时候会发现,整个世界都已经不一样了,你的邮箱里全是愤怒的朋友、朋友的朋友还有朋友的朋友的朋友。&br&他们不单单只吐槽你的软件不能用了,而且更关键是!!&b&喵了个咪的这TM啥玩意儿啊!直接用眼看都特么看不清这些验证码到底是个毛了啊!!!!&br&&/b&&br&&b&看到这些牛鬼蛇神我猜你整个人都已经斯巴达了!!!&/b&&br&&br&但是怎么办,你是天才程序猿!你不能输啊! &br&于是你系上头巾,泡好咖啡,借了各种书籍撸起袖子准备开干,势要搞定这些验证码。&br&&br&此时,电话响了。&br&&br&是你的老妈。&br&&br&你妈说:儿啊,你妈跟你爸打算出去度个假,想要在网上订个火车票,&b&上了12306的网站&/b&,&b&&u&但是它最近不知道为什么突然换了一种验证码啊。&/u&&/b&你爸妈是真老了,看了看发现是真不会输这个验证码,听二姨说你搞了个什么软件能直接自动给输了,你给我看看呗。&br&&br&你轻松的应承下来,不急不慢的打开12306网站。&br&&br&终于&br&&br&你惶恐的小眼神一眼就看到了如下玩意儿:&br&&img src=&/0d4acb4cbf5c807c0175e_b.jpg& data-rawwidth=&854& data-rawheight=&640& class=&origin_image zh-lightbox-thumb& width=&854& data-original=&/0d4acb4cbf5c807c0175e_r.jpg&&&br&&br&&br&&b&&u&听说大部分程序狗高中的时候都学的理科!!!!!!!!!!&/u&&/b&&br&&br&&br&&b&&u&就问你服不服!&br&&/u&&/b&&br&-----------------------------------------------------------分割一下-----------------------------------------------------&br&&br&&br&&br&&br&槽吐完了再给大家看一看最初的那个清纯简单的验证码&br&&img src=&/a13abdafeaaebbd_b.png& data-rawwidth=&60& data-rawheight=&21& class=&content_image& width=&60&&&br&1秒辨别,2秒输入&br&&br&&br&所以想要表达的是,其实自动识别验证码这种东西,只要你不是黄牛党僵尸号出售员刷票专业户这种职业,花尽了心思去做完了也就只是装装X,并没有什么卵用。何必呢。&br&&br&&b&最后想一想人家对面哪位一直跟你杠正面,不停开脑洞搞出更加变态的验证码的小哥,你熬一个夜意味着他马上得熬一个夜,于是你又熬两个夜,他再熬四个夜...... 0.0 炸!&/b&&br&&b&所以,大家都是程序狗,大学选专业的时候一不小心走了神才踏上这条不归路的,互相放一条生路吧!!!Q.Q&/b&&br&&br&&br&&br&&br&&b&------------------------------------------------------------------再割一下------------------------------------------------&/b&&br&&br&&br&(8.29)感谢大家的点赞~ 知乎首答就这么多赞开心得不得了lol。&br& 有同学问我说我似乎没有真正回答为什么程序猿不做自动识别的这个问题&br&&br&&b&答案就是,又不是没做出来过&/b&&br&&br&好吧我想我们可以来个类比:&br&做验证码的那位程序猿A就像是拿了一个花瓶来让大家认,做自动识别程序的小哥B就像是一直试图教机器认识这是个花瓶一样。&br&&br&起初,A为了反击B,给花瓶上色、用布包起来只留个轮廓或者干脆掰掉一个把手来试图让B的程序识别不了这个花瓶。&br&可是B是个很牛X的程序猿啊而且他调教的程序也相当的蒸汽!每每都能拆掉A出的奇招。&br&但是每次A只要随手给出一点变动,B就要花上一两天来继续优化他的程序!&br&&br&&br&可是各位,你们有没有发现再这样下去无非只有一个结局。&br&&br&就是... ...&br&&b&A说:&妈蛋!算你狠!LZ不跟你玩儿了!大不了咱俩鱼死网破!&&/b&&br&&b&然后顺手直接把花瓶砸了......&/b&&br&&b&&你丫倒是接着拼起来认啊!!&&br&&/b&&br&&br&&br&&br&所以事实就是,现在的很多奇葩验证码已经很难做到自动识别了,而且就算有人做到了,估计识别率暂时也无法保证,而有情怀的程序猿们一般都会把用户体验看得很重,残次品是不会到处去发给大家炫耀的。&br&&br&况且&br&等到有一天程序猿B调教好了程序又能识别了&br&&br&A只要把花瓶渣捡起来砸得更碎一点=、=
管你们自己用眼睛还能不能识别&br&&br&&br&&b&----------------------------------------------------------------------&/b&&br&部分图片来源于网络,侵删。
知乎首答一发!!!! 还记得从前,验证码还只是这样: 作为一名优秀的程序猿的你在想,为什么不做一个自动识别软件,验证码全是数字,你只要收集一个包含10个数字的训练库,把图片二值化然后分隔单个字符最后对比训练库里的数字最终识别,so easy! 作为一…
你可能不知道的是,盲人等残障人士使用电脑、手机等信息产品的难度被大大高估了,他们平时也是可以顺畅的使用电脑、手机,顺畅的上网的。事实上,盲人不仅仅作为用户,就目前所知的,知乎团队里就有盲人同事,而QQ、QQ空间、QQ音乐乃至微信的版本,都有过盲人工程师的参与。&br&&br&我非常认真地写下了这篇回答,是为了聚沙成塔,尽一点点力量,给周围的残障人士一些帮助,消除人们以往因为不了解而造成的误解。&br&&br&关于这个问题,如果用一句话来概括,应该是:现有的计算机技术已经为盲人修了盲道,盲人或者其他视力障碍者是可以正常走的,12306的验证码就像在盲道上突然挖了个坑,而现在的诉求是在坑上搭上木板,而不是重新为盲人修一条路专门修一条路。&br&&br&帮助残障人士能够顺畅的使用电脑和互联网,有一个术语叫 Accessibility(中文有时翻译为可及性)。&br&&br&必要要了解的几点:&br&&br&&b&1. 盲人可以正常使用电脑,如你我一样,只是使用方式不同&/b&&br&&br&&p&很多人之所以不理解,是不知道现在盲人本来就是可以顺畅使用电脑的。Windows 系统、主流浏览器都有 Accessibility 的支持,使得盲人可以借助键盘、语音等使用电脑,如同正常人一样,只是操作方式不同而已。其实不仅仅是电脑,手机也一样,iPhone 和 Android 系统,同样早已支持盲人使用。我在盲人按摩店里,看到盲人师傅在拿电脑记账,使用手机聊微信,都是很正常的。&/p&&br&&p&事实上现在就有很多盲人在使用知乎。以文字为主体的知乎,并没有对盲人用户关上大门,他们可以顺畅的阅读和分享知识,在网上看他们的回答,你不会感觉到他们和其他人的差别。据说知乎还有盲人员工。&/p&&br&&p&互联网的技术早就有为盲人铺路,很多网站盲人都可以使用的,只是普通人或者非技术领域的人不了解,千万不要认为盲人就用不了网络,用不了电脑。&br&&/p&&br&&p&&b&2. 并不需要重新做一个盲人用的12306,只需要改进验证码&/b&&/p&&br&&p&正因为基础的科技和工程进展已经做了大量工作,只要12306的网站符合通常的规范,盲人使用12306本身是没有问题的,现在的问题是卡在了验证码上面。&/p&&br&&p&验证码带有能够帮助视力障碍者访问的功能(如语音辅助),并不是多么新鲜的技术,在业内一直都有使用。上国外的网站,在需要验证码的地方,旁边常常有一个朗读的选项,是一个轮椅的图标(不要担心残障人士点不了图标,事实上所有功能都应该能通过键盘访问到,也是 Accessibility 的要求)。在国外的大多数网站中,验证码带有 Accessibility 是标配。&br&&/p&&br&&p&&b&3. Accessibility 的法律和规范问题&/b&&/p&&br&&p&美国政府曾推出劳工康复法案的508条款,要求当联邦机构开发,采购,维护,或者使用电子和信息技术,从而使得残疾的联邦雇员能和非残疾的联邦雇员一样都能够访问并且使用其信息和数据,除非它会给机构带来过度的负担。508条也要求来自公众寻求信息或者服务的联邦机构的残疾人,能够访问和使用信息和数据,如同提供给公众的那些非残疾人一样,除非它会给机构带来过度的负担。&/p&&br&&br&这直接推动了 Accessibility 的发展,很多大公司在产品当中都会考虑 Accessibility 的规范。例如,普通人可能注意不到,很多软件里,在对话框中会专门针对盲人阅读器做一些适配。即使像 Google, Facebook 等拥有巨大体量用户的产品,在注册流程需要输入验证码时,同样必须要满足 Accessibility 的要求。&br&&br&&p&尽管这项法律在实践中有时会有矫枉过正的问题,但是在计算机和互联网领域,客观上还是帮助了全球范围内的很多残障人士,今天我们周围的很多残障人士能够使用顺畅的使用 Windows,使用浏览器上网,使用手机(iOS 和 Android 系统),正是因为微软、浏览器厂商们、Google 等满足 Accessibility 的要求。&/p&&br&&p&我国在标准和规范方面仍然有很多地方要补课,但是长期来看,将对残障人士的关怀纳入到工业界当中是大势所趋。&/p&&br&&p&事实上中国目前的很多产品同样也符合 Accessibility 的规范,能够被残障人士正常使用。然而,12306 在验证码模块并没有做到。&/p&&br&&p&&b&4. 很多人在为残障人士顺畅使用信息产品而努力&br&&/b&&br&浅川智惠子(Chieko Asakawa),是 IBM 杰出工程师(DE),熟悉 IBM 内部体制的人就会知道,这个职位非常高,需要有极大的成就才能取得。她14岁失明,1985年加入IBM东京研究实验室,1997年开发了第一个可用声音读出网页内容的浏览器。为什么她以及 IBM 能够在这个领域取得很多进展?这样的产品未必有很强的赢利能力,但是因为有政府的支持和法律的要求,在这些领域有突破的企业,商业上会更有竞争力。这也在为我们的社会 Do Good.&br&&br&有一位认识的老师,在做包容性设计,就是在设计当中能够尽可能的包容普通人和生理有障碍的人士。我觉得这是特别正向的事。&br&&/p&&br&&p&&b&5. 关于反对的声音&/b&&/p&&br&有代表铁总的人出来说,你们愿意为了支持残障人士的使用,导致成本上涨,支付更高的票价么?这是一种小聪明的逻辑,企图让普通人和残障人士对立起来,当然本质上还是对于技术的了解不够,只是片面站在自己立场上看问题。&br&&br&如前面所说:&br&&br&一方面对 Accessibility 的支持并不会导致成本大幅度上升。很多人以为是要给视觉障碍者单独做一套系统,而实际上现有的系统本身就支持(这是浏览器和互联网技术业已形成的一系列规范带来的好处,这个世界还是有很多人在 Do Good),现在只是希望在图片验证码之外支持 Accessibility。如果这样都可以以此为理由涨价,用一句流行语来说,怎么不上天。&br&&br&另一方面,中国本来就有很多支持保障人士的经费,例如企业要缴纳残疾人就业保障金等等,在政府和接受政府经费、政府作为股东的企业,也应该有相应的体现。现实当中一些国内的互联网公司已经做到了对残障人士的支持(符合 Accessibility 的标准),而作为国有背景的12306却不支持,这非常遗憾。&br&&br&&b&6. 但行好事&br&&/b&&br&我们的社会现在还有太多不完善的地方,有太多可以改进的空间,能让很多人的生活变的更好。特别希望大家都能更开放一些。就像街上的盲道,现在不少地方修的像笑话,盲道上面处处是陷阱,让人失笑的同时不禁为真走在上面的盲人担心,而钱也没少花。既然同样是要做这些事,我们完全可以做的更好一些。&br&&br&视力障碍者使用12306购票,技术上并没有特别大问题(具体可能还得做验证码这块的朋友来细看)。可能很多人都不了解,大多数浏览器本身都是满足 Accessibility 要求的。如果真有困难,也是在技术的层面来讨论。我觉得不舒服的,是网络上很多人是在冰冷的另一个纬度上说话,否定残障人士的权利,而不是从技术上说话。&br&&br&科技的发展,最终应该造福社会。因为全世界科技工作者的努力,让残障人士(例如盲人)使用电脑和网络,这样在很多人眼里觉得不可思议的事,早已成为现实。 这样的好事,应该让它继续生根发芽。&br&&br&Do Good.&br&&br&&b&7.写在后面&br&&/b&&br&现在知乎里动不动就拿政治正确说事(之所以提到这个是因为这个问题下面,已经有些回答再谈左右、谈政治正确了),好像要极端点、露骨点才显得现实。然而我们现在的政治正确真的够么?担心对残障人士的合理照顾会影响到普通人的利益?就好像对面黄肌瘦的人们讲,胖的时候可是会得糖尿病的,所以你们要少吃点。&br&&br&我觉得有时候我们可以多给一些善意,坚持一点点政治正确。&br&&br&----&br&在知乎里写了几年东西,基本上都是平时的碎片时间、睡觉前、拒绝朋友叫我出去打德州的时候。觉得这是很好的积累,既能够帮助别人,也能够让自己有总结的机会。&br&&br&这几天被列入了知乎年度荣誉会员候选名单,我觉得很有纪念意义,算是一种情怀吧。如果有帮到你,请投票支持我,感谢。&br&&br&&img data-rawwidth=&1125& data-rawheight=&252& src=&/v2-549fbd386c134fcecdae_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1125& data-original=&/v2-549fbd386c134fcecdae_r.jpg&&&br&&p&感谢大家帮我投票,投票入口:&/p&&p&&a href=&/votes?domain=internet& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&/votes?&/span&&span class=&invisible&&domain=internet&/span&&span class=&ellipsis&&&/span&&/a&&/p&&br&&p&----&/p&&p&在知乎里回答的问题集合:&/p&&p&&a href=&/p/& class=&internal&&索引 - 知乎专栏&/a&&/p&&br&--&br&关于产品设计&用户体验相关的文章:&br&&br&&p&文章目录:&a href=&/p/& class=&internal&&连载中:产品设计的思考方式(目录) - 产品设计与用户体验 - 知乎专栏&/a&&/p&&p&关注专栏:&a href=&/design& class=&internal&&产品设计与用户体验 - 知乎专栏&/a&&/p&&br&&p&关于时尚&设计相关文章:&/p&&p&&a href=&/designer& class=&internal&&不从众的好设计 - 知乎专栏&/a&&/p&
你可能不知道的是,盲人等残障人士使用电脑、手机等信息产品的难度被大大高估了,他们平时也是可以顺畅的使用电脑、手机,顺畅的上网的。事实上,盲人不仅仅作为用户,就目前所知的,知乎团队里就有盲人同事,而QQ、QQ空间、QQ音乐乃至微信的版本,都有过盲…
可我看到的全是商机啊。&br&对于这种 用户必须用,用户没有替代品的网站来说。把验证码变成广告位简直是丧心病狂屌炸天的商机。&br&&br&这些图片完全可以招标使用各种广告,比如说:&br&请选择 健康营养又美味的【银鹭花生牛奶】&br&&br&请选择 过年必备旺旺产品系列中的【旺旺雪饼】【旺旺大礼包】【旺旺仙贝】&br&&br&请选择 今年过节不收礼,收礼只收【脑白金】的爷爷和奶奶广告图&br&&br&&br&&br&……&br&&br&以这种网站的流量来看,分分钟广告过亿的节奏,广告商估计花多少钱都愿意投吧。
可我看到的全是商机啊。 对于这种 用户必须用,用户没有替代品的网站来说。把验证码变成广告位简直是丧心病狂屌炸天的商机。 这些图片完全可以招标使用各种广告,比如说: 请选择 健康营养又美味的【银鹭花生牛奶】 请选择 过年必备旺旺产品系列中的【旺旺…
题主问得太好了。&br&&br&答案:侵权。&br&&br&中国铁路总公司是营利性的国企,网站是商业用图的,图片算用作商业途径。受法律保护,图片著作权所有者有权利起诉。&br&&br&中国企业在这一块的法律常识太缺乏,没有人找你麻烦很少人会遵守这方面的法律。连央视这样的官媒也多次被爆侵权。&br&&br&很多人调侃12306的验证码可笑,却没看到更深层的东西。保护知识产权,还得靠大家的共同努力。在这个层面上,值得欣慰的是,很多知乎网友还是站在时代前端的。&br&&br&附:&br&&b&&a href=&///?target=http%3A///flfg//content_1544458.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&中华人民共和国著作权法&i class=&icon-external&&&/i&&/a&&/b&
题主问得太好了。 答案:侵权。 中国铁路总公司是营利性的国企,网站是商业用图的,图片算用作商业途径。受法律保护,图片著作权所有者有权利起诉。 中国企业在这一块的法律常识太缺乏,没有人找你麻烦很少人会遵守这方面的法律。连央视这样的官媒也多次被…
没一个人说道了这件事情的本质,我来写个回答。&br&先说观点,这件事情的本质其实是&br&验证码对视障者群体访问互联网产品带来了几乎不可逾越的阻碍。&br&如果该案胜诉,可以为&br&要求其它互联网产品提供语音或短信或其它形式的可被视障者正常获取的验证码成为有法律支持的可能。&br&为什么选择 12306?&br&因为 12306 是有政府背景的铁路总公司对外的售票服务窗口,且验证码的复杂程度饱受诟病。&br&就是这样。&br&-&br&再说点别的,利益相关,盲人。&br&买票渠道很多,12306 不是视障者买票的首选,不用它,通过其它 App 和网站同样可以买到票。&br&问题的本质还是验证码。视障者通过屏幕阅读器访问互联网,这个知道的知道,不知道的也不好解释,没时间多说。只要知道,借助屏幕阅读器,视障者可以完成大家能用 WEB 和 App 完成的几乎所有事情就行了,当然,产品本身的 Accessibility 也是很重要的。&br&这所有的事情中,验证码就是一个例外,现在的验证码多是图形的,视障者无法获取到,当然,你闭上眼睛,你也获取不到。&br&但这东西,在登录/注册/使用产品的过程中,就有可能出现,无形地阻碍了视障者使用互联网产品,然而,产品提供让所有人都可以正常获取的验证码就能解决这个问题。(这里不争论企业成本的问题,谢谢。)&br&现在我遇到图形验证码,多是截图发给朋友帮忙看,然而朋友不一定一直会有时间,感谢上次深夜还帮我看验证码的 &a class=&member_mention& href=&///people/62e17b009f0c07ec8b3afb49a40c285a& data-editable=&true& data-hovercard=&p$b$62e17b009f0c07ec8b3afb49a40c285a& data-title=&@花火& data-hash=&62e17b009f0c07ec8b3afb49a40c285a&&@花火&/a& 姐。&br&还有就是通过争渡识图(&a href=&///?target=http%3A//st.zd.hk/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&争渡识图志愿者——旨在帮助盲人看验证码,举手之间让盲人的网络生活更精彩!&i class=&icon-external&&&/i&&/a& )这个工具识别验证码。这个工具是视障者端,通过工具截有验证码页面的图片,由服务端发送到志愿者客户端,志愿者看完验证码后,将验证码的文本发回给视障者,属于人工志愿者服务。这个项目的发起人是 &a class=&member_mention& href=&///people/4b16ec1fff2c960080ea& data-editable=&true& data-hovercard=&p$b$4b16ec1fff2c960080ea& data-title=&@杨永全& data-hash=&4b16ec1fff2c960080ea&&@杨永全&/a& 。&br&然而,现在互联网产品都开始用行为验证码了,例如某宝的登录需要拖动滑块验证,面对越来越多的行为验证码,视障者群体真的是很无力,。&br&视障者遇到的验证码问题,不仅仅是 12306 一家的问题,是几乎所有互联网产品的问题,但是,视障者群体没有权利要求互联网产品提供者提供无障碍的验证码。&br&于是,陈先生起诉了 12306 ,希望能为视障者遇到的验证码问题找到法律上的支持。&br&推动信息无障碍,遇到的一直最大的问题就是,没有法律支持。如果这次诉讼成功,将会是信息无障碍史上一个重要的里程碑,只可惜没有,但我们这个群体会继续推动,直到具有出现一个里程碑式的事件。&br&期待信息无障碍立法的那一天。&br&延伸阅读(&a href=&/question//answer/& class=&internal&&互联网高速发展的今天,盲人的生活有什么样的改变? - 殷晓波的回答&/a& )。
没一个人说道了这件事情的本质,我来写个回答。 先说观点,这件事情的本质其实是 验证码对视障者群体访问互联网产品带来了几乎不可逾越的阻碍。 如果该案胜诉,可以为 要求其它互联网产品提供语音或短信或其它形式的可被视障者正常获取的验证码成为有法律支…
&p&这个必须冒个泡,因为好一段时间里我和公司的小伙伴都在研究关于各种验证码的破解,图形和滑动验证码都有搞过,针对阿里的滑块,极验的几代产品,和一些复杂的验证码都做过对应的绕过,这里准备写一个稍微长一点的答案给各位开导一下思路。&/p&&p&首先说下结论:&b&在保证较好用户体验度的情况下,两者都不安全,就破解成本而言,图形验证码成本更高一些&/b&。&/p&&p&接下来我从字符验证码到滑动验证码挨着跟大家说一下分别的破解方式&/p&&p&=======================验证码的分割线========================&/p&&p&&b&图形验证码&/b&&/p&&p&首先说说图形验证码&/p&&p&1.从最简单的验证码开始。&/p&&p&最简单的图形验证码莫过于四位数字或者四位数字+字母,且干扰较小的验证码了,这种验证码的破解基本不需要费什么力,利用定制分割+python中的pytesseract模块即可完成破解,因为很简单,我就不做阐述了,有兴趣可以去看csdn上相关博主的系列教程。&/p&&img src=&/v2-7a6bf4cb176ce00b7110e89_b.png& data-rawwidth=&230& data-rawheight=&86& class=&content_image& width=&230&&&p&&br&&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/ysc6688/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图像验证码识别(三)--基本流程讨论 - ysc6688的专栏 - CSDN博客&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&2.稍微复杂一点的验证码&/p&&p&这类验证码就可能涉及到降噪去除干扰一类的操作了,当然,这类操作也有很多人研究过了,图像二值化+开闭运算+腐蚀膨胀,基本可以干掉绝大多数的干扰,如果是纯噪点,可以达到一个非常好的去噪效果。&/p&&img src=&/v2-f4d4bdb1db7b21f70ae280d7b3129c51_b.png& data-rawwidth=&154& data-rawheight=&65& class=&content_image& width=&154&&&p&比如这种验证码,经过一个二值化滤波后就达到了一个较好的去噪效果,而这个二值化滤波阈值需要根据实际情况修改&/p&&img src=&/v2-100ee4a7e1adfa19bf92d_b.png& data-rawwidth=&177& data-rawheight=&99& class=&content_image& width=&177&&&p&当然实际情况可能没那么理想,比如有的验证码光通过二值滤波是无法达到这么好的效果的,这时候使用开闭运算基本也可以处理的较好,因为处理起来也较为简单,这里也不细说了。&/p&&p&&br&&/p&&p&3.干扰较为严重的验证码&/p&&p&这类验证码存在大量干扰,与字母混合在一起,有的甚至存在粘连,处理起来十分麻烦,需要用到的方式也相对复杂,这里详细给大家说一下。&/p&&img src=&/v2-22274aea96dffe3d17de2b1_b.png& data-rawwidth=&214& data-rawheight=&80& class=&content_image& width=&214&&&p&此验证码是我们在研究一家安全公司的验证码时遇到的,确实复杂度比较强,大量的噪点和混杂的干扰线。&/p&&p&先给大家看看我们处理之后的效果&/p&&img src=&/v2-fc2f1aba40bc7a2c9346d_b.png& data-rawwidth=&238& data-rawheight=&121& class=&content_image& width=&238&&&p&这个效果虽然说不上多好,但已经完全足够识别,后来我们对算法进行了一定的改进,已经可以达到比目前更好的去噪和缺失补偿效果,但因为特殊原因不便公开,这里就暂且分享一下做到这种程度所用到的方法。&/p&&p&验证码特征观察:这一步主要是观察验证码本身和干扰点或线之间的差异,就我这张验证码,大家如果仔细观察的话可以看出来,干扰线和验证码字母本身深度是存在差异的,我们将图放到ps中,发现字符本身像素大概为140,而干扰线像素大概为124,因此,这就可以作为我们的初步过滤条件,设计一个小的过滤算法即可进行过滤,效果大致如下&/p&&img src=&/v2-e3533bd2dfff9d6f2fcdbec07db7675f_b.png& data-rawwidth=&229& data-rawheight=&114& class=&content_image& width=&229&&&p&可以看到,干扰线的主体已被我们去掉,但存在的问题也出现了&/p&&p&(1)依然存在大量噪点和干扰块&/p&&p&(2)验证码和干扰线之间的重叠的部分被干掉,导致较大缺口&/p&&p&(3)并不是每个验证码都会有这种明显的像素区分,遇到其它情况怎么办&/p&&p&首先解答第一个问题,处理剩下的噪点和干扰块,这个很简单,使用opencv中自带的闭运算+腐蚀或者开运算+膨胀&/p&&div class=&highlight&&&pre&&code class=&language-text&&kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(2,2))
kernel2=cv2.getStructuringElement(cv2.MORPH_CROSS,(2,2))
# # 闭运算+腐蚀
closed=cv2.morphologyEx(newImg,cv2.MORPH_CLOSE,kernel)
newImg=cv2.erode(closed,kernel2,iterations=1)
&/code&&/pre&&/div&&p&这里的kernel是区域大小,建议大家在处理的时候设置两个kernel,方便调整。&/p&&img src=&/v2-f8f16d4e_b.png& data-rawwidth=&231& data-rawheight=&120& class=&content_image& width=&231&&&p&这是处理之后的效果,可以看到,通过这样的处理基本消除了绝大部分的干扰,但距离我最上面达到的效果依然有一定距离,调整kernel的大小对最终的效果也会有一定的影响,这个大家可以在实际环境中自己调整。&/p&&p&那么,上述图像中存在的缺陷部分如何填补呢?就业是我们的第二个问题,我们使用的是八点扫描法,即对图像中的每个像素点逐一扫描,比如一个一个像素位置(x,y),分别寻找周围(x+2,y)(x-2,y)(x,y+2)(x,y-2)(x+2,y+2)(x-2,y+2)(x+2,y-2)(x-2,y-2)这些点的像素值,若周围八个点的像素存在4点或5点大于某个阈值,则将其置为黑色0,这样下来,就将部分缺失的像素补充回原图,达到这个效果。&/p&&img src=&/v2-fc2f1aba40bc7a2c9346d_b.png& data-rawwidth=&238& data-rawheight=&121& class=&content_image& width=&238&&&p&当然,如果想要达到更好效果,就需要对补偿算法做进一步的改进了,至于怎么改进大家可以顺着这个思路去想&/p&&p&好了,回答第三个问题,如果像素值不像我这个验证码和干扰线一样为两个固定的值怎么办?&/p&&p&这种时候我们可以通过横向和纵向扫描的方式绘制像素亮度分布直方图(PS也可以实现类似功能),大概是这个样子&/p&&img src=&/v2-f787c2fbf1b09_b.png& data-rawwidth=&1908& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1908& data-original=&/v2-f787c2fbf1b09_r.png&&&p&然后根据直方图通过将像素范围设定在某一阈值范围内来过滤干扰,这种方式针对存在背景图像的验证码,比如在图像中找字这种验证码的过滤效果较好。&/p&&p&再解决一些大家在破解图像验证码中可能遇到的问题:&/p&&p&遇到字符粘连怎么办?&/p&&p&通常遇到这种情况,我们会采用骨架算法,顾名思义,也就是提取图片最基本的一个框架,关于这个算法,网上也已经有大量的文章讨论,我这里就不造轮子了&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/twowind/article/details/9094037& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&提取图像的骨架(Skeleton)算法 - 第二不及的专栏 - CSDN博客&i class=&icon-external&&&/i&&/a&&/p&&p&我知道各位比较懒,所以告诉各位python的扩展包里也是带了这个算法的,模块自己去安装吧&/p&&div class=&highlight&&&pre&&code class=&language-text&&from skimage import morphology
sk=morphology.skeletonize(img)
&/code&&/pre&&/div&&p&实现的效果大致就是这个样子,基本上有粘连的绝大多数验证码都能分割开,至于那些重叠很紧的暂时也没有特别好的办法&/p&&img src=&/v2-fbafbd0d53929_b.png& data-rawwidth=&960& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-fbafbd0d53929_r.png&&&p&&br&&/p&&p&如何来分割验证码?&/p&&p&那种位置固定直接按宽度切割的就不说了,说说那些变化的&/p&&p&分割验证码网上也有不少的方法,比如&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/ysc6688/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图像验证码识别(七)--字符分割 - ysc6688的专栏 - CSDN博客&i class=&icon-external&&&/i&&/a&&/p&&p&这位博主就提到了泛水填充法和x像素投影法,而这里我说说另一种连通域提取法,所谓的连通域提取,即在图像中找到像素连通的区域并把它们分割出来,如下图所示&/p&&img src=&/v2-993ed0aeaefa45b71d2c_b.png& data-rawwidth=&211& data-rawheight=&80& class=&content_image& width=&211&&&p&这是一张我处理之后的验证码,在连通域划分之前&/p&&img src=&/v2-c8e1ad8cf77aad59a9371_b.png& data-rawwidth=&228& data-rawheight=&119& class=&content_image& width=&228&&&p&连通域划分之后&/p&&img src=&/v2-93eddcdf4defd4_b.png& data-rawwidth=&234& data-rawheight=&118& class=&content_image& width=&234&&&p&在python中的具体实现&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span class=&n&&img为原图&/span&
&span class=&n&&new&/span&&span class=&o&&=&/span&&span class=&n&&img&/span&&span class=&o&&.&/span&&span class=&n&&copy&/span&&span class=&p&&()&/span&
&span class=&n&&mser&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&MSER_create&/span&&span class=&p&&()&/span&
&span class=&n&&regions&/span&&span class=&o&&=&/span&&span class=&n&&mser&/span&&span class=&o&&.&/span&&span class=&n&&detectRegions&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&)&/span&
&span class=&n&&hulls&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&convexHull&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&o&&.&/span&&span class=&n&&reshape&/span&&span class=&p&&(&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&))&/span& &span class=&k&&for&/span& &span class=&n&&p&/span& &span class=&ow&&in&/span& &span class=&n&&regions&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]]&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&polylines&/span&&span class=&p&&(&/span&&span class=&n&&new&/span&&span class=&p&&,&/span& &span class=&n&&hulls&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&255&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&))&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&s&&&Image&&/span&&span class=&p&&,&/span&&span class=&n&&new&/span&&span class=&p&&)&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&waitKey&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&detectRegions返回两个参数,regions[0]为被切割后的图像,regions[1]为一个boxes矩阵(包含被分割后形成的多个分割框,每一行返回了x,y,w,h),需要注意的是返回的box中可能有很多个框,需要筛选。&/p&&p&通过这种方式,即可提取出每一个元素&/p&&img src=&/v2-d9ff8c607a16e00f2108aae1bd72c113_b.png& data-rawwidth=&137& data-rawheight=&66& class=&content_image& width=&137&&&p&&br&&/p&&img src=&/v2-c65e8fbed9adbe9a6c69fe5fed9631cf_b.png& data-rawwidth=&136& data-rawheight=&54& class=&content_image& width=&136&&&p&&br&&/p&&img src=&/v2-df419aca9dd29f45fe0410_b.png& data-rawwidth=&139& data-rawheight=&68& class=&content_image& width=&139&&&p&&br&&/p&&img src=&/v2-c3a93c5da816d522cf93dba938a8b6d5_b.png& data-rawwidth=&141& data-rawheight=&68& class=&content_image& width=&141&&&p&&br&&/p&&p&如何识别验证码?&/p&&p&做到我上述效果之后,基本pytesseract都能识别了,当然不可能每张图片都处理到这个效果,所以还是要通过别的识别途径,应用最广泛的就是机器学习了。&/p&&p&使用svm算法,将样本集和结果集加入训练生成模型用以识别处理之后的验证码,经我测试准确度大概可以到95%以上,如果是简单的验证码基本可以达到百分之百。&/p&&p&当然,如果祭出深度学习,使用多层CNN进行训练,调好参,那准确率直逼百分之百,一朋友对普通干扰验证码图片不做任何处理和切割,直接使用tensorflow暴力学习,大概十多万的样本集,loss高的可怕,最后准确度竟然达到了惊人的百分之九十七。&/p&&p&现在的大型打码平台基本也进入了深度学习时代,对于干扰较低的图形验证码基本是秒杀,所以图形验证码已经过时,除非牺牲用户体验,将验证码混淆的爹妈都认不出来,但这样显然就有违了初衷。&/p&&p&图形验证码就先说到这,各位如果有什么问题可以在评论区说出来,我看到了再补充进文章里,至于为什么我说滑动验证码也不安全,在后续会继续写,今天先搬砖,不然工头要辞退我了。&/p&&p&晚上上来一看网易居然已经被打脸,一楼的兄弟速度真是快,那我明天就具体给大家讲讲破解滑动验证码的一些方法。&/p&&p&&br&&/p&&p&=====================滑动验证码的分割线=========================&/p&&p&&br&&/p&&p&&b&滑动验证码&/b&&/p&&p&今天继续如约说一下滑动验证码,看到评论区有朋友让我说说xxx厂商的验证码,这个我只能说抱歉,为了规避法律影响,我只说绕过方式,不针对具体厂商,具体怎么搞你们自己去试吧:)&/p&&p&以四种方式来谈一下滑动验证码的破解:&/p&&p&1.系统层工具使用&/p&&p&系统层工具,即第三方工具通过调用系统层api进行各类操作,这类工具基本完全模拟人的行为,无法通过js指纹收集直接检测其是否为工具,这类工具中比较出名的有sikuli、按键精灵、大漠插件(游戏外挂应用较多)等,这里为大家介绍一下sikuli,搞自动化测试的朋友应该比较熟悉,真正的图形脚本语言&/p&&p&&a href=&///?target=http%3A///fnng/archive//2819367.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图形脚本语言sikuli - 虫师 - 博客园&i class=&icon-external&&&/i&&/a&&/p&&p&看看IDE先:&/p&&img src=&/v2-eea94f8d6ab5eb23e267afe1_b.png& data-rawwidth=&1534& data-rawheight=&810& class=&origin_image zh-lightbox-thumb& width=&1534& data-original=&/v2-eea94f8d6ab5eb23e267afe1_r.png&&&p&那段示例代码如下:&/p&&img src=&/v2-173bf822ccedd_b.png& data-rawwidth=&708& data-rawheight=&209& class=&origin_image zh-lightbox-thumb& width=&708& data-original=&/v2-173bf822ccedd_r.png&&&p&作用就是双击打开360浏览器,睡3秒然后输入iphone8点击搜索,怎么样,这种编程是不是很愉快,其中&/p&&img src=&/v2-322b26287eeb7bcc1a45a9_b.png& data-rawwidth=&241& data-rawheight=&216& class=&content_image& width=&241&&&p&这个东西就是你们想要的,具体用法我就不说了,我不会告诉你百度搜索“sikuli实现拖拽”第一个链接就是,好吧知道你们懒:&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/stormwy/article/details/7930845& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图形化编程软件 sikuli dragDrop()函数使用拖动 滑动条slider 的一个 demo&i class=&icon-external&&&/i&&/a&&/p&&p&其它类似的软件就不说了,你们自己去摸索&/p&&p&&br&&/p&&p&2.selenium webdriver&/p&&p&这个恐怕是搞验证码破解用的最多的的一个工具了,这个工具的作用呢就是驱动浏览器工作,并向浏览器嵌入代码从而实现对浏览器的操控,功能非常强大,只有你想不到的,没有它做不到的。&/p&&p&给出一个别人做的demo&/p&&p&&a href=&///?target=http%3A///content/17/5_.shtml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&滑动验证码破解:Python Selenium 2.0 应用&i class=&icon-external&&&/i&&/a&&/p&&p&然后再给出一段我破解某大型厂商滑动验证码的demo&/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span class=&c&&#coding:utf-8&/span&
&span class=&kn&&from&/span& &span class=&nn&&selenium&/span& &span class=&k&&import&/span& &span class=&n&&webdriver&/span&
&span class=&kn&&from&/span& &span class=&nn&&selenium.webdriver&/span& &span class=&k&&import&/span& &span class=&n&&ActionChains&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&n&&driver&/span& &span class=&o&&=&/span& &span class=&n&&webdriver&/span&&span class=&o&&.&/span&&span class=&n&&Firefox&/span&&span class=&p&&()&/span&
&span class=&n&&driver&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&(&/span&&span class=&s&&&/xxxx/&&/span&&span class=&p&&)&/span&
&span class=&n&&driver&/span&&span class=&o&&.&/span&&span class=&n&&delete_all_cookies&/span&&span class=&p&&()&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&)&/span&
&span class=&n&&fuck&/span&&span class=&o&&=&/span&&span class=&n&&driver&/span&&span class=&o&&.&/span&&span class=&n&&find_element_by_xpath&/span&&span class=&p&&(&/span&&span class=&s&&'//*[@id=&nc_1_n1z&]'&/span&&span class=&p&&)&/span&
&span class=&n&&action&/span& &span class=&o&&=&/span&&span class=&n&&ActionChains&/span&&span class=&p&&(&/span&&span class=&n&&driver&/span&&span class=&p&&)&/span&
&span class=&n&&action&/span&&span class=&o&&.&/span&&span class=&n&&click_and_hold&/span&&span class=&p&&(&/span&&span class=&n&&fuck&/span&&span class=&p&&)&/span&
&span class=&n&&action&/span&&span class=&o&&.&/span&&span class=&n&&move_by_offset&/span&&span class=&p&&(&/span&&span class=&mi&&260&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&n&&action&/span&&span class=&o&&.&/span&&span class=&n&&release&/span&&span class=&p&&()&/span&&span class=&o&&.&/span&&span class=&n&&perform&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&使用了最基础的拖动即完成破解,复杂的我会在后面说到&/p&&p&&br&&/p&&p&3.图像匹配技术&/p&&p&这个其实是一个找坐标的问题,即使用python、java这类的原生代码进行图像匹配定位实现拖动,涉及的知识点也很多,大概包括:屏幕截图、图像匹配识别、坐标定位、图像拖动,真正做过原生代码验证码拖动的朋友应该能理解我上述说的,这里仅介绍一下思路:&/p&&ul&&li&屏幕截图、使用原生代码对当前窗口截图&/li&&li&图像识别,通过验证码图像与截图中图像相似度匹配找到验证码所在位置&/li&&li&做差找到验证码实际在浏览器中位置&/li&&li&使用代码api实现拖动&/li&&/ul&&p&实现以上几步,基本完成。&/p&&p&&br&&/p&&p&4.逆向前端js&/p&&p&如果说机器学习对滑动验证码的帮助,无非就是收集一大堆前端信息,如:鼠标轨迹、滑动条拖动速度、浏览器指纹、XFF、页面刷新频率等信息,然后回传到后端进行分析,而在这之前,厂商需要预先建立一套模型,来对各种收集到的信息进行处理,那么,如果满足了条件,就可以完成破解。&/p&&p&因为不太懂逆向,但看别人玩过,所以只说说思路。这种方式基本就是hook前端函数,在处理或者发送指纹信息的时候对其进行篡改,使得前端回传的数据包由机器学习判别结果为正常从而达到绕过效果,但这种绕过方式通常是最难的,因为前端对抗已经持续了很多年,各种混淆加密已很成熟,一般人去调跟代码跟到怀疑人生,但依然有高玩可以逆出来,一朋友就成功逆向了谷歌的前端虚拟机我会乱说?&/p&&p&&br&&/p&&p&好,方法说完,接下来解答几个问题&/p&&p&1.面对拥有机器学习的滑动验证码要怎么办?&/p&&p&很多朋友之所以使用webdriver拖动失败的原因在于他们直接通过拖动api将滑动验证码一股脑从左拖到右,那么快的速度是肯定会被检测出来。&/p&&p&建议使用循环或者sleep这类函数减缓拖动速度,你也可以使用点击事件先在网页四处点击两下,再来拖动。甚至拖动时也可不用直线拖动,可以向上或者向下也拖动几个像素,使得行为更加接近人的自然操作来规避检测,这样基本能搞定绝大多数滑动验证码了。&/p&&p&当然也会有有心的厂商对webdriver驱动浏览器这样的方式进行了检测,导致代码执行出错,这个其实很好办:&/p&&p&我换一种浏览器驱动行不行?&/p&&p&我自己编译chrome改源码行不行?&/p&&p&我用sikuli行不行?&/p&&p&当然以上都是被测试过可行的,sikuli这种前端无法检测,所以只要稍稍模拟人的行为(四处点击,拉斜线等),就可以绕过机器学习检测了。&/p&&p&&br&&/p&&p&2.为什么说破解图形验证码成本更高?&/p&&p&你看我上面写的东西,破解滑动验证码,除了逆向前端,其余几种是不是都很简单?但是如果我们破解图形验证码要怎么办呢?&/p&&p&降噪去噪、提取字符、训练数据,其中训练数据就是个大工程,给样本打标签打到你吐血。&/p&&p&&br&&/p&&p&3.应对短信验证码、语音验证码怎么办?&/p&&p&如果是短信验证码,可以尝试暴力破解或寻找漏洞,但如果不存在漏洞且位数较高有时间限制的话也就没办法了,不过这种验证码由于其极不友好的用户体验,通常应用于资金交易等重要的环境下。试想如果大面积应用这种验证码我不带手机岂不是都无法登录账户了?&/p&&p&&br&&/p&&p&4.验证码未来的发展趋势&/p&&p&从极验三代其实可以看出来,滑动验证码其实也已被放弃&/p&&p&&br&&/p&&img src=&/v2-185a5af49d1569dfc2da4e_b.png& data-rawwidth=&662& data-rawheight=&454& class=&origin_image zh-lightbox-thumb& width=&662& data-original=&/v2-185a5af49d1569dfc2da4e_r.png&&&p&&br&&/p&&p&&br&&/p&&img src=&/v2-8b41e66eb9f4_b.png& data-rawwidth=&666& data-rawheight=&860& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&/v2-8b41e66eb9f4_r.png&&&p&这种机器学习检测+图像识别+逻辑的验证码将会得到越来越广泛的应用,但这种验证码依然是可以被识别的。&/p&&p&虽然下面的网易云被打脸,但是它有句话还是很中肯的:攻与防技术都是在对抗中不断升级的,无解的验证码还不存在,但防的一方可以不断提升破解成本。&/p&&p&&br&&/p&&p&好了,答题完毕,写了这么多,你们看了都不点赞的?&/p&
这个必须冒个泡,因为好一段时间里我和公司的小伙伴都在研究关于各种验证码的破解,图形和滑动验证码都有搞过,针对阿里的滑块,极验的几代产品,和一些复杂的验证码都做过对应的绕过,这里准备写一个稍微长一点的答案给各位开导一下思路。首先说下结论:在…
四个月前刚好为了穷举密码写过一个验证码识别模块,先挖个坑,随便写一些,我也会尽量写得浅显易懂一些,过几天有时间再慢慢填。&br&题主一共提了4个问题,我的答案都是根据这4个问题回答的,想了解更多可以看其他答案。&br&&img src=&/ac4a2dded7d04e62309a3a_b.jpg& data-rawwidth=&614& data-rawheight=&107& class=&origin_image zh-lightbox-thumb& width=&614& data-original=&/ac4a2dded7d04e62309a3a_r.jpg&&&br&&blockquote&&ul&&li&&b&&u&机器自动识别验证码的原理是怎么样的?&/u&&/b&&br&&/li&&/ul&&/blockquote&我自己写验证码识别模块的时候是这样的,当然不一定大家都这样写,肯定有更好的算法,我要识别的那个验证码是比较简单地那种,所以这样写就够了。&br&&br&我用Windows的画图工具画了这个张图,用来举个例子:&br&&img src=&/70b8dff124a7fa71a552e_b.jpg& data-rawwidth=&360& data-rawheight=&160& class=&content_image& width=&360&&这是一张分辨率为19*7的图片&br&&br&&ul&&li&1、&b&&u&遍历所有像素点&/u&&/b&(像PHP就是先getimagesize,获取i和j,然后用imagecolorat进行两重循环,就可以得到所有像素点的RGB值数据),&b&&i&&u&然后二值化&/u&&/i&&/b&【比如判断RGB值小于#FFFFFF的(即非白色)时候标记为1,大于等于#FFFFFF(即白色)的标记为0,存进二维数组】,&b&&u&最后得到一个19*7的二维数组;&/u&&/b&&br&&/li&&li&2、&b&&u&删除干扰的点、线&/u&&/b&(干扰像素的特点是不连续,占用的像素点少,可以很容易地设计算法容易过滤,如果干扰像素采用了和验证码正文明显不同的颜色,则可以在第一步二值化中直接去掉。这个例子里没有干扰点、干扰线)&/li&&li&3、&b&&u&把数组里连续的字符切割成一个个独立的字符&/u&&/b&(像下面这个,最右边一列都是0,就可以判断是图像边缘,然后切开,最后可以得到三个类似这样的6*6二维数组。实际切开的话,最右边一列是没有整列都是0的情况的,这里是我特地加上的。)&b&&u&如果字符有旋转的,还得根据边缘把它再给摆直&/u&&/b&&br&&/li&&/ul&&blockquote&0 &b&&i&&u&1 1 &/u&&/i&&/b&&u&&i&&b&1 1 &/b&&/i&&/u&0 0&br&&b&&i&&u&1 1 &/u&&/i&&/b&0 0 &b&&i&&u&1 1 &/u&&/i&&/b&0&br&0 0 0 0 &b&&i&&u&1 1 &/u&&/i&&/b&0&br&0 0 0 &b&&i&&u&1 1 1 &/u&&/i&&/b&0&br&0 0 0 &b&&i&&u&1 1 &/u&&/i&&/b&0 0&br&0 0 &i&&u&&b&1 1 &/b&&/u&&/i&0 0 0&br&0 &b&&i&&u&1 1 &/u&&/i&&/b&0 0 0 0&br&&b&&i&&u&1 1 1 1 1 1 &/u&&/i&&/b&0&/blockquote&&br&&ul&&li&4、然后直接循环&b&&i&匹配已有的&/i&&/b&所有的同字体的&b&&i&&u&数据&/u&&/i&&/b&(同样是二值化数据,这些数据是哪里来的呢?一般是先作完前面3步,然后把那些二值化数据一个个全部复制下来,多刷新十几次获取样本,运气好的话[A-Z],[0-9]就都有了),达到一定的&b&&i&&u&相似度(不要求完全匹配)&/u&&/i&&/b&,就认定这个验证码的其中这个字符是2。除了这种比较外,还有根据概率、机器学习等等大量方法来做这最后一步。现在验证码的设计难点主要是放在防止字符被切割上。&/li&&/ul&&img src=&/c4e154b9b_b.jpg& data-rawwidth=&1365& data-rawheight=&281& class=&origin_image zh-lightbox-thumb& width=&1365& data-original=&/c4e154b9b_r.jpg&&&br&就像这样的数据,开了自动换行,应该比较好认了,摘掉眼镜快速滑动页面也可以比较清楚地看清这些数据的内容。&br&&img src=&/f61fdcad7de19b8d4b8af1c8fd6d7e55_b.jpg& data-rawwidth=&508& data-rawheight=&728& class=&origin_image zh-lightbox-thumb& width=&508& data-original=&/f61fdcad7de19b8d4b8af1c8fd6d7e55_r.jpg&&&br&另外还有一种&b&&u&人肉分布式验证码识别”技术“&/u&&/b&,专门开发一个客户端软件给没事干的大学生打码赚些小钱。服务端获取到验证码后分发给在线的客户端,客户端人肉识别,返回结果。如果在线人数足够多,任务下达后几乎都是秒回的,效率也是不错的,进程等待验证码从人肉识别机上返回的时间就挂起,不怎么占用CPU时间。现在业界人肉打码机大概是这个价。&br&&img src=&/3_b.jpg& data-rawwidth=&695& data-rawheight=&597& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&/3_r.jpg&&&br&&blockquote&&ul&&li&&b&&u&识别不同验证码也分难度等级吗?&/u&&/b&&br&&/li&&/ul&&/blockquote&&b&&i&&u&根据上面的识别原理&/u&&/i&&/b&,可以确定识别难度肯定分等级。从步骤1和2看,噪点多、干扰线条多、背景颜色紊乱的肯定难识别,因为会在二值化那里遇到困难,最容易识别的肯定是噪点少、干扰线条少、背景颜色统一的验证码。&br&不过验证码要达到人可以识别的程度,肯定主体部分(验证码)的RGB值还是有一定的规律的,也就是可以通过一定的判断来二值化。像主体部分,一般颜色要比背景深,根据不同的情况设计算法是可以区分背景和正体的。&br&&blockquote&&ul&&li&&b&&u&什么样的验证码识别起来简单?&/u&&/b&&br&&/li&&/ul&&/blockquote&&img src=&/15ef463bb09f8adb055f01b_b.jpg& data-rawwidth=&348& data-rawheight=&96& class=&content_image& width=&348&&&br&&blockquote&这个是弱验证码的典型,2006年那时候我刚开始做网站开发时,当时最热门的那几个论坛程序就在用这种验证码,现在那几个论坛停更了好多,所以还有不少网站现在还在用这种验证码。&br&★★☆☆☆☆☆☆☆☆&/blockquote&&br&&img src=&/bef5cddb95ed2c0c26bf4_b.jpg& data-rawwidth=&292& data-rawheight=&102& class=&content_image& width=&292&&&blockquote&这个也是弱验证码的典型,比上面那个好不了多少,虽然背景加入了大量干扰点,但是颜色偏淡,可以在二值化中直接设置一个阈值直接干掉,正确的做法应该是加入和验证码本体颜色一致的干扰线和干扰点,理论上说数量越多越好。&br&★★★☆☆☆☆☆☆☆&/blockquote&&img src=&/67a1d8e8ab0eccbb3911_b.jpg& data-rawwidth=&290& data-rawheight=&135& class=&content_image& width=&290&&&blockquote&这个又比上面那个好一些了,干扰点和验证码正文颜色都非常随意,遗憾的都是非常分散的点,很容易被识别出来并过滤掉。如果换成若干条和正文颜色相同、并且与正文交叉的细线会好一些。&br&★★★★☆☆☆☆☆☆&/blockquote&&br&&b&&blockquote&&ul&&li&&b&&u&什么样的验证码识别起来难?&/u&&/b&&br&&/li&&/ul&&/blockquote&&/b&&img src=&/d424cebe4_b.jpg& data-rawwidth=&298& data-rawheight=&185& class=&content_image& width=&298&&&blockquote&难以识别的验证码1:大量背景、线、点干扰,而且字体有一定程度的旋转,&b&&i&&u&连人眼都难以识别&/u&&/i&&/b&的验证码(影响第1、2步的识别),线的干扰在这里起作用比较明显。★★★★★★☆☆☆☆&/blockquote&&br&最难以识别是每个字符都粘连在一起的,这些会在第3步(切割字符)和第4步匹配已有数据(每次的字体扭曲程度都是不同的,难以匹配)时遇到困难。&br&&img src=&/5ba0d6db2_b.jpg& data-rawwidth=&277& data-rawheight=&325& class=&content_image& width=&277&&&blockquote&难以识别的验证码2:没有干扰点、背景也很干净、也没有干扰线,就靠&b&&i&&u&不规则每次都不同的字体&/u&&/i&&/b&和&b&字符粘连&/b&,就可以让写验证码识别的人头疼好久。(影响第3、4步的识别)&br&★★★★★★★★☆☆&/blockquote&&br&&br&另外英文还是比较Naive的,中文识别难度不知道要比英文高到哪里去,以百度贴吧为例:&br&&img src=&/eeb8faa992d9c2adbc5d1_b.jpg& data-rawwidth=&368& data-rawheight=&386& class=&content_image& width=&368&&&br&&blockquote&难以识别的验证码3:&br&1、干扰线&br&2、加粗不加粗混用&br&3、采用了中文常用字。中文常用字大概有5000个,笔画繁复,形似字多,比起26个字母不知道高到那里去!&br&4、不同的字体混用,比如楷体、宋体、幼圆混用&br&5、形近字:”缴“和”激“、”寿“和”寺“等等&br&6、拼音,又是一大杀器&br&7、扭曲字体(”营“字有比较明显的扭曲)&br&8、需要准确识别13位汉字,增加了失败概率&br&(全面影响所有识别步骤)&br&汉字粘连后识别度不如英语高,所以一般汉字验证码都不粘连。&br&★★★★★★★★★☆&/blockquote&&img src=&/aeb2dbcf76b_b.jpg& data-rawwidth=&580& data-rawheight=&547& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/aeb2dbcf76b_r.jpg&&&img src=&/7bb2cda17b45a_b.jpg& data-rawwidth=&313& data-rawheight=&85& class=&content_image& width=&313&&&img src=&/fde0d147dfa60fd932c26a58_b.jpg& data-rawwidth=&333& data-rawheight=&87& class=&content_image& width=&333&&&img src=&/2cfdafddfede9a5d4f89_b.jpg& data-rawwidth=&298& data-rawheight=&78& class=&content_image& width=&298&&&blockquote&如果把旋转和粘连程度调得非常高的话,机器识别错误率就会很高了(甚至连人的识别错误率都会很高)。好在现代网页大都配备了Ajax验证码检测的判断,因此可以通过网站预留的接口多次尝试判断来获取验证码,1次失败,就试上20次,总有1次能成功的。&br&★★★★★★★★★★&/blockquote&&img src=&/159ad8f84a5c3bf7040dac_b.jpg& data-rawwidth=&490& data-rawheight=&120& class=&origin_image zh-lightbox-thumb& width=&490& data-original=&/159ad8f84a5c3bf7040dac_r.jpg&&因此像这种网站应该做的改变就是通过该Ajax判断接口查询验证码是否正确,如果错误,则清除session中的验证码数据,重新获取验证码。(验证码在登陆页是必须存在的,防止暴力破解弱口令,如果是生日类的8位数字密码,要暴力破解出来实在是太容易了)
四个月前刚好为了穷举密码写过一个验证码识别模块,先挖个坑,随便写一些,我也会尽量写得浅显易懂一些,过几天有时间再慢慢填。 题主一共提了4个问题,我的答案都是根据这4个问题回答的,想了解更多可以看其他答案。 机器自动识别验证码的原理是怎么样的?…
&img data-rawheight=&318& data-rawwidth=&488& src=&/f3bb779b9719aee8d2ba_b.jpg& class=&origin_image zh-lightbox-thumb& width=&488& data-original=&/f3bb779b9719aee8d2ba_r.jpg&&人家还专门解释了一下,为啥要这么出。&br&&img data-rawheight=&357& data-rawwidth=&486& src=&/0c2a7ce7dc1fdbfbb54e85e_b.jpg& class=&origin_image zh-lightbox-thumb& width=&486& data-original=&/0c2a7ce7dc1fdbfbb54e85e_r.jpg&&屏幕不够大恐怕真心看不出来。&br&&img data-rawheight=&319& data-rawwidth=&504& src=&/5817fce7ed_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/5817fce7ed_r.jpg&&像这种要动脑的……还注明了“No premium user”.&br&&img data-rawheight=&264& data-rawwidth=&504& src=&/ad0b69ce202b1_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/ad0b69ce202b1_r.jpg&&&br&不注意点儿瞬间被坑,还有狗……&br&&img data-rawheight=&191& data-rawwidth=&504& src=&/7fe2ad464a7d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/7fe2ad464a7d_r.jpg&&可能懂的人看起来没这么乱= =bbb&br&&img data-rawheight=&159& data-rawwidth=&504& src=&/77df1fecc5005_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/77df1fecc5005_r.jpg&&“what's this?”戳笑点~&br&&img data-rawheight=&331& data-rawwidth=&504& src=&/e7afc6d7e9e61ece9408b3_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/e7afc6d7e9e61ece9408b3_r.jpg&&像这个就是坑爹了!&br&&img data-rawheight=&273& data-rawwidth=&472& src=&/7a940bfeb06_b.jpg& class=&origin_image zh-lightbox-thumb& width=&472& data-original=&/7a940bfeb06_r.jpg&&我估计机器很难识别出这样的吧……&br&&img data-rawheight=&230& data-rawwidth=&430& src=&/c3d0dbd74e9bbd44b2f4bf_b.jpg& class=&origin_image zh-lightbox-thumb& width=&430& data-original=&/c3d0dbd74e9bbd44b2f4bf_r.jpg&&这个是π么?&br&&img data-rawheight=&422& data-rawwidth=&504& src=&/cb12ee9ccfd6de8486c06_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/cb12ee9ccfd6de8486c06_r.jpg&&像这个还是能看出来,不过可能得试个几次……&br&&img data-rawheight=&330& data-rawwidth=&463& src=&/72cb7cdf971e462e797021c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&463& data-original=&/72cb7cdf971e462e797021c_r.jpg&&其实不算很难,也是专业论坛为了限制用户级别的。&br&&img data-rawheight=&321& data-rawwidth=&504& src=&/dfdf30bcf7e1e8ed7586c00fda9245f7_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/dfdf30bcf7e1e8ed7586c00fda9245f7_r.jpg&&无比&b&有爱。回答此题就靠它了。&/b&&br&&img data-rawheight=&280& data-rawwidth=&504& src=&/aeeab64151a1_b.jpg& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/aeeab64151a1_r.jpg&&瞎了……&br&&img data-rawheight=&204& data-rawwidth=&462& src=&/ff531ece21d0b56cd97a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&462& data-original=&/ff531ece21d0b56cd97a_r.jpg&&像这种,懒得注册的人,会懒得去搜。&br&&img data-rawheight=&61& data-rawwidth=&279& src=&/5efd8e45fa6c39e3f1b2aa5bdc47228b_b.jpg& class=&content_image& width=&279&&人人网的验证码欢乐多……不仅这个,还有下面:&br&&img data-rawheight=&106& data-rawwidth=&314& src=&/c5be6a9c19aaa9c407ff_b.jpg& class=&content_image& width=&314&&以及下面(虽然是巧合):&br&&img data-rawheight=&391& data-rawwidth=&629& src=&/8611bebaea47_b.jpg& class=&origin_image zh-lightbox-thumb& width=&629& data-original=&/8611bebaea47_r.jpg&&&img data-rawheight=&429& data-rawwidth=&426& src=&/18fd3a18b7e6c7a535d75_b.jpg& class=&origin_image zh-lightbox-thumb& width=&426& data-original=&/18fd3a18b7e6c7a535d75_r.jpg&&&img data-rawheight=&422& data-rawwidth=&431& src=&/a2dbe96d8fdda_b.jpg& class=&origin_image zh-lightbox-thumb& width=&431& data-original=&/a2dbe96d8fdda_r.jpg&&&img data-rawheight=&443& data-rawwidth=&427& src=&/7197a1fbbcae210cca8c9dfe9f16217f_b.jpg& class=&origin_image zh-lightbox-thumb& width=&427& data-original=&/7197a1fbbcae210cca8c9dfe9f16217f_r.jpg&&&img data-rawheight=&421& data-rawwidth=&404& src=&/2a16dad1e4225_b.jpg& class=&content_image& width=&404&&&img data-rawheight=&436& data-rawwidth=&426& src=&/9af61c152bf4fdbf4baef5dd27361bf9_b.jpg& class=&origin_image zh-lightbox-thumb& width=&426& data-original=&/9af61c152bf4fdbf4baef5dd27361bf9_r.jpg&&最后拿这两个作结尾:&br&&img data-rawheight=&105& data-rawwidth=&175& src=&/22b3be941e_b.jpg& class=&content_image& width=&175&&结尾!&br&&img data-rawheight=&281& data-rawwidth=&345& src=&/58912ecf74252debfc3c19_b.jpg& class=&content_image& width=&345&&
人家还专门解释了一下,为啥要这么出。 屏幕不够大恐怕真心看不出来。 像这种要动脑的……还注明了“No premium user”. 不注意点儿瞬间被坑,还有狗…… 可能懂的人看起来没这么乱= =bbb “what's this?”戳笑点~ 像这个就是坑爹了! 我估计机器很难识别出…
&img data-rawheight=&240& data-rawwidth=&461& src=&/ebc86c99fcc2a_b.png& class=&origin_image zh-lightbox-thumb& width=&461& data-original=&/ebc86c99fcc2a_r.png&&&br&&img data-rawheight=&169& data-rawwidth=&471& src=&/1eea6ea9c2a1_b.jpg& class=&origin_image zh-lightbox-thumb& width=&471& data-original=&/1eea6ea9c2a1_r.jpg&&&br&这样的验证码
这样的验证码
支付宝推出的扫码支付,在全家、711等便利店已经广泛推广使用,最近微信也不不跟随上线了....&br&先不管现在到底使用率几何,因为这肯定需要一个培育的过程。&br&先从一个顾客的身份来回答此问题:&br&&br&现在你去买东西:&br&要么给现金:总会遇到翻包找零钱的时候吧?&br&要么刷卡:取出银行卡(或预付费卡)给店员→ 输入密码(部分无密码党省去此步骤)→等待打印机打印小票→拿笔签名,你不觉得这个流程非常复杂吗???&br&要是遇到前面排了几个人,个个都刷卡!再遇上输入密码错......のの.......&br&这时,你只能淡定地望着柜台前杜蕾斯&冈本,假装看口香糖.....&br&&br&&b&再举2个真实的场景:&/b&&br&1.当你发现晚上下班后饥肠辘辘地乘着地铁回家,却发现钱包未带,没有现金,没有银行卡,你连去便利店买个便当都没机会,这时候你拿起手机用扫码支付付款,泪奔的心都有了!&br&2.当你发现你买的商品是¥11.4,尼玛又暗暗不爽口袋又多几个硬币零钱了,这时候,如果用扫码支付,再也没有叮咚作响的硬币~&br&&br&&b&再说一下店员&/b&&br&扫码支付刚推出那段时间,几乎看到不同品牌的便利店都习惯性看一下是否支持支付宝扫码支付,如支持,就会象征性地拿瓶饮料主动告诉前台,用扫码支付,这时候也会借此和前台店员聊聊,得到的回答几乎高度一致:&br&从20几岁的小姑娘到四五十岁的阿姨,都是异常的肯定扫码支付的便捷性!!&br&甚至毫不夸张的说,所遇到的每个店员&b&脸上真的都洋溢着幸福的微笑!!&/b&&br&&b&不用再去找零了,更不用担心收到假币了,而且效率其高!基本上几秒的事情~&/b&&br&&br&而彼时的我,真的满满地感动。&br&这种感动是作为一个互联网从业者难得的满足,虽然扫码支付不是我做的,但是能看着自己所从事的这个互联网行业,同行们所创造的一个又一个产品,在逐渐地影响着平民大众生活,能够被平民大众所认可、所喜爱!除了感动,我相信也是一种激励,希望自己也能创造几款被平民大众所认可的互联网产品。&br&&br&说到这,答案不得而知~&br&虽然路途坎坷,但被认可、被喜爱,比现在去定义它很有前景更有说服力。&br&&br&共勉~
支付宝推出的扫码支付,在全家、711等便利店已经广泛推广使用,最近微信也不不跟随上线了.... 先不管现在到底使用率几何,因为这肯定需要一个培育的过程。 先从一个顾客的身份来回答此问题: 现在你去买东西: 要么给现金:总会遇到翻包找零钱的时候吧? 要…
验证码的意义是&b&增加&/b&&b&不知道你的密码的人用计算机暴力破解你的密码的难度&/b&,它的确防不住你题目说明中提及的第二种情况,也就是盗号者已经知道了你的密码。&br&&br&所谓暴力破解,就是在只知道你的用户名的前提下,一个一个去试可能的密码。因为这一过程非常机械,所以一般人都会选择&b&写一个程序来做&/b&,虽然缓慢的网速或网站会拖慢它的速度,但哪怕它只能每秒试一次,每天也能试上八万多次,那些用生日当密码的人撑不过两个礼拜。如果有选择性地生成这些可能的密码(比如只选择能拼成单词或汉语拼音的字母组合),能攻击的人群就更广了。&br&&br&而验证码就是针对这一攻击方法里面「写一个程序」这一环节来对抗它的。验证码的学名叫做「全自动区分计算机和人类的公开图灵测试」,&i&Completely Automated Public Turing test to tell Computers and Humans Apart&/i&,简称 CAPTCHA(原创研究:这个罗嗦的名字大概只是为了凑出 CAPTCHA — &i&capture you&/i& 这个谐音而硬凑出来的,因为「图灵测试」的意图本来就是「区分计算机和人类」)。它的作用就是验证输入密码的人其实是个能从那张图里面读出数字的人,而不是一个无法理解图像的脚本程序。验证码通常以扭曲的文字方式出现,是因为让计算机去识别这些文字非常困难。&br&&br&不过鉴于目前的图像识别技术已经足以匹敌绝大多数扭曲字符的验证码,所以其他形式的 CAPTCHA 也陆续出现,比如问用户一个常识性的问题,要用户把几张颠倒的图片全都调正,或者从一些猫的图片里找出哪一张是狗——总之是一些计算机很难做到的事情。这样一来暴力破解的方法基本上就废了,除非去找血汗工厂人肉破解 CAPTCHA(Google「captcha job」可以看到这样的网站)。&br&&br&除了 CAPTCHA 之外,网站还可以利用其他方式来增加暴力破解的难度,比如输入错误的密码需要多等几秒钟,或短时间内连续输入若干次错误的密码就会导致帐号被锁等等。&br&&br&而如果要防范你题目说明中的第二种情况,普遍的方法是「两步认证」,也就是除了密码之外,你还需要另外别的什么来证明你是输入密码的人。常见的方法包括:给你在网站上注册的手机发一个随机数,让你输入此数字;让你输入某个随身设备按照只有它和你欲登录的网站才知道的特定规则在某个特定时间生成出来的数字(如 &a href=&///?target=http%3A//Battle.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Battle.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& authenticator);或在你使用的电脑上插入一个特定的硬件设备(如 YubiKey)。
验证码的意义是增加不知道你的密码的人用计算机暴力破解你的密码的难度,它的确防不住你题目说明中提及的第二种情况,也就是盗号者已经知道了你的密码。 所谓暴力破解,就是在只知道你的用户名的前提下,一个一个去试可能的密码。因为这一过程非常机械,所…
谢邀。&br&&br&&img src=&/v2-7ca92d583eeeaba2d96b_b.png& data-rawwidth=&720& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-7ca92d583eeeaba2d96b_r.png&&
更新&br&推荐&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming Computer Vision with Python&i class=&icon-external&&&/i&&/a&, 这位作者用python重写很多基本的Computer Vision算法,书的final draft在首页,代码也在Github上边。类似于验证码识别的问题呢,大家可以直接refer Chapter 8 - Classifying Image Content, 里边不仅有对3种classification approaches的详细解释,而且还有比如手势识别,OCR识别等经典问题,更更重要的是,Github上直接有那些data set,意味着你可以自己做着玩,非常好的书,编码方面对我帮助很好。&br&&br&&b&哪些验证码不好识别?&/b&&br&个人以为大概2个方面&br&&ul&&li&&b&图像的预处理&/b&&/li&&/ul&我们看下面大概知道通常第一步就是需要分割图像成几个小的图像,然后每个笑的图像尽可能的各自独立,这一步应该是比较麻烦的一步啦。&br&&img src=&/ac1ecc220f9acfbf2979480cba8a4e06_b.jpg& data-rawwidth=&435& data-rawheight=&259& class=&origin_image zh-lightbox-thumb& width=&435& data-original=&/ac1ecc220f9acfbf2979480cba8a4e06_r.jpg&&&br&比如上图所示铁道部静态的验证码,这就是非常容易分割的啦。&br&&br&&img src=&/ba1bba3adbae687f66bd9f92_b.jpg& data-rawwidth=&1130& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&1130& data-original=&/ba1bba3adbae687f66bd9f92_r.jpg&&再比如google的这个验证码,我们发现左边的个单词可能就算是人类也需要花些时间来识别,可是右边的这个continued我们一眼就可以看出来。据说,右边的这个词是google扫描书籍后的图像,然后因为很多图像计算机也不好识别,所以就通过这个方式来使用人力进行识别,通常只要右边的词写对啦,就算是正确的好像,而左边的经过扫描之后的词呢就会根据大部分人写出的答案来对其识别,so smart.&br&&br&&ul&&li&&b&训练样本&/b&&/li&&/ul&大家看到每个网站可能用的验证码都不太一样哈,所以为了提高准确率,训练样本(training samples)对了classifier的功效起着致命的作用。比如12306的验证码,我们可能就需要花一定的时间去label samples;然后对于腾讯一系列的验证码,可能又需要花些时间去label samples。而且通常来讲,样本越大,准确率会提高。这样带来的结果就是成本高!!&br&&br&最后,那有没有办法用12306的训练样本来识别腾讯的验证码呢?毕竟他们都是验证码嘛。这样一来就可以节省时间啊,那就是成本的减少啊。学术界很早就想到了这样子的一个方向,叫做 Transfer Learning (or Domain Adaptations)。蛮有趣哒!&br&--------------------------------------------------------------------------------------------------------------------&br&&br&基本是Machine Learning中经典问题啦 - recognition,然后recognition又被应用在很多很多的方面,比如最基本的text classification, image classification,甚至是video classification。对于验证码的处理,基本是以下几步啦,其他问题的framework也基本如此,不一样的大概就是不同的方法去建立model,然后SVM也有很多变形。&br&&img src=&/06c71f65302a6cfe9b08e0ef3903cadc_b.jpg& data-rawwidth=&253& data-rawheight=&75& class=&content_image& width=&253&&&blockquote&&ol&&li&&b&验证码图像的预处理
&/b&&/li&&li&&b&建立模型&/b&&/li&&li&&b&识别&/b&&/li&&/ol&&/blockquote&接下来一个个的解释吧,亲!&br&&br&&b&验证码图像的预处理
&/b&&br&比如我们拿到以上“2907”这样子的图像,对吧,第一步需要做的就是分割使得每一个字符都很好的独立于各自的图像当中,所以,这样子之后呢,我们都会得到4张小的图像,这些图像分别表示为2,9,0,7,当然我们人眼很容易就知道这是什么,可是计算机不知道呀!&br&&br&分割之后,在要做的就是图像方面的处理啦,大概是让数字变的更加明显一点,比如灰度方面的处理。&br&&br&&b&建立模型&/b&&br&这个应该是最为critical的部分,我尽量说清楚些。其实在recognize这个验证码之前,我们会收集很多类似的图像,并且人工进行标注。比如说哈,&img src=&/0db1ae378f9e8fa54ac39c48c975488d_b.jpg& data-rawwidth=&378& data-rawheight=&310& class=&content_image& width=&378&&这样子的数据被称之为 training data,接下来就是建立各种各样的模型吧。可能会用PCA,LDA...之类的方法对这些training data进行简化描述。接下来会有蛮多recognition approach,根据不一样的approach建立不同的模型。这里讲常用的两种。&br&&ol&&li&&b&K-Nearest-Neighbour &/b&被称之为lazy learner,是因为其实不需要建立模型,用PCA,LDA..之类的方法对training data进行描述就好啦。待会讲详细的过程。&/li&&li&&b&Support Vector Machine &/b&应该是现在识别系统当最流行的方法啦,这个的的确确建立了个模型。如下图所示,我们会把training data投影到坐标系当中,然后找到一个hyperplane which best separates different samples。 之所以是hyperplane,数据的维度可能很高。SVM有很多变形,这里就不赘述啦。找到这个hyperplane之后,我们就可以进行识别啦。&img src=&/803d4cdcc15b6da6fdda1a303a5e871a_b.jpg& data-rawwidth=&800& data-rawheight=&862& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/803d4cdcc15b6da6fdda1a303a5e871a_r.jpg&&&/li&&/ol&&b&识别&/b&&br&&ul&&li&&b&K-Nearest-Neighbour (KNN) &/b&&/li&&/ul&我们把需要识别的图像称之为test case, test case经过上边同样的处理之后呢,我们就从training data当中选出离这个test case最近的K的training samples。 &img src=&/9c71d8fb0735cba7acddea_b.jpg& data-rawwidth=&578& data-rawheight=&330& class=&origin_image zh-lightbox-thumb& width=&578& data-original=&/9c71d8fb0735cba7acddea_r.jpg&&比如上边的这个例子,K = 5, 然后对于 x_q 而言呢,最近的5个samples,其中3个是negative,2个是positive,当然我们就会认为x_q是negative的啦,基本就是按照majority vote来个x_q分类。具体到验证码的话,假如一个图像最近的5个training samples当中有4个是“5”,一个是“6”,那么计算机就直接认为这个图像指向的是“5”。&br&&br&&ul&&li&&b&Support Vector Machine (SVM)&/b&&/li&&/ul&前边讲到说我们会找到一个hyperplane, 那么接下来需要做的就是计算test case到这一个hyperplane的距离,如果是 距离&0 (距离可以小于 0 哒,这个就看怎么定义方向啦) ,那么这个test case就会被label成positive,否则的话,那句只能是negative啦。具体到验证码,那就是个 multi-class SVM啦,因为会有 10 digits + 26 letters, 总共有36个class,那计算机机会建立好多个不一样的SVM,然后通过一些方法来对test case进行分类。&br&&br&第一次认真回答这么technical的东西,希望有帮助!想知道更多的话,建议去coursera上听听课。喔,对啦,之前讲过这个framework可以被引申到很多应用哒,其中一个就是沸沸扬扬的面部识别呀,这个有一个当时上课做的project,有兴趣的同学看看呗。&b&&a href=&///?target=https%3A///wihoho/FaceRecognition& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wihoho/FaceRecognition · GitHub&i class=&icon-external&&&/i&&/a&&/b&
更新 推荐, 这位作者用python重写很多基本的Computer Vision算法,书的final draft在首页,代码也在Github上边。类似于验证码识别的问题呢,大家可以直接refer Chapter 8 - Classifying Image Content, …
题主,不要误会,说起验证码,我不是针对你。。。。。&br&&img src=&/379f6fba2abbaa54e11c8bcdc4ee672a_b.png& data-rawwidth=&599& data-rawheight=&876& class=&origin_image zh-lightbox-thumb& width=&599& data-original=&/379f6fba2abbaa54e11c8bcdc4ee672a_r.png&&&br&&br&&a href=&///?target=http%3A//www.geee.net/contact.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Geee contact&i class=&icon-external&&&/i&&/a& , 拿去玩儿吧各位。
题主,不要误会,说起验证码,我不是针对你。。。。。
, 拿去玩儿吧各位。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 win7玩cf不能全屏 的文章

 

随机推荐