极验验证码破解—超详细教程(一)
字数 1754 2025-08-29 08:31:41
极验验证码破解详细教程
一、极验验证码概述
极验验证码是由http://www.geetest.com/提供的滑动验证码服务,号称利用机器学习和神经网络构建多重防御模型。在国家企业信用信息公示系统(http://www.*****.cn)中,当用户输入企业名称点击查询时,会触发该验证码。
验证流程
- 用户拖动滑块到缺口位置
- 验证失败效果:返回"fail"
- 验证成功效果:返回包含"validate"字段的成功信息
二、抓包分析验证流程
关键数据包分析
- 初始请求:SearchItemCaptcha?v=... 返回gt和challenge参数
- 中间请求:get.php?gt=...&challenge=... 返回完整验证码信息
- 验证请求:ajax.php?gt=...&challenge=... 返回验证结果
- 结果请求:crop-query-search-1.html 返回查询结果
关键参数
- gt:验证码标识,从SearchItemCaptcha响应中获取
- challenge:挑战码,每次请求动态变化
- geetest_challenge:验证时使用的挑战码
- geetest_validate:验证成功后返回的验证值
- geetest_seccode:geetest_validate + "|jordan"
三、本地验证码服务搭建
搭建步骤
- 从https://github.com/GeeTeam/gt-python-sdk下载SDK
- 使用HFS软件搭建本地文件服务器
- 修改static/index.html中的gt.js来源为本地地址
- 修改static_server为本地地址
文件结构
HFS根目录/
├── gt.js
├── geetest.js
└── 其他必要资源文件
四、关键参数分析
gt和challenge获取
- 请求SearchItemCaptcha?v=[时间戳]获取初始gt和challenge
- 使用获取的gt和challenge请求get.php获取完整验证码信息
ajax.php请求参数
- callback:"geetest_" + 当前时间戳
- passtime:拖动滑块时间(0-1000ms随机数)
- userresponse:根据拖动轨迹生成的响应
- a:轨迹加密后的参数
五、轨迹(Track)分析
获取轨迹方法
- 通过本地搭建的验证码服务
- 修改geetest.js源码输出鼠标轨迹信息
轨迹加密过程
- 记录鼠标移动的坐标和时间序列
- 通过特定算法生成userresponse
- 通过加密算法生成参数a
六、验证码图片处理
获取背景图片
- 从get.php响应中的"fullbg"字段获取背景图片信息
- 解码base64格式的图片数据
缺口距离计算
- 分析背景图片和滑块图片的差异
- 计算滑块需要移动的像素距离d
七、完整破解流程总结
-
获取初始参数:
- 请求SearchItemCaptcha获取gt和challenge
-
获取验证码资源:
- 使用gt和challenge请求get.php获取完整验证码信息
- 解码背景图片和滑块图片
-
计算缺口距离:
- 分析图片差异,计算滑块需要移动的距离d
-
生成轨迹:
- 模拟人类拖动行为生成移动轨迹
- 计算轨迹对应的userresponse和a参数
-
提交验证:
- 构造ajax.php请求参数
- 提交验证获取validate值
-
获取结果:
- 使用验证成功的参数请求crop-query-search-1.html
- 解析返回的查询结果
八、关键技术点
-
参数逆向:
- 通过抓包分析各参数来源和生成方式
- 理解参数间的依赖关系
-
轨迹模拟:
- 研究人类拖动行为特征
- 生成符合极验检测模型的轨迹数据
-
图片分析:
- 缺口识别算法
- 距离计算精度控制
-
加密分析:
- 研究userresponse和a参数的生成算法
- 逆向geetest.js中的加密逻辑
九、注意事项
- 极验验证码会定期更新防御机制
- 轨迹生成需要模拟人类行为的随机性
- 验证码图片可能有干扰线和干扰点
- 服务器可能会检测请求频率和模式
十、参考文献
- 极验验证官方文档
- 极验Python SDK源码
- 相关逆向工程资料
通过以上步骤和分析,可以系统地理解和实现极验验证码的自动化破解。需要注意的是,本教程仅供学习研究使用,实际应用中应遵守相关法律法规和网站使用协议。