纵观-极验第四代滑块验证码系列一

该系列文章仅限于某验滑块研究,不会公开具体算法源码,欢迎讨论
本文关联文章:
纵观
入微
芥子
浩瀚

一. 某验滑块网站入口

二. 请求抓包流程

  1. 打开F12,清空所有请求

    这一步没啥好说的,直接跳过。
  2. 点击“滑动拼图验证”

    当我们点击完,跳出来一个load请求,无论是从请求名称还是技术敏感性,都可以猜出来这是一个加载滑块的请求。
  3. 点击“点击按钮开始验证”

    这一步也没啥好说的,直接跳过。
  4. 拖动滑块

    当我们拖动完之后,跳出来一个verify请求,还是那句话,无论是从请求名称还是技术敏感性,都可以猜出来这是一个验证滑块的请求。
  5. 多次重复上述步骤
    注意记录每次load、verify请求的参数以及响应
    可以得到下面结论
  • load请求参数中的captcha_id、client_type、risk_type、lang不变
  • verify请求参数中的captcha_id、client_type、risk_type、pt不变
  • verify请求参数中的lot_number来自load请求的响应中的lot_number
  • load、verify请求中的callback为“geetest_”加上13位的时间戳,也就是毫秒级
  • load、verify请求参数中的challenge应该是算法生成的
  • verify请求参数中的w应该是算法生成的

三. 破解load、verify请求的challenge参数

  1. 直接search中搜索challenge,命中7条,我们来看下
    第1、2条太长直接略过
    第3条有个冒号,应该是给字典中的challenge赋值
    第4、5条是个判断,也略过
    第6、7条有个冒号,也是给字典中的challenge赋值
    但考虑到第六条有个uuid()操作,我们直接看第六条
  2. 直接打断点,成功断上

    可以看到旁边的堆栈中config中并没有challenge,所以challenge的值一定是由函数uuid()生成的,我们来看下uuid()函数的定义

var uuid = function () {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0;
        var v = c === 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
};
  1. 接下来就是构造load请求了,各位看官,动手实践下吧

四. 结语

看到这里,会发现我们verify的w参数还没有破解,所以我们下一篇文章会去对w的明文以及密文做一些研究
入微

你可能感兴趣的:(纵观-极验第四代滑块验证码系列一)