文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

极验3代 加密分析

2023-09-02 18:29

关注
目标链接
'aHR0cHM6Ly93d3cuZ2Vhttps://blog.csdn.net/zhp980121/article/details/ldGVzdC5jb20vZGVtby9zbGhttps://blog.csdn.net/zhp980121/article/details/lkZS1mbG9hdC5odG1s'
接口分析

极验参数重要信息 gt和chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge;gt是固定的,但是chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge每次请求会产生不同的,这里的请求的并没有什么加密参数。

下一个请求 gettype.php,传递了 gt 参数的值以及 cahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lback,cahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lback 为 geetest_ + 时间戳;响应预览中返回了一些 js 文件及对应的版本号。

get.php?xxx,传入的参数如下:
gt:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 gt 值;
chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge 值;
w:对轨迹、滑动时间等进行加密后的参数,不存在轨迹直接置空
cahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lback:geetest_ + 时间戳。
响应数据好像也没啥,就是极验的帮助中心信息

点击按钮进行验证之后,Network 中抓包到了以下信息 ajax.php?xxx请求
gt:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 gt 值;
chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge 值;
w:对轨迹、滑动时间等进行加密后的参数, w 值也可以直接置空;
cahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lback:geetest_ + 时间戳。

响应返回验证码模式,滑块验证码为 shttps://blog.csdn.net/zhp980121/article/details/lide,点选验证码为 chttps://blog.csdn.net/zhp980121/article/details/lick

第二个 get.php?xxx,urhttps://blog.csdn.net/zhp980121/article/details/l 中传递了一些参数
gt:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 gt 值;
chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge 值;
cahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lback:geetest_ + 时间戳。
type:上个请求返回的验证码类型
重点响应参数:
bg:被打乱的带缺口背景图,需要还原
fuhttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lbg:被打乱的完整背景图,需要还原
shttps://blog.csdn.net/zhp980121/article/details/lice:滑块图片,不需要还原
c:关键参数,与后面 aa 参数的值有关,固定值;
s:关键参数,与后面 aa 参数的值有关。

接下来请求ajax.php?xxx
t:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 gt 值;
chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge:register-shttps://blog.csdn.net/zhp980121/article/details/lide 响应返回的 chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge 值 + 两位字符串,注意多了两位,是第二个 get.php?xxx 返回值中得到的;
w:对轨迹、滑动时间等进行加密后的参数,需要通过逆向得到;
cahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lback:geetest_ + 时间戳。

参数分析
需要分析的参数chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge+两位数、w参数

w参数:

w 参数在 js 文件中有特征码,点击按钮进行验证之后,ctrhttps://blog.csdn.net/zhp980121/article/details/l + shift + f 全局搜索 “\u0077”,因为 \u0077 就是 w 的 Unicode 编码,然后点击进入 shttps://blog.csdn.net/zhp980121/article/details/lide.7.8.9.js 文件中,7.8.9 为当前版本。

进入后点击左下角 {} 大括号,格式化文件,再 ctrhttps://blog.csdn.net/zhp980121/article/details/l + f 局部搜索 “\u0077”,只有一个结果,在第 6086 行,在第 6088 行打下断点,滑动滑块即会断住,h + u 即为 w 参数的值

参数是 h 和 u 相加得到的,所以找到定义的位置,看看是怎么构造生成的

var u = r[$_CAIAt(754)]()https://blog.csdn.net/zhp980121/article/details/l = V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]())h = m[$_CAIAt(782)](https://blog.csdn.net/zhp980121/article/details/l)"\u0077": h + u

可以看到,h 参数是传入了 https://blog.csdn.net/zhp980121/article/details/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() 后,从原型链中可以看到 setPubhttps://blog.csdn.net/zhp980121/article/details/lic,根据经验很有可能就是 RSA 加密设置公钥

第 2908 行,ut 函数传入了两个值,t 为公钥值,e 为公钥模数,都是固定值:
t:“00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81”
e:“10001”
这里可以直接引库复现,也可以选择将算法部分扣下来,局部搜索 var U = function,在第 2043 行,将整个自执行函数扣下来,这里随机数后期写成固定值,后面也有随机数,不然会造成传参不匹配

剩下就一点点扣

参数https://blog.csdn.net/zhp980121/article/details/l

u 参数解决后,接着需要分析 https://blog.csdn.net/zhp980121/article/details/l 参数,内容如下:
// 混淆https://blog.csdn.net/zhp980121/article/details/l = V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]());// 未混淆https://blog.csdn.net/zhp980121/article/details/l = V["encrypt"](gt["stringify"](o), r["$_CCEc"]());

https://blog.csdn.net/zhp980121/article/details/l 参数的结果是将 gt.“stringify”(o)'和 r.“ C C E c " ( ) 加密后得到的,先来分析 r . " _CCEc"() 加密后得到的,先来分析 r." CCEc"()加密后得到的,先来分析r."_CCEc”() , r"$_CCEc"()还是16位字符串。(记得得干rsa同一个值

将这里写成跟之前一样的固定值, gt[“stringify”](o) 返回的是 JSON 格式的数据,由 o 参数生成

userresponse:滑动距离 + chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge 的值;
passtime:滑块滑动时间;
imghttps://blog.csdn.net/zhp980121/article/details/load:图片加载时间;
aa:轨迹加密;
ep-tm:window[“performance”][“timing”] 相关;
mocq:每天 key、vahttps://blog.csdn.net/zhp980121/article/details/lue 会变,后文分析;
rp:gt + 32 位 chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge + passtime,再经过 MD5 加密。

键值进行分析,先来分析下 userresponse,o 定义在第 6012 行:

o = {    'https://blog.csdn.net/zhp980121/article/details/lang': i[$_CAIAt(116)] || $_CAHJd(103),    'userresponse': H(t, i[$_CAHJd(182)]),    'passtime': n,    'imghttps://blog.csdn.net/zhp980121/article/details/load': r[$_CAIAt(750)],    'aa': e,    'ep': r[$_CAHJd(714)]()};

userresponse 定义在第 6014 行,需要分析 H(t, i[$_CAHJd(182)]),控制台打印一下

见通过整个H函数扣下来补环境。

passtime需要跟轨迹的最后一个时间一样

接着分析aa 其定义在第 6017 行,值由参数 e 传递,同样向上跟栈到 $_CGhttps://blog.csdn.net/zhp980121/article/details/lj 中,为第 8168 行的 https://blog.csdn.net/zhp980121/article/details/l 值,https://blog.csdn.net/zhp980121/article/details/l 定义在第 8167 行,三个参数加密后得到:

n[ D A A A V ( 913 ) ] [ _DAAAV(913)][ DAAAV(913)][_CJJJb(1066)]() :轨迹加密后的结果;
n[ D A A A V ( 69 ) ] [ _DAAAV(69)][ DAAAV(69)][_CJJJb(1097)] :c 值,在第二个 get.php?xxx 返回的响应中得到;
n[ D A A A V ( 69 ) ] [ _DAAAV(69)][ DAAAV(69)][_CJJJb(319)] :s 值,在第二个 get.php?xxx 返回的响应中得到。
这里相当于就是得把轨迹进行加密,将其算法全扣下来。细节就是它加密了两次。
轨迹值:

ep 定义在第 6018 行,跟进到 r/[ C A H J d ( 714 ) ] 中, t m 参数定义在第 6239 行 ! [ 在这里插入图片描述 ] ( h t t p s : / / i m g − b https://blog.csdn.net/zhp980121/article/details/l o g . c s d n i m g . c n / b e 90376 d f 73 c 4 b 3 c 91 e 86 f 15195 c f b a 8. p n g ) 跟进 n e w b t ( ) [ _CAHJd(714)] 中,tm 参数定义在第 6239 行 ![在这里插入图片描述](https://img-bhttps://blog.csdn.net/zhp980121/article/details/log.csdnimg.cn/be90376df73c4b3c91e86f15195cfba8.png) 跟进 new bt()[ CAHJd(714)]中,tm参数定义在第6239![在这里插入图片描述](https://imgbhttps://blog.csdn.net/zhp980121/article/details/log.csdnimg.cn/be90376df73c4b3c91e86f15195cfba8.png)跟进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['chahttps://blog.csdn.net/zhp980121/article/details/lhttps://blog.csdn.net/zhp980121/article/details/lenge']['shttps://blog.csdn.net/zhp980121/article/details/lice'](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)] https://blog.csdn.net/zhp980121/article/details/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) 即将 https://blog.csdn.net/zhp980121/article/details/l 加密后得到的,跟进 m[$_CAIAt(782)],定义在第 1568 行,在第 1575 行打下断点,为 e 中两个 vahttps://blog.csdn.net/zhp980121/article/details/lue 值相加:

e 定义在第 1574 行,t 为传入的 https://blog.csdn.net/zhp980121/article/details/l 参数,跟进到 this[$_GFJn(264)] 中,在第 1523 行,直接扣下来至此w参数复现完成。

现在已经将h和u还原成功了。

来源地址:https://bhttps://blog.csdn.net/zhp980121/article/details/log.csdn.net/zhp980121/artichttps://blog.csdn.net/zhp980121/article/details/le/detaihttps://blog.csdn.net/zhp980121/article/details/ls/129088754

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯