最后,谈谈滑动验证码。

目前,工商网站已经全面改版,全部采用了滑动验证码,上面绝大多数思路都失效了。对于滑动验证码,网上能搜到的解决方案基本都是下载图片,还原图片,算出滑动距离,然后模拟js来进行拖动解决,我们来看下能否不模拟拖动来解决这个问题。

以云南工商网站为例,首先抓包看过程。

1. http://yn.gsxt.gov.cn/notice/pc-geetest/register?t=147991678609response:

2. 下载验证码图片

3. http://yn.gsxt.gov.cn/notice/pc-geetest/validate, post如下数据:

4. http://yn.gsxt.gov.cn/notice/search/ent_info_list,post如下数据:

仔细分析,我们发现两处疑点

1. 第一步并没有返回需要下载的图片地址,那么前端怎么知道要下载哪些图片?

2. 第三步验证时,并没有告知后端下载了那些图片,后端是怎么验证post过去的数据是有效性的?

仔细阅读前端混淆的js代码,我们发现前端数据处理过程是这样的:

1. 从0到6(不含)中取随机整数,赋值给d, d=5;

2. 从0到300(不含)中取随机整数,赋值给e, e=293;

3. 将d转化为字符串并作MD5加密,加密字符串取前9位赋值给f, f=’e4da3b7fb’;

4. 将e转化为字符串并作MD5加密,加密字符串从第11位开始取9位赋值给g, g=’43be4f209’;

5. 取f的偶数位和g的奇数位组成新的9位字符串给h, h=’e3de3f70b’;

6. 取h的后4位与200做MOD运算,其结果小于40,则取40,否则取其本身赋值给x,x=51;

7. 取[x-3, x+3]以内随机数赋值给c,c=51;

8. 分别取c,d,e跟challenge做t加密(t(c,challenge), t(d, challenge), t(e,challenge))并用(_)拼接即为geetest_validate, ‘9ccccc997288_999c9ccaa83_999cc9c9999990d’

这里f, g参数决定了下载图片地址:

而x为滑块拖动的横向偏移量,至此解答了疑问1中图片下载地址怎么来的问题。

前边提到的t加密过程是这样的:

t(a,b),此处以a=51演示

1. challenge为34位16进制字符串,取前32位赋值给prefix,后2位赋值给suffix,prefix=’34173cb38f07f89ddbebc2ac9128303f’, suffix=’a8′

2. prefix去重并保持原顺序,得到列表 [‘3’, ‘4’, ‘1’, ‘7’, ‘c’, ‘b’, ‘8’, ‘f’, ‘0’, ‘9’, ‘d’, ‘e’, ‘2’, ‘a’]

3. 将2中列表循环顺序放入包含5个子列表的列表中,得到random_key_list:  [[‘3’, ‘b’, ‘d’], [‘4’, ‘8’, ‘e’], [‘1’, ‘f’, ‘2’], [‘7’, ‘0’, ‘a’], [‘c’, ‘9’]]

4. 将suffix字符串(16进制)逐位转化为10进制,得到[10, 8]

6. 将4中列表逐位与[36,0]做乘法和运算并与a的四舍五入结果相加, n= 51 + 36*10 + 0*8=419

7. q=[1,2,5,10,50], 用q对n做分解(n=50*13+10*0+5*1+2*1+1*1),将其因数倒序赋值给p,p=[0,2,1,1,8]

8. 从random_key_list右侧开始随机取值,次数为p中数值,拼成字符串sub_key,sub_key=’9ccccc997288′

至此,我们完成了整个分析过程,我们又有了新发现:

1. 按照前边的抓包过程,其实不需要真的下载图片,只需执行1、3、4步就可以得到目标数据了。步骤1也可以不要,只需3、4即可,但是少了步骤1, 我们还需要额外请求一次cookie,所以还是保留1, 这样也伪装的像一点嘛。

2. 相同的challenge,每次运算都可以得出不同的validate和seccode,那么问题来了:到底服务端是怎么根据challenge验证其他数据是否有效呢?

总结一下,对于验证码,本文只是提供了一种新的思路,利用了网站开发过程中的一点小疏漏,而最后的滑动验证码也只是分析了offline模式的验证方法。不要指望所有验证码都可以能绕过,没有阿登高地,二战德国就不打法国了么?只要觉得有价值,即使正面面对验证码,作为爬虫工程师建议也就一句话:不要怂,就是干!

gsxt滑动验证码的更多相关文章

  1. selenium处理极验滑动验证码

    要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了 ...

  2. php 滑动验证码

    自己研究: jQuery拖拽滑动验证码插件 slideunlock.js 原理:(别人说) 响应时间,拖拽速度,时间,位置,轨迹,重试次数等.这些因素能够构成一个采样结果或者辨识特性. 只获取到滑动时 ...

  3. thinkphp整合系列之极验滑动验证码

    对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...

  4. 一步步实现滑动验证码,Java图片处理关键代码

    最近滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低.当然到目前为止,没有绝对的安全验证,只是不断增加攻击者的绕过成本. ...

  5. selenium+java破解极验滑动验证码的示例代码

    转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085  ...

  6. VUE中使用geetest滑动验证码

    一,准备工作:服务端部署 下载文件gt.gs: https://github.com/GeeTeam/gt3-python-sdk 需要说明的是这里的gt.js文件,它用于加载对应的验证JS库. 1. ...

  7. vue_drf之实现极验滑动验证码

    一.需求 1,场景 我们在很多登录和注册场景里,为了避免某些恶意攻击程序,我们会添加一些验证码,也就是行为验证,让我们相信现在是一个人在交互,而不是一段爬虫程序.现在市面上用的比较多的,比较流行的是极 ...

  8. Python——破解极验滑动验证码

    极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...

  9. selenium+java破解滑动验证码

    2019-04-16更新 修复极验页面改版,这次采用极验官方的demo地址:https://www.geetest.com/demo/slide-bind.html 截止2019-04-16,极验和腾 ...

随机推荐

  1. (3.4)常用知识-char与varchar的选择

    1.char与varchar的比较 (1)数据存储开销 [1]varchar列需要2个额外的字节来记录存储数据的长度 [2]每个可为null的char列,需要一些字节(空位图)来反应数据的为空性 [3 ...

  2. C#WebApi自动生成文档

    1.效果图 2.在webApi项目,打开Nuget,搜索WebApiTestClient,安装WebApiTestClient,注意是给HelpPage的 3.打开引入WebApiTestClient ...

  3. P1056排坐椅

    这是2008普及组真题,是一个提高—的模拟. 仔细读完题便有了思路:累放在i行能隔开wi个,比较排序wi,输出即可.所以在这里遇到了结构体排序的问题与手写cmp的问题.对于两个语法知识掌握得都不好,所 ...

  4. oracle数据的导入导出(两种方法三种方式)

    大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1. ...

  5. dom的节点操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. AFNetworking2.0源码解析<二>

    本篇我们继续来看看AFNetworking的下一个模块 — AFURLRequestSerialization.   AFURLRequestSerialization用于帮助构建NSURLReque ...

  7. msdn帮助,离线下载

    这是我在msdn下载,如果要看msdn帮助,不是在线看就是visual studio 帮助那下载. 在网速不好的时候msdn看,会让人不爽. 帮助那个下载速度很慢,于是我就去下载离线. 因为微软看不到 ...

  8. PHP7搭建项目遇到的坑

    报错一:该网页无法正常运作情况原因记录 code 500 原因:由于php.ini配置文件中错误显示关闭导致 解决方法: 修改php.ini配置文件 display_errors = On displ ...

  9. 北京师范大学第十五届ACM决赛-重现赛C Captcha Cracker (字符串模拟)

    链接:https://ac.nowcoder.com/acm/contest/3/C 来源:牛客网 Captcha Cracker 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26 ...

  10. Fokker–Planck equation

    Fokker–Planck equation:https://en.wikipedia.org/wiki/Fokker%E2%80%93Planck_equation 随机微分方程:https://e ...