Java-有什么办法可以获取图片验证码中的字符?
在模拟登录的时候,经常遇到需要输入验证码的情况?有什么办法能识别出图片中的验证码?以前用过一个google的开源项目(tesseract-ocr)的项目,结合ImageMagic进行图片识别,但是它对重叠的数字,识别效果不是很好,请问有什么其他办法获取到验证码吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这个问题无解的,关系到最基础的学科知识了,对每种图片,使用的提取特征都不相同,所以造成识别极困难,,还是等某大学的某教授突破吧
模拟登录???
如果你是为了测试登录,而采用ocr方法能成功的话,那你的验证码算法该换了。
我们在用captcha的时候尽量把字符变形和弯曲,加干扰码,减小字与背景对比度等。对于不是很复杂的验证码还是容易解的。现在的OCR识别技术还是比较高的。
http://herecomethelizards.co.uk/mu_captcha/
可以看看这里,用JS来破解简单的验证码
验证码识别没有万能的解法,但可以通过模式识别训练来提高相同类型验证码的识别率,比如说用特定类别的验证码来做特训,抽取大量的特征码,通过模式匹配,可以高效的识别出同一类型的验证码,具体的技术可以参考OpenCV。
OpenCV的一些介绍
http://zh.wikipedia.org/wiki/OpenCV
模式识别的技术资料
http://opencv.willowgarage.com/documentation/c/objdetect_cascade_classification.html
我觉得破解captcha的成本比较高,而防护方法更新成本比较低,如果不是简单的captcha,最好免去破解的想法。
目前几个大公司的captcha,除了yahoo的被几度破解,其它公司,如微软、google都是极难破解的。微软有独立部门在研究这个,他们甚至控制人的识别率在一个百分比以下。
对于一些小网站的captcha,比较容易破解,比如我以前破解过vbulletin,phpbb,paypal,oblog等,所用的库是http://kognition.sf.net/,加上自己扩展的简单图像处理方法,基本都能搞定。
破解这个东西,好防就好破,攻防是对立与统一的。
防不一定就好做,需要从协议、软件本身保证安全性。协议做得不安全,可以伪造IIS或Apache返回验证成功信息;软件本身没有保护,可以被逆向分析并修改验证逻辑。
协议做安全,需要把通信的内容做加密,具体方法:
服务器返回信息时:1)把通信数据做hashcode。2)使用非对称加密算法中的私钥对hashcode做签名,并把数据。
客户端接收时:1)用预先配置好的公钥解开被签名的hashcode。2)对数据做hashcode与解开的hashcode做对比,相同则认为是服务器返回的。
这样把通信数据做hashcode防篡改,使用私钥做签名可以认证信息确实是由服务器发送的。
而软件本身做安全需要对软件加壳或者自身带反调试、反编译功能。这样可以防止破解者修改软件逻辑,绕过网络验证。当然加密壳和反调试也可以被脱壳和反反调试。
而且就算协议和软件本身都做安全了,还可以Hook应用层或内核层API,使得调用操作系统底层的验证函数返回验证成功,这个方法我在破解Visual Studio 插件nFringe中得到应用,HOOK底层时间函数过验证。
至于识别验证码网上有很多开源代码,百度、Google一下啦,不过加了背景干扰、数字字符变形的不一定能准确识别。
复杂的验证码很难破解
有一种人工方法
将需要破解的验证码图片放到流量大点的内容站,当用户访问时随机出现,让用户手工填入,传递到破解的进程当中进行利用
魔高一尺道高一丈,这个问题无解,比如用汉字,用问题来做识别。
实际上在玩游戏的工作室中,会自动把这些图片集中到一个人的面前,由人来解答,然后再自动发出去。