干货|Python大佬手把手带你破解哔哩哔哩网滑动验证(下篇)
/1 前言/
昨天我发布了Python大佬手把手带你破解哔哩哔哩网滑动验证(上篇),没有来得及学习破解理论的小伙伴可以戳进去看看噢!今天这篇文章,我们直接进行讲解哔哩哔哩极验破解,重点进行方法实现。
本篇文章主要是针对哔哩哔哩的滑动验证码进行破解。
/2 打码参数获取/
1、根据上篇文章的总结,我们需要在目标网站(哔哩哔哩)上找到gt,challenge,api_server这三个参数,所以我们现在切换到哔哩哔哩找一下。
2、我们打开浏览器,点击哔哩哔哩网页的network,刷新网页,重新加载所有请求,之后使用crtl+f快捷键,迅速搜索challenge,如下图所示。
3、通过上图我们可以看到,可以找到那个参数,但是到底是不是这个呢?放心,人家2captcha文档说了,通常可以在initGeetest发现它。我们再尝试查找一下,点击Elements,然后使用快捷键ctrl+shift+f全局搜索一下,搜索initGeetest,如下图所示。
4、如上图所示,还真有一个,我们点进去看看详情。
可以看到在829行的位置,还真的有initGeetest这个值。我们在这里打上断点,再次刷新看看,匹配一下是否和network里的一致。
5、首先,我们看看断点对应的值,点进去看看详情,如下图所示。可以看到gt和challenge这两个参数对应的值。
6、接下来再看看network里边对应的值,我们点进去看看详情。
诶,至少这两个地方的值看着一样的,我们可以确定,他们之间肯定有很大关系。到目前为止,我们已经确定了两个值,即gt和challenge,还差一个api_server,继续往下进行。
7、接下来我们随便输入账号密码点击登录一下,触发一下极验,在elements元素中,搜索api_server,如下图所示。
上图中红色框框圈起来的地方表示的就是api_server。至此,基本工作已经完成了。
/3 具体实现/
1、在第二节中,我们已经找到了打码请求参数,找齐参数之后,接下来我们就该请求打码平台了。
2、在前面已经说到,在network中,请求链接https://passport.bilibili.com/web/captcha/combine?plat=11就可以获得gt,challenge,外加一个key,即可发送请求了,部分代码如下所示。
这样,我们就拿到了gt和challenge。
完整的代码,我会放到后面的github链接,觉得不错的话,记得给个star噢!
3、接下来我们请求一下打码平台的接口,带上自己参数。但是需要注意的是打码平台需要请求两次,第一次返回的是任务ID,第二次才是滑动模块的成功值。
注:challenge是动态的,其他的是静态的;API_KEY是打码平台的key,在上篇文章开头介绍提及的那个key。
4、通过两个函数,我们就成功的拿到了打码平台返回的值。
5、下图中红色圈起来的,就是破解极验的第一个关键参数,这个参数拿到之后,就已经跟人家打码平台没关系啦!我们只需要带着相关参数,登录哔哩哔哩就好了。
6、但是这个参数要往哪发呢?在network经过一番查找后,似乎发现一个和登录有关的接口,如下图所示。
通过上图,我们可以看到,红色框圈起来的部分,正是2captcha平台返回给我们的数据;而那个key值正是 ...combine?plat=11这个url返回的key。就是password,进行了加密,那么他是如何加密的呢?一起来看看
7、如下图所示,经过不断的断点,不断的断点...终于确定了,密码会经过这个函数进行加密,它本质是 RSA非对称加密,听着就吓人,不过不要慌,盘它就是了。
这个函数逻辑是先请求一个//passport.bilbilli.com/login?act=get&r="",这个url,带上一个随机数,然后会返回一个随机hash,和一个公钥key,公钥key是固定的,然后将随机hash和密码进行加密,发送给它后,后台进行解密。
8、破解代码部分如下图所示。
通过上述两个函数,就模拟出了密码,最后,我们只需要提交到后台就可以了。
/4 示例效果/
1、如果账号或者密码错误的话,将会有如下图的提示。
2、如果账号和密码都正确的话,将会有如下图的提示。
上图中第一个表示的是跳转的url,第二个是返回的cookie,如果我们在请求哔哩哔哩的其他东西的话,只需要带着这个cookie就好了。
至此,我们的破解就告一段落啦!
/5 总结/
写到这里,这篇文章已经超过2500个字了,加上哔哩哔哩破解上篇,将近5000字的长文了,小编在这里大概整理一下破解的主要流程。
1、首先,我们确定需要第三方平台去帮助我们破解极验,之后我们需要找到这个第三方平台,并且需要进行注册。
2、注册之后,我们需要阅读API操作文档。
3、根据API操作文档,在翻译的帮助下,找到目标网站的gt,challenge和api_server三个值,然后,加上其他一些参数发送到 https://2captcha.com/in.php,会返回一个任务ID。
4、然后等个15秒左右以后,再像https://2captcha.com/res.php请求,带上任务ID加上一些其他参数,即可进行破解。
5、代码详情已经上传到GitHub:https://github.com/cassieeric/python_crawler/tree/master/bilibili_decryte
这两篇文章主要介绍了第三方打码平台、破解理论和具体实践,以破解破解哔哩哔哩网址极验为例,展开具体的破解过程,其中代码已经上传到github,感兴趣的小伙伴们可以去尝试一下噢!