首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

密码爆破之验证码的识别

通常对网站进行测试时找到后台地址后就想爆破一下,但是因为验证码的原因不能进行爆破,于是有了此文。

普通图形验证码识别的两种方法:一、第三方库识别验证码(这种方法我不太推荐,第二种选择更好一些)首先安装python的tesserocr这个库.,令人遗憾的是这个库的识别率不是很高,但可以通过大量的数据训练提高识别率。

通过审查元素可以发现验证码是一张图片

为了方便演示,我将图片保存到了本地。

第一种:首先建立一个Image对象,调用了tesserocr的image_to_text()方法,第二种方法是直接调用tesserocr的file_to_text()方法。

第二种方法的识别效率并不比第一种的识别效率好,所以我建议使用第一种方法。

输出的结果之中带有空白字符,所以在第一种方法获取结果后,我们采用正则来去除空白字符,最终结果为6495

提高识别效率

重新执行上面的代码结果为KKFT,这结果显然不是我们想要的。

对于这种情况,我们还需要做一下额外的处理,如转灰度、二值化等操作我们可以利用 Image 对象的 convert ()方法参数传人,即可将图片转化为灰度图像,我们还可以指定二值化的阔值 上面的方法采用的是默认阔值 127 不过我们不能直接转化原图,要将原图先转为灰度图像,然后再指定二值化阔值:

image = image. convert(' L' )threshold = 80table = []for i in range(256):if i < threshold:table.append(0)else:table.append(1)image = image.point(table,’1' )image. show()

转换结果如图所示。此时的识别结果是正确的。获取到正确的验证码文本后,我们可以通过urllib或者requests模拟发送表单从而实现爆破的目的。

二、第三方API识别验证码这里我以某识别验证码的网站的api为例1:首先注册用户并登录2:注册软件id打开用户中心,找到软件ID

点击生成一个软件ID

软件名称和软件说明可以随意填写,自己看得懂就好。

然后获取官方的api,这个api是python2版本的,我们需要更改几个地方

之后我们在chaojiying.py中定义一些变量用于保存用户数据

soft_id是你生成软件ID的IDsoft_kind是价格体系中的验证码类型,如图所示

为了方便演示,我直接将要识别的验证码图片放到了本地

然后将Chaojiying_Client()这个类中传入三个参数,分别是xxx网站账号,xxx网站密码,软件id

open中的路径更改成获取的图片路径之后退出编辑,终端运行python3 chaojiying.py

运行打印出了一个json数组,其中pic_str就是验证码的值。

准确无误!有了验证码的值就可以实现对有验证码的后台进行爆破(虽然这是废话…)对于其他类型的验证码(极验滑动验证码、点触验证码、微博宫格验证码),需要专业的爬虫知识,调用第三方api识别等待,请自行扩展学习。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210309A063E700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券