营销导向的企业网站建设步骤,建设部网站危房鉴定标准规定,单品网站模板,潍坊网站建设声明
本文章中所有内容仅供学习交流#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理#xff0c;严禁用于商业用途和非法用途#xff0c;否则由此产生的一切后果均与作者无关#xff0c;若有侵权#xff0c;请联系我立即删除#xff01;
本文章未经许可禁止转载…
声明
本文章中所有内容仅供学习交流抓包内容、敏感网址、数据接口均已做脱敏处理严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关若有侵权请联系我立即删除
本文章未经许可禁止转载禁止任何修改后二次传播擅自使用本文讲解的技术而导致的任何意外作者均不负责若有侵权请在公众号【K哥爬虫】联系作者立即删除
逆向目标
目标某验三代、四代一键通过模式无感验证逆向分析三代主页aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9mdWxscGFnZS5odG1s四代主页aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v
通讯流程
接口相关 完整流程 三代抓包情况
register-fullpage 会返回 challenge 和 gt 值后期有用到。 get.php 会返回 c 和 s同样后期会用到这个请求同样需要 w 值在某验的点选滑块里这个请求可以不要 w 值但在三代无感里必须得要不然最后是会验证失败的可能不带 w 请求返回的 s 是个假的值导致最后验证失败。 ajax.php 验证是否成功同样需要 w 值成功则会返回一个 validate。 三代逆向分析
第一个 w 值
相信看过K哥以前滑块、点选的文章对于定位 w 的值很熟练了这里也是类似的\u0077 就是 w其值为 i r如下图所示 主要就是 r、o、i 的值关键代码
var r t[$_CFAGw(1326)](), o $_BFx()[$_CFAGw(1367)](pe[$_CFAFP(416)](t[$_CFAGw(353)]), t[$_CFAGw(1393)]()), i O[$_CFAGw(1375)](o)
先看看 r跟进去就是我们熟悉的 RSA 了和以前的处理一样把代码扣下来或者用库都行。 同样需要注意的是上图中 this[$_CHCFe(1393)]() 也是个随机字符串会遇到多次但整体一次验证下来都是相同的值不然验证会失败点选、滑块等一系列都一样的。 然后是 o 的值这里和以前一样跟进去看仍然是 AES 加密。t[$_CFAGw(1393)]() 依旧是随机字符串。 中间这一串 pe[$_CFAFP(416)](t[$_CFAGw(353)])也没啥特别的除了 gt 和 challenge其他都是定值最后面那一串 i 的值实测写死、置空都行。 然后继续跟进 i把前面 o 的值转换成一个大的字符串这里也不是很复杂直接扣代码即可 然后 i r 就是 w 的值了到这里第一个 w 的值就搞完了。
第二个 w 值
第二个 w 的值和以往的地方都不太一样不过通过跟栈的方式也很容易找到来到有个 var n {}; 的地方如下图所示 t[$_CGABi(1436)] 就是 w 值也就是 t[$_CEDO]前面定义了 var t this经过第 8215 行的 t[$_CGAAX(1462)]() 之后就有了 w 的值所以要跟进去重点看这一行。 如上图所示e、t、n、r 中涉及到一些浏览器环境值的计算当然还有鼠标移动等相关数据的计算如下图所示 而实际测试发现这四个值直接置空也可以在本例中可以不知道是否有其他案例校验更加严格知道的朋友可以在评论区提出来再往下会遇到很多给变量赋值的地方如下图所示G 是 MD5 方法中间的 O[$_CGBFp(948)] 和以前类似返回一个对象中的 res 和 end 相加这里就不再赘述了。 i[$_CGBGa(1415)] 这里就是将每个变量和值挨个相加组成一个大的字符串。 然后到 r 这里就多了一个 captcha_token然后用 {} 将所有数据包了起来。 这些数据我们格式化一下大致结构如下图所示 其中 ep 里面的 ven、ren 是显卡相关信息fp、lp 是取了两个鼠标移动的位置信息直接写死为 null 也可以tm 就是 window.performance.timing 的一些东西自己随便伪造一下就行了。
最后一步 i[$_CGDBA(1436)]随机字符串为 key将前面的数据 r 进行 AES 加密得到我们最终的 w 值如下图所示 三代结果验证 四代抓包情况
load 接口返回值如下 captcha_type验证码类型无感为 ai gct_pathgct4 文件路径 lot_number生成 pow_msg、w 的关键参数 payloadverify 请求参数 datetimeISO 8601 扩展格式的日期生成 pow_msg 的关键参数 process_tokenverify 请求参数
verify 接口返回值如下 captcha_id验证码 idcaptcha_outputlogin 请求参数gen_timelogin 请求参数lot_numberlogin 请求参数pass_tokenlogin 请求参数
login 接口验证登录成功 四代逆向分析
w 参数
与三代无感一样四代无感 w 参数同样直接搜索 \u0077 即可定位到r 为 w 参数的值 r 参数定义在第 6237 行内容如下
(0,d[$_CBHHO(84)])(f[$_CBHIE(84)][$_CBHHO(562)](e), i)
d[default])(f[default][stringify](e), i)
由上可知r 是将 i 参数和转为字符串的 e 参数加密得到的跟进到 d[$_CBHHO(84)] 中加密函数定义在第 11669 行在第 11707 行打下断在返回值为 r 参数的值即 w 值 (0,d[$_DIEHS(177)])(c) u
d[arrayToHex)(c) u
这里是将 c 数组转换成了十六进制的字符串然后加上 u 得到的 r 值d[$_DIEHS(177)] 跟进去直接扣出来即可c 定义在第 11705 行
var c s[a][$_DIEIq(1403)][$_DIEHS(1498)](e, i);
var c s[1][symmetrical][encrypt](e, i);
e 后文分析i 为 16 位字符串 i 定义在第 11702 行跟进到 d[$_DIEIq(103)] 方法中i 为 16 位随机数 e 参数内容如下 device_id、lot_number 由 load 接口返回pow_msg 为 1|0|md5| datetime | captcha_id | lot_number || 16位随机数pow_msg 经过 MD5 加密即为 pow_signl0zs:53502544 为动态变化的键值对在往期四代滑块的文章中均有详细介绍接下来跟进到 s[a][$_DIEIq(1403)][$_DIEHS(1498)] 中c 为 AES 加密扣代码或者直接引库 u 定义在第 11704 行i 为十六位随机字符串
u new l[($_DIEHS(84))]()[$_DIEIq(1498)](i);
u new l[default]()[encrypt](i);
跟进到加密函数 l[($_DIEHS(84))] 中在第 12725 行于 12741 行打下断点可以看到这里就是个 RSA 加密扣代码或者直接引库即可 四代结果验证