美文网首页scrape爬虫python爬虫
极验验证码破解—超详细教程(三)

极验验证码破解—超详细教程(三)

作者: 起昵称真麻烦啊 | 来源:发表于2017-08-15 20:14 被阅读5035次

    极验验证码破解—超详细教程(一)

    极验验证码破解—超详细教程(二)

    极验验证码破解—超详细教程(三)

    Gayhub:FanhuaandLuomu/geetest_break

    2017.8.21 代码以上传,可供参考

    [国家企业信用信息公示系统为例]

    目录

    一、网站http://www.gsxt.gov.cn滑动验证码概述.

    二、极验验证码破解-抓包分析.

    三、极验验证码破解-搭建本地验证码服务.

    四、极验验证码破解-分析geetest.js,得到所需参数.

    五、极验验证码破解-Track的获取.

    六、极验验证码破解-获取背景图片及缺口距离d的计算.

    七、极验验证码破解-总结.

    参考文献.

    运行截图.


    五、极验验证码破解-Track的获取

    1. Track的生成可以根据图片缺口的距离d,使用随机函数随机采样生成。比如d=120,则我们控制总拖动时间为t(t一般小于3s),则可以每很小的时间内(每次随机时间,如10ms)移动一小段随机距离,最后在时刻t时正好移动到d。但考虑人拖动会有先加速在减速的特点(或许还有其他特点),geetest的服务器可能会识别到时机器所为,我们很难找到人行为的轨迹特点并且难以模拟,因此生成轨迹不太可行(也许可行,但代价较大)。

    2. 我们提出另一种方法替代Track的生成,即手工事先存储备用Track。验证码图片总长大概250左右,由于我们已经实现了在Console中打印Track的js,因此我们可以多次刷新http://localhost:8000/页面,得到不同缺口位置的验证码,手动拖动至缺口处,保存Console中的Track。

    3. 经过试验发现,缺口位置大多停留在中间位置,并且拖动误差在3以内都可以接受。因此我们可以用当前位置d的Track来代替d-1和d+1的Track(如缺口位置120,则119和121的Track可以不用测试,直接使用120的Track)。这样大大减少了刷新页面获取Track的次数,我收集的Track列表如下:

    为了方便统计,我按个位数将Track存放在10个文件中。

    我们将所有的Track整合为dict(t_dict.pkl),格式如下:

    {k1:v1},其中k1为缺口位置,v1为Track(字符串形式)。

    至此我们得到Track备用列表,我们可以根据实际的缺口位置获得相应的Track值,下一节我们将会讲解如何得到缺口距离验证码左边的相对距离d。

    六、极验验证码破解-获取背景图片及缺口距离d的计算

    1. 我们首先寻找图片的来源。回忆分析get.php?的时候,看到过“fullbg”的出现,因此很大可能背景图片信息是通过get.php?传来的。查看Response如下:

    根据图片的url打开图片:

    可以发现图片已经乱码,这是因为返回的图片是局部重合产生的。

    查看验证码图片的审查元素:

    可以发现,展示的图片是从原始乱码图片中多次截取小段,合成而成的。具体的合成方式如background-position所示。如background-position:-157px,-58px。则该小段图片为源乱码图片的(157,58,157+10,58+58)。根据上述分析,我么可以还原bg和fullbg的非乱码图片(即所看见的背景图片)。

    我们通过比较两张图片的像素值,即可得到缺口的位置,缺口左上角横坐标的值即为d。我们封装了get_dist函数如下:

    函数其它细节请参见项目源码。

    七、极验验证码破解-总结

    1. 至此,geetest验证码的关键技术点已经讲解完,有没有感觉号称使用深度学习技术进行人机验证的滑动验证码也不过如此。最近我会在Github上开源所有代码,希望得到大家的指点。

    2. 当时做这个项目大概断断续续做了两星期左右(2017.03),开始是参照网上教程使用selenium控制鼠标来实现,后来发现鼠标移动的速度太机械化,成功率太低(滑动到缺口处,但被识别为机器行为)。所以,我采取了退而求其次的方法,避免对轨迹路径的生成,直接使用已经成功验证的历史轨迹来作为当前轨迹。经过试验,这种方法成功率接近100%,且复杂度不高,历史轨迹单独存在硬盘,可定期更新(以防止轨迹被封)。

    3. 最近(2017.07)突然想写个文档教程分享技术,算是个学习笔记,也算是对自己曾经努力的记载。该文档断断续续写了4个晚上的时间,欢迎大家阅读并指正。

    4. 最后附上Github地址,里面有一些小爬虫和NLP相关的项目,欢迎围观。https://github.com/FanhuaandLuomu

    参考文献

    1.http://blog.csdn.net/paololiu/article/details/52514504

    2.https://zhuanlan.zhihu.com/p/22866110?refer=windev

    3.https://zhuanlan.zhihu.com/p/22404294

    (向以上参考文章的作者致谢~)

    运行截图

    Python geetest_spider.py

    注意:要爬取的企业列表写在searchword_list。

    (THE END,如果对您有帮助,请点个赞~~~)

    相关文章

      网友评论

      • 陈穗龙666:有更加方便的办法处理这个验证码 http方式识别极验验证码 jiyan.c2567.com
      • 福星M高照:极验验证码自动识别接口,这家做的不错,速度价格都可以~

        http://www.n598.com
      • cff0d631bf4a:已经解决行为模拟问题 有需要的加我QQ1263777979
        cff0d631bf4a:工商验证码识别的源码 需要的加我Q1263777979
      • Par_Amour:5.0版本的geetest.js还是可以分析下的 ,6.0版本的已经加密的有点没法分析了,楼主分析过吗
        日星隐曜:5.0版geetest.js代码才1800多行,6.0都已经6000多行了:smile:
        起昵称真麻烦啊:刚去看了下,果然加密了,没写教程半年都没变。。。看起来挺难搞的,最近没时间做这个了,等拿到offer再研究。【看来好多人的程序要大改了,哭笑】:joy:
        782fd59e5cf3:今天一看6.0了。。。真愁人
      • 782fd59e5cf3:希望楼主有机会研究研究,我也在看,有机会一起合作干掉它。
        起昵称真麻烦啊:@shuttle_lee 不好意思,感谢打赏!这几天忙着面试,没及时回复。我尽快把代码整理上传。(其实代码比较low,提供个思路,欢迎交流)
        4e092453a0ba:好像github上没有放代码啊,能不能分享一下
        起昵称真麻烦啊:@修炼的石头 加油(ง •̀_•́)ง
      • 782fd59e5cf3:感谢楼主公开的心态,但是要说一点,我跟楼主的做法差不多,先是弄了一批轨迹,另外自己写了个方法,验证通过就保存,于是积攒了好多txt,不过最近发生了悲催的事情,就是我之前的轨迹好多都用不了了,也就说geetest的学习可能加深了,所以真正模拟人的行为才是关键。
        起昵称真麻烦啊:@Roceys 各种海投面试
        Roceys:@起昵称真麻烦啊 楼主最近工作怎样
        起昵称真麻烦啊:@修炼的石头 是的,我做的时候也有之前验证成功后来不行了,过段时间又成功的情况。猜测是一条轨迹一段时间不能多次使用。我目前是每个距离保存了多条轨迹数据,有必要的话还可以经常更新轨迹库。归根到底还是直接生成轨迹比较复杂,我现在在准备找工作没时间做这个,希望忙完可以继续想想怎么找特征,生成类试人滑动的轨迹。

      本文标题:极验验证码破解—超详细教程(三)

      本文链接:https://www.haomeiwen.com/subject/tqgvrxtx.html