领先的互联网解决方案提供商,专业关于百度站长平台图片验证码的处理思路!

深圳 : 0755-2101 0201 广州 : 020-8092 8113 东莞 : 0769-3326 0066 <<<全国分公司
  • 网站建设
  • SEO推广
  • 客户案例
  • 联系我们
  • 扫描添加微信

    30秒获取报价:

    提交您的电话,免费赠送一年维护及关键词排名

  • 联系人*
  • 手机号*
  • 关于百度站长平台图片验证码的处理思路

    您所在的位置:首页 -> SEO培训


    发布时间:2019-12-02 10:12

    前段时间发的白帽和谈天说地没有打赏,感觉是分享关于黑帽的更容易获得打赏,那就接着分享关于黑帽这方面的吧。

    进入主题:
    百度升级后的验证码是比较恶心的,页面上说明AI验证码,名副其实,花了差不多2天的时间前后梳理算法,第一版跑的还算可以,可也仅仅撑了1周多。
    昨天一更新,样本库图片大大提升,没得玩了。故而整理下自己的思路和代码,有了这篇文章。


    实现图片自动校验,这里有2个核心的东西。客户端的js加密算法,图片旋转角度自动化识别。前者比较简单,可以通过浏览器打点监听定位到具体的脚本
    位置,后者有些难度,你根本不知道需要选择多少角度,期间尝试用ocr识别,ml.net图片训练最终都难逃人工修正这一步。之所以第一版能跑得益于百度
    刚刚更新,图片库不大,通过自动化程序把所有的验证码下载到本地进行修正,然后对图片做360度的标识计算存储,以便自动验证时候进行匹配。
    1.先说下js部分,这部分一开始试着一步步溯源,然后用c#重新撸一遍,发现工作量有点大,它的PassMachine对象里面几个算法比较分散,且js被压
    缩,调试花费的时间较大,于是换了一种思路,把https://ziyuan.baidu.com/static/ziyuan/pkg/js/base_16ee0ec.js (注意base_后面的字符串,可能是动态的)下
    载到客户端,然后通过c#与js进行交互绕过算法部分。
    另一个文件https://ziyuan.baidu.com/static/ziyuan/widget/site/siteadd_845c6f7.js(注意siteadd_后面的数字,可能是动态的),里面针对于每个账号分配了ak参数:


    页面载入时会初始化验证码算,所以首要的是获取ak这个参数;
    考虑到2个js的文件里面都有参数(可能是版本号,也可能每个账号对应不同的参数),那第一步获取https://ziyuan.baidu.com/site/siteadd页面源代码,然后分析出
    base_参数.js,和siteadd_参数.js,这2个文件,通过正则表达式获取siteadd这个js里面的ak参数,保存起来。通过字符串处理,将base这个js文件中依赖的外部库干

    掉(防止交互执行)的时候js报错。然后构建一个html,便于WebBrowser和html页面通交互执行js


    源码文字形式发不了,源码太长,发布的时候一直提示文本过长希望暴风能改一下文本过长的限制,这里就上图片了,需要文本的可以去文末下载附件



    获取验证码的原算法如下:

     

    修改成c#如下:


    因为有了ak参数,这样我们可以写个程序批量刷验证码:



    到这一步,我们知道怎么获取验证码了,下面说下验证码的校验算法:
    在mkd.js中搜索postData方法,并在如下图片中断点:



    为什么叫AI验证码呢,在客户端行为上鼠标的拖动轨迹和点击位置都要做记录,这些坐标会存储到rzData参数中,且store.count这个数字满20,就会提交一次,不管结果如何post之前会把它清空。
    回到postData提交方法,核心是构建了c参数对象,c的fs属性值是个核心加密算法生成的,溯源很费力,所以我上面直接把mkd.js内容读取,并构建了一个html用来交互。由于fs是用rzData对象加密生成的,
    同时我们也需要构建rzData对象,这个对象完全可以先通过浏览器手动正常提交,在postData之前断点,把它输出到控制台,它核心是ac这个角度参数,我们只需要把ac修改成每一个图片旋转的角度即可


    fs算法可以通过WebBrowser和JS进行交互,构建一个函数调用页面原有的encrypt方法,得到加密后的字符串:



    到此,除了rzData对象中的ac参数(角度),其他都已经解决。回过头来,我们看图片验证码的效果,以及调试测试,发下,推动滑块从起始位置拉到最后,图片旋转了360度,而拖动长度是210(260-50),也就是210的长度对应360度,
    角度=拖动的长度*360/210,对应js中的toFixed方法把结果保留了2位小数:


    我们甚至可以自己写一个模拟核实下:


    那么问题来了,怎么样才能获取图片的选择角度,前面说过,这里我尝试了很多方法都没自动化实现,最终通过人工修正的方式解决。这里包含图片采集服务,修复处理2个模块:
    验证码采集服务,主要用来不停下载验证码图片,并处理验证码图片。
    1.多任务多线程下载验证码,
    2.通过相似算法,过滤已经存在的图片(同一张图片,不同角度)
    3.将验证码图片每间隔3度旋转一次,然后用哈希算法得到旋转后的图片标识,同时获取每一次旋转后的图片前5个主色调的rgb值(可以多个,感觉5个够用了),这样一共就是120条数据,
    每条数据的大致数据结构:
    图片id(1到180),图片哈希码,前5主色调rgb值5个,是否旋转后的正确图片(需要人工设置)

    这里为什么要隔3度旋转计算一次,因为百度这个判断是可以由误差的,另外,过多的数据匹配检索是消耗时间的。
    图片id是为了对应人工标记的旋转正确的图片(这样就能够判断待验证码的图片和修正的图片查,需要旋转多少度),哈希码和rgb是为了匹配目标图片,通过这2个基本能够精确匹配。

    昨天百度更新了验证码的图片,在4个角上随机加了1到3个小图片,用来混淆,其实这个和之前不加小图片没有任何区别,你完全可以在验证码采集服务里面加个算法,
    保存图片只保留圆形区域(相当于图片裁剪);其实难度在于更新后的图片库比之前多了几个量级,我太难了!!!
    裁剪算法


    裁剪后的效果






    关于百度站长平台图片验证码的处理思路相关文章2

    提交您的电话,免费赠送一年维护及关键词排名

  • 联系人*
  • 手机号*
    1. 首页
    2. 网站建设
    3. 网站推广
    4. 关于百度站长平台图片验证码的处理思路
    5. 案例展示
    6. 关于我们
    7. 联系我们

      扫码添加微信咨询

    Copyright 2008-2018 关于百度站长平台图片验证码的处理思路深圳市信科网络科技有限公司 Shenzhen Sinco Network Co., Ltd 严禁抄袭模仿本站 违者依法追究责任! 粤ICP备14083186号-3

  • 深圳公司
    电话 : 0755-2101 0201
    手机 : 136 3165 7619
    服务项目:关于百度站长平台图片验证码的处理思路
  • 广州分公司
    电话 : 020-8092 8113
    手机 : 135 3988 3715
    地址 : 广州市海珠区宝岗大道268号中新大厦1912
  • 东莞分公司
    电话 : 0769-3331 9353
    手机 : 137 1719 8162
    地址 : 东莞市南城区鸿福路83号曼哈顿广场2409
  • 武汉分公司
    电话 : 027-8355 8661
    手机 : 182 4491 9118
    地址 : 武汉市东西湖区金银湖路18号财富大厦30E
  • 上海分公司
    电话 : 021-3113 7661
    手机 : 132 6719 9217
    地址 : 上海市闸北区江场西路299弄中铁广场堡尼大厦2131
  • 拨打电话
  • 添加微信
  • QQ咨询