您现在的位置是:首页 >技术交流 >某验三,四代点选网站首页技术交流

某验三,四代点选

qq_2081540885 2024-06-18 16:08:38
简介某验三,四代点选

目录

目标主页

三代抓包情况

w 值逆向

四代点选

抓包分析

​w 逆向分析


目标主页

三代:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9jbGljay1iaW5kLmh0bWw=

四代:aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v

三代抓包情况

通过抓包发现,register-click-official 接口会返回 challenge 和 gt 值,为 get.php 接口的关键请求参数:

 get.php 会返回 c 和 s,同样后面会用到,这个接口的 w 值与三代无感不同,可以置空:

 点击按钮进行验证,会弹出文字点选框,此时抓包到第一个 ajax.php 接口,虽然只返回了验证码类型,没什么关键参数,但是不请求会报错,点击文字进行验证后,抓到第二个 ajax.php 接口,返回验证结果及 validate 参数的值,该值登录接口会用到:

w 值逆向

还是老生常谈直接全局搜索 "u0077"  这里我们就定位到 3.0.9js文件

打个断点,去过一下验证码,就发现这里就是w参数生成的地方 w = p +u

 var u = n[$_CADAh(718)]()
    h = H[$_CACJT(216)](re[$_CADAh(116)](o), n[$_CACJT(726)]())
    p = he[$_CADAh(768)](h)

先来看看u 参数,跟到   n[$_CADAh(718)]() 中  this[$_CBGAy(726)](e) 十六位随机数,跟进去把算法扣下来即可:

因此 t 是将十六位随机字符串加密后得到的,这里为 RSA 加密,从原型链中跟进去即可找到公钥和模值,将代码扣下来或者直接用库都行,至此 u 值分析完了,不会扣RSA加密的,可联系博主

扣代码时候,该补的补,一个 windowue

var window = {"Navigator": {
        "appName": "Netscape",
    },}
ue = window['Navigator']

接下来就是后面参数问题 h 

 n[$_CACJT(726)]() 十六位随机数,需要保持和上面RSA加密一致的随机数,h 参数的加密方法为 H[$_CACJT(216)],跟进去打断分析会发现是 AES 加密,初始向量 iv 为 0000000000000000,将o参数 JSON.stringify(o)一下,之后就是十六位随机数作为key,进行AES加密:

o 值的关键参数如下:

  • passtime:图片加载时间
  • a:点选文字位置
  • pic:背景图片链接
  • tt:将 c、s、鼠标信息等进行加密,某些值可以固定,加密方法直接扣下来即可
  • h9s9: "1816378497":该键值对每天变化
  • rp:将 gt、challenge、passtime 经过 MD5 加密

将 h 经过  he[$_CADAh(768)] 方法加密后得到 p,跟进去扣下来即可,三代图标、语序除了 a 的写法,其他逻辑都是一样的。搞过滑块的都知道这些东西

 该扣的扣,该补的补,剩下就是点选的坐标问题,这里直接通过打码平台就行了

o 参数中的值寻找:

全局搜索: l = (i - o) / a * 100 直接定位到关键位置 l u 是我们点击是触发的,也就是有关坐标元素

该矩形左上角的顶点坐标为(x, y),宽度为width,高度为height,而top、right、bottom、left则分别表示该矩形上边缘、右边缘、下边缘、左边缘的坐标值。

最后得出结果,字体对图片占比,也不排除点击的位置对图片的占比,之后四舍五入取前四位数字,有x,y 所以需要通过下划线链接,之后就是几个字几组就行了这里我们解决o中的e,参数 

接下来是 中的轨迹 tt,我们可以看到这个tt是个函数,传入了t,e,n 三个参数,其中 t 是可以写死,e,n就是第二个get.php中返回的cs。这就解决了tt参数

o 中的 ca 不检测写死

 到此复现完毕,有什么问题可以联系博主

四代点选

抓包分析

抓包,load 接口返回值如下:

  •  captcha_type:验证码类型,文字点选为 word
  • gct_path:gct4 文件路径
  • lot_number:生成 pow_msg、w 的关键参数
  • pow_detail:bits、datetime、hashfunc 都与 w 参数有关
  • payload:verify 请求参数
  • process_token:verify 请求参数
  • ques:各文字图片的链接

点击验证后,verify 接口返回校验结果及 login 请求参数:

  •  result:校验结果,成功即 success,失败为 fail
  • captcha_id:验证码 id
  • captcha_output:login 请求参数
  • gen_time:login 请求参数
  • lot_number:login 请求参数
  • pass_token:login 请求参数

login 接口验证登录成功则返回:

w 逆向分析

还是一样的老配方,全局搜索:"u0077"

var r = (0,d[$_CBGHl(19)])(f[$_CBGHl(19)][$_CBGIS(584)](e), s)

跟进到 d[$_CBHIU(47)] 中,(0, d[$_DIEHV(186)])(c) + u 即 w 值:

接下来跟进到 i[a][$_DGAHG(1213)][$_DGAIA(1246)](e, s) 中,c 为 AES 加密,扣代码或者直接用库:

还是一样的配方。s 上文讲了,为十六位随机字符串,e 中 device_id 固定值、 lot_number 由 load 接口返回,userresponse 为点选坐标,pow_msg 为 "1|0|md5|" + datetime + "|" + captcha_id + "|" + lot_number + "||" + 16位随机数,pow_msg 经过 MD5 加密即为 pow_sign,"f019":"1024281898" 为动态变化的键值对,在往期四代滑块的文章中均有详细介绍,其他值固定即可

其中x,y 坐标 r = (n - t[$_GDGHH(855)]) / t[$_GDGIT(849)] * 100 

r = (n - t[$_GDGHH(855)]) / t[$_GDGIT(849)] * 100
i = (s - t[$_GDGHH(661)]) / t[$_GDGIT(809)] * 100

r = (n - 1059.984375) / 300.03125 * 100
i = (s - 388.5) / 200.109375 * 100;

其中 t[$_GDGHH(855)] 和 t[$_GDGHH(661)] 是根据屏幕来决定,n,s 是坐标位置加上坐标位置距离浏览器左上角的距离

接着就是,分别 进行这步Math[$_GDGHH(689)](100 * r), Math[$_GDGIT(689)](100 * i))

Math['round'](100 * r)
Math['round'](100 * i)

全局搜索这个直接定位到,接着就是自己操作,这里需要注意的是,列表不能以字符串方式传进去

例如:

        [[8433, 6022], [1367, 1724], [8066, 1824]]

        ‘[[8433, 6022], [1367, 1724], [8066, 1824]]’

得出的结果不一样

四代图标、字序、九宫格除了 userresponse 的写法,其他逻辑都是一样的。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。