南江网站建设,可以申请做cpa广告的网站,做外贸一般上哪些网站,易记域名网站大全目标链接
aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s接口分析 极验参数重要信息 gt和challenge#xff1b;gt是固定的#xff0c;但是challenge每次请求会产生不同的#xff0c;这里的请求的并没有什么加密参数。 下一个请求 gettype.php#xff0c…目标链接
aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s接口分析 极验参数重要信息 gt和challengegt是固定的但是challenge每次请求会产生不同的这里的请求的并没有什么加密参数。 下一个请求 gettype.php传递了 gt 参数的值以及 callbackcallback 为 geetest_ 时间戳响应预览中返回了一些 js 文件及对应的版本号。 get.php?xxx,传入的参数如下 gtregister-slide 响应返回的 gt 值 challengeregister-slide 响应返回的 challenge 值 w对轨迹、滑动时间等进行加密后的参数不存在轨迹直接置空 callbackgeetest_ 时间戳。 响应数据好像也没啥就是极验的帮助中心信息 点击按钮进行验证之后Network 中抓包到了以下信息 ajax.php?xxx请求 gtregister-slide 响应返回的 gt 值 challengeregister-slide 响应返回的 challenge 值 w对轨迹、滑动时间等进行加密后的参数 w 值也可以直接置空 callbackgeetest_ 时间戳。 响应返回验证码模式滑块验证码为 slide点选验证码为 click 第二个 get.php?xxxurl 中传递了一些参数 gtregister-slide 响应返回的 gt 值 challengeregister-slide 响应返回的 challenge 值 callbackgeetest_ 时间戳。 type:上个请求返回的验证码类型 重点响应参数 bg被打乱的带缺口背景图需要还原 fullbg被打乱的完整背景图需要还原 slice滑块图片不需要还原 c关键参数与后面 aa 参数的值有关固定值 s关键参数与后面 aa 参数的值有关。 接下来请求ajax.php?xxx tregister-slide 响应返回的 gt 值 challengeregister-slide 响应返回的 challenge 值 两位字符串注意多了两位是第二个 get.php?xxx 返回值中得到的 w对轨迹、滑动时间等进行加密后的参数需要通过逆向得到 callbackgeetest_ 时间戳。
参数分析 需要分析的参数challenge两位数、w参数
w参数 w 参数在 js 文件中有特征码点击按钮进行验证之后ctrl shift f 全局搜索 “\u0077”因为 \u0077 就是 w 的 Unicode 编码然后点击进入 slide.7.8.9.js 文件中7.8.9 为当前版本。 进入后点击左下角 {} 大括号格式化文件再 ctrl f 局部搜索 “\u0077”只有一个结果在第 6086 行在第 6088 行打下断点滑动滑块即会断住h u 即为 w 参数的值 参数是 h 和 u 相加得到的所以找到定义的位置看看是怎么构造生成的
var u r[$_CAIAt(754)]()
l V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]())
h m[$_CAIAt(782)](l)
\u0077: h u可以看到h 参数是传入了 l 参数后经过 m[$_CAIAt(782)] 方法处理后得到的 u参数 1. u 参数通过 r[$_CAIAt(754)] 方法生成选中后跟进到方法定义位置 2. 进入函数在 6227 行 return 处打下断点重新拖动滑块即会断住 加密地方 e new U()[$_CBGAZ(353)](this[$_CBGAZ(756)](!0));
//还原
e new U()[encrypt](this[$_CCEc](!0));his[“$_CCEc”] 分析完了那 new U()[“encrypt”] 是什么呢选中 new U() 后从原型链中可以看到 setPublic根据经验很有可能就是 RSA 加密设置公钥 第 2908 行ut 函数传入了两个值t 为公钥值e 为公钥模数都是固定值 t“00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81” e“10001” 这里可以直接引库复现也可以选择将算法部分扣下来局部搜索 var U function在第 2043 行将整个自执行函数扣下来这里随机数后期写成固定值后面也有随机数不然会造成传参不匹配 剩下就一点点扣 参数l u 参数解决后接着需要分析 l 参数内容如下 // 混淆
l V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]());
// 未混淆
l V[encrypt](gt[stringify](o), r[$_CCEc]());l 参数的结果是将 gt.“stringify”(o)和 r.“CCEc()加密后得到的先来分析r._CCEc() 加密后得到的先来分析 r.CCEc()加密后得到的先来分析r._CCEc”() , r$_CCEc()还是16位字符串。记得得干rsa同一个值 将这里写成跟之前一样的固定值 gt[“stringify”](o) 返回的是 JSON 格式的数据由 o 参数生成 userresponse滑动距离 challenge 的值 passtime滑块滑动时间 imgload图片加载时间 aa轨迹加密 ep-tmwindow[“performance”][“timing”] 相关 mocq每天 key、value 会变后文分析 rpgt 32 位 challenge passtime再经过 MD5 加密。 键值进行分析先来分析下 userresponseo 定义在第 6012 行: o {lang: i[$_CAIAt(116)] || $_CAHJd(103),userresponse: H(t, i[$_CAHJd(182)]),passtime: n,imgload: r[$_CAIAt(750)],aa: e,ep: r[$_CAHJd(714)]()
};userresponse 定义在第 6014 行需要分析 H(t, i[$_CAHJd(182)])控制台打印一下 见通过整个H函数扣下来补环境。 passtime需要跟轨迹的最后一个时间一样 接着分析aa 其定义在第 6017 行值由参数 e 传递同样向上跟栈到 $_CGlj 中为第 8168 行的 l 值l 定义在第 8167 行三个参数加密后得到 n[DAAAV(913)][_DAAAV(913)][DAAAV(913)][_CJJJb(1066)]() 轨迹加密后的结果 n[DAAAV(69)][_DAAAV(69)][DAAAV(69)][_CJJJb(1097)] c 值在第二个 get.php?xxx 返回的响应中得到 n[DAAAV(69)][_DAAAV(69)][DAAAV(69)][_CJJJb(319)] s 值在第二个 get.php?xxx 返回的响应中得到。 这里相当于就是得把轨迹进行加密将其算法全扣下来。细节就是它加密了两次。 轨迹值 ep 定义在第 6018 行跟进到 r/[CAHJd(714)]中tm参数定义在第6239行跟进newbt()[_CAHJd(714)] 中tm 参数定义在第 6239 行  跟进 new bt()[CAHJd(714)]中tm参数定义在第6239行跟进newbt()[_CBGEC(760)] 中在第 5268 行打下断点tm 结果如下 再把this$_BJBFK(666)补上即可 往下看可以发现o新增了两个参数的接下来分析 rp 参数定义在第 6076 行 o[$_CAIAt(791)] X(i[$_CAIAt(104)] i[$_CAIAt(182)][$_CAHJd(139)](0, 32) o[$_CAHJd(704)]);o[rp] X(i[gt] i[challenge][slice](0, 32) o[passtime]);经过验证X就是MD5而且是没有魔改的 接下来每次请求会变的那个参数 接着往下找第 6026 行 a window[$_CAHJd(744)](s) 执行之后 s 中生成了以上的键值对所以跟进到 window[$_CAHJd(744)] 中会跳转到 gct.xxxxxxxx.js 文件中这个文件的路径可以从 get.php 接口获取到 在该文件的第 1253 行打下断点可以看到此时的 t 中已经生成了 h9s9: “1803797734” 参数 o 复现完毕回到第 6078 行分析完 V[$_CAIAt(353)] l 即完成跟进定义在第 3218 行在第 3230 行打下断点这里为 AES 加密初始向量 iv 值为 “0000000000000000”
function V(o_text, random_str) {var key CryptoJS.enc.Utf8.parse(random_str);var iv CryptoJS.enc.Utf8.parse(0000000000000000);var srcs CryptoJS.enc.Utf8.parse(o_text);var encrypted CryptoJS.AES.encrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});for (var r encrypted, o r.ciphertext.words, i r.ciphertext.sigBytes, s [], a 0; a i; a) {var c o[a 2] 24 - a % 4 * 8 255;s.push(c);}return s;
};对比结果一致
参数分析完毕终于只剩下一个 h 了m$_CAIAt(782) 即将 l 加密后得到的跟进 m[$_CAIAt(782)]定义在第 1568 行在第 1575 行打下断点为 e 中两个 value 值相加 e 定义在第 1574 行t 为传入的 l 参数跟进到 this[$_GFJn(264)] 中在第 1523 行直接扣下来至此w参数复现完成。
现在已经将h和u还原成功了。