关于python:验证码逆向专栏某验四代五子棋消消乐验证码逆向分析

31次阅读

共计 2272 个字符,预计需要花费 6 分钟才能阅读完成。

申明

本文章中所有内容仅供学习交换应用,不用于其余任何目标,不提供残缺代码,抓包内容、敏感网址、数据接口等均已做脱敏解决,严禁用于商业用途和非法用处,否则由此产生的所有结果均与作者无关!

本文章未经许可禁止转载,禁止任何批改后二次流传,擅自应用本文解说的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K 哥爬虫】分割作者立刻删除!

逆向指标

  • 指标:某验四代消消乐、五子棋验证码,w 参数逆向及算法剖析
  • 行为验证 4.0 demo:aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v
  • 加密算法:RSA、AES、MD5

通信流程

消消乐流程剖析

进入网页后,F12 进行抓包,抉择消消乐验证码,抓包到 load 接口:

  • captcha_id:验证码 id,固定值,四代滑块文章中有讲;
  • challenge:动态变化,由 gtc4.js 文件生成,四代滑块文章中有讲;
  • client_type:web 端;
  • risk_type:验证码类型,例如滑块为 slide,无感为 ai,消消乐为 match;
  • lang:语言;
  • callback:回调参数,geetest_ + 工夫戳。

响应预览中返回的要害内容如下:

  • captcha_type:验证码类型;
  • gct_path:gct4 文件门路;
  • lot_number:生成 pow_msg、w 的要害参数;
  • payload:verify 申请参数;
  • datetime:ISO 8601 扩大格局的日期,生成 pow_msg 的要害参数;
  • process_token:verify 申请参数;
  • ques:消消乐矩阵(3×3),每个数字代表一种色彩,将三个雷同数字换到同一列或同一行即可通过。

点击验证按钮,弹出消消乐验证码,挪动图案之后,抓包到 verify 校验接口:

  • captcha_id:与 load 申请头中的 captcha_id 统一;
  • client_type:web 端;
  • lot_number:load 响应返回;
  • risk_type:验证码类型;
  • payload:load 响应返回;
  • process_token:load 响应返回;
  • payload_protocol:1;
  • pt:1;
  • w:加密参数,由轨迹、passtime、userresponse 等参数加密失去;
  • callback:回调参数,geetest_ + 工夫戳。

响应预览中返回的内容如下,result 值为 success 即校验通过,fail 即校验失败,携带 seccode 下的五个参数申请 login 接口,即可登录胜利:

逆向剖析

w 参数

四代的根本流程都是差不多的,间接搜寻特征值 "\u0077" 即可定位到 w 参数生成的地位,先全局搜寻 "\u0077",找到对应的 js 文件,点击进去格式化后,再 ctrl + f 部分搜寻定位要害地位:

在第 6251 行打下断点,挪动图案即会断住,rw 参数的值:

跟进 r 生成的地位,其定义在第 6237 行,能够看到加密形式与四代滑块是一样的:

var r = (0,d.default)(f.default.stringify(e), i)

惟一不同的就是 e 中参数值的形成,以下是四代滑块与消消乐的比照:

能够看到不同点在于四代滑块 e 中参数包含 setLeft(缺口间隔)、track(滑动轨迹),天然消消乐是没有的,userresponse 在滑块中是数值计算,而消消乐中是替换的两个图片的坐标,举个例子:

上图中的验证码,接口返回的 ques 值为:

ques = [[0, 1, 0], 
    [1, 3, 3], 
    [1, 0, 1]
]

ques[0]ques[1]ques[2] 别离对应验证码的第 0 列、第 1 列、第 2 列,留神是列,不是行!而咱们只须要关怀 ques 数组里的替换即可,正确应该替换第 0 行第 1 列和第 0 行第 0 列,那么 userresponse 的值应该为:[[0, 1], [0, 0]]

其余参数值的生成都是一样的形式,具体能够浏览 K 哥往期文章《【验证码逆向专栏】某验四代滑块验证码逆向剖析》,这里就不再反复写了。

消消乐后果验证

只有 JS 和替换的坐标没问题,成功率就为 100%。

五子棋流程剖析

五子棋的流程跟消消乐一样,进入网页后,F12 进行抓包,抉择五子棋验证码,抓包到 load 接口:

  • captcha_id:验证码 id,固定值,四代滑块文章中有讲;
  • challenge:动态变化,由 gtc4.js 文件生成,四代滑块文章中有讲;
  • client_type:web 端;
  • risk_type:验证码类型,例如滑块为 slide,无感为 ai,五子棋为 winlinze;
  • lang:语言;
  • callback:回调参数,geetest_ + 工夫戳。

响应预览中返回的要害内容如下:

  • captcha_type:验证码类型;
  • gct_path:gct4 文件门路;
  • lot_number:生成 pow_msg、w 的要害参数;
  • payload:verify 申请参数;
  • datetime:ISO 8601 扩大格局的日期,生成 pow_msg 的要害参数;
  • process_token:verify 申请参数;
  • ques:五子棋矩阵(5×5),每个数字代表一种色彩,0 示意空位,将五个雷同数字换到同一列、同一行或对角线上即可通过。

其余的与消消乐是一样的,e 参数如下,其中 userresponse 就是须要替换的两个棋子的坐标:

五子棋后果验证

同样的,只有 JS 和替换的坐标没问题,成功率就为 100%。

五子棋和消消乐算法

以下是消消乐和五子棋坐标替换的 Python 算法,留神是替换坐标的算法哟,不是全副的代码哈,消消乐大略 30 来行,五子棋大略 60 来行,还是很简略的,有须要的能够去 k 哥爬虫公众号看看。

【验证码逆向专栏】某验四代五子棋、消消乐验证码逆向剖析

正文完
 0