程序笔记   发布时间:2022-07-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用Python+hackcaptcha破译12306图像验证码,信息安全之路大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

今天是用hackcaptcha库࿰c;结合开源的DecryptLogin包打造一个验证码可以自动处理而非手动输入的工具包。 废话不多说࿰c;让我们愉快地开始吧~

开发工具

Python版本: 3.6.4

相关模块:

requests模块;

opencv-python模块;

numpy模块;

keras模块;

tensorflow模块;

以及一些python自带的模块。

环境搭建

安装python并添加到环境变量࿰c;pip安装需要的相关模块即可。

项目介绍

让我们先来简单介绍一下之前开源的DecryptLogin包࿰c;DecryptLogin是一个借助于requests包进行各大网站模拟登录的python第三方包࿰c;项目地址:

https://github.com/CharlesPikachu/DecryptLogin

项目文档:

https://httpsgithubcomcharlespikachudecryptlogin.readthedocs.io/zh/latest/

pip安装这个包之后࿰c;你可以很轻松地实现各大网站的模拟登录操作,例如模拟登录知乎:

from DecryptLogin import login

lg = login.Login()
infos_return, session = lg.zhihu(username='Your Username', password='Your password')

其中infos_return是一个字典对象࿰c;用于记录用户登录后的一些信息࿰c;而session则是用户登录之后的会话。进行模拟登录的意义在于很多网站的数据必须在用户登录的状态下才能看到࿰c;并且很多操作也必须在用户登录的状态下才能进行(例如每日签到等等)。

上面那段代码运行后效果如下:

用Python+hackcaptcha破译12306图像验证码,信息安全之路

换句话说࿰c;在默认情况下࿰c;DecryptLogin库要求用户手动输入登录时遇到的验证码。

能不能让DecryptLogin自动处理验证码呢?

答案是当然可以࿰c;你只需要自己定义一个验证码处理函数࿰c;然后在登录的时候作为参数传入就ok了࿰c;示例代码如下

from PIL import Image
from DecryptLogin import login

'''定义验证码识别函数'''
def crackvcFunc(imagepath):
    # 打开验证码图片
    img = Image.open(imagepath)
    # 识别验证码图片
    result = IdentifyAPI(img)
    # 返回识别结果(知乎为数字验证码)
    return result

lg = login.Login()
infos_return, session = lg.zhihu(username='Your Username', password='Your password', crackvcFunc=crackvcFunc)

上面这些内容其实在项目文档里都有详细的介绍。

hackcaptcha包诞生了࿰c;一款主要服务于验证码自动识别的python第三方包࿰c;项目文档:

https://hackcaptcha-en.readthedocs.io/zh/latest/

因为开源hackcaptcha的主要目的是解决DecryptLogin库的验证码自动处理问题࿰c;所以hackcaptcha目前只支持两种类型的验证码自动处理࿰c;即数字(含英文字母)验证码以及12306的点击验证码。当然࿰c;以后会随着DecryptLogin库的更新而逐渐加入一些新的支持。你只需要pip安装这个库就可以开始使用它了(安装之前建议先提前在电脑上装好keras和对应版本的tensorflow):

pip install hackcaptcha

对于数字验证码࿰c;hackcaptcha直接调用了百度的文字识别API:

https://ai.baidu.com/tech/ocr

因为我看了一下:

用Python+hackcaptcha破译12306图像验证码,信息安全之路

用户每天可以免费调用这么多次࿰c;个人学习与玩耍使用完全是足够的

具体而言࿰c;你需要到上面那个网站上自己注册一个账号࿰c;并新建一个应用࿰c;从而获取到API Key和Secret Key就行了:

用Python+hackcaptcha破译12306图像验证码,信息安全之路

简单写几行代码就可以实现验证码识别的了:

from hackcaptcha.crackers import WebapisCracker
cracker = WebapisCracker()
infos_return = cracker.digital(imagepath='CAPTCHA IMAGE PATH', webapi_type='baidu', app_id='AppID', api_key='API Key', secret_key='Secret Key')
返回的结果格式为:
{
    'is_success': True,
    'Result': 'AFD2',
    'error_msg': ''
}

对于12306的点击验证码࿰c;我查阅了网上的做法࿰c;一般就是把12306的验证码做一下图片分割:

用Python+hackcaptcha破译12306图像验证码,信息安全之路

然后分别训一个图片分类器和文字分类器就行了。所以我就直接拿来用了。只需要这样调用就行了:

from hackcaptcha.crackers import AlgorithmsCracker
cracker = AlgorithmsCracker()
infos_return = cracker.click(imagepath='CAPTCHA IMAGE PATH', algorithm_type='zt12306', text_model_path='text.h5', object_model_path='object.h5')

返回的结果格式为:

{
    'is_success': True, 
    'Result': @R_674_6879@,2,5'
}

其中text.h5和object.h5这两个模型在这可以下载到:

https://github.com/CharlesPikachu/hackcaptcha

我们可以结合DecryptLogin库来看下效果(请注意࿰c;下面的代码只适用于DecryptLogin版本号大于等于0.1.29的情况):

from DecryptLogin import login
from hackcaptcha.crackers import AlgorithmsCracker

'''定义验证码识别函数'''
def crackvcFunc(imagepath):
    cracker = AlgorithmsCracker()
    infos_return = cracker.click(imagepath=imagepath, algorithm_type='zt12306', text_model_path='text.h5', object_model_path='object.h5')
    return infos_return['Result']

lg = login.Login()
infos_return, session = lg.zt12306(username='用户名', password='密码', crackvcFunc=crackvcFunc)

运行效果:

用Python+hackcaptcha破译12306图像验证码,信息安全之路

可以发现我们不再需要自己输入那令人头大的12306验证码࿰c;而直接调用训练好的模型进行自动识别输入即可实现12306的模拟登录操作了~

文章到这里就结束了࿰c;感谢你的观看࿰c;Python信息安全࿰c;下篇文章分享Python+SELEnium破译淘宝滑块验证码破解

为了感谢读者们࿰c;我想把我最近收藏的一些编程干货分享给大家࿰c;回馈每一个读者࿰c;希望能帮到你们。

干货主要有:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

All done~私信获取完整源代码。。

往期回顾

用Python+SELEnium破解春秋航空网滑块验证码࿰c;信息安全之路

用Python+SELEnium破解B站滑块验证码࿰c;信息安全之路

简单实现入门级隐写术

大佬总结

以上是大佬教程为你收集整理的用Python+hackcaptcha破译12306图像验证码,信息安全之路全部内容,希望文章能够帮你解决用Python+hackcaptcha破译12306图像验证码,信息安全之路所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。