实战2-__jsl_clearance_s 生成
目标网站
aHR0cHM6Ly96cnp5aGdoai5oZWZlaS5nb3YuY24veHd6eC9ic2R0L2luZGV4Lmh0bWw=
1.简单介绍
加速乐是创宇推出的一款在线免费网站 CDN 加速、网站安全防护平台,致力于系统化解决网站访问速度过慢及网站反黑客问题加速乐三步骤
a.第一次请求,响应码521,服务器返回的Cookie中携带 jsluid_s 参数,服务器返回的js可转化为__jsl_clearance_s参数(拿到第二次请求中需要的cookies)
b.第二次请求,响应码521,Cookie中携带 jsluid_s 和jsl_clearance_s 参数(拿到生成cookies的js混淆代码并解析,得到新的jsl_clearance_s)
c.第三次请求,响应状态码 200,携带 新生成的jsl_clearance_s 参数返回网页内容
加速乐呈现
网页中
fiddler中
2.第一次请求
每次刷新页面前都需要清楚浏览器缓存2.1__jsluid_s获取
请求得到的response.cookies与第二次请求中携带的cookie相同__jsluid_s获取代码
res_1 = session.get(url)
for k, v in res_1.cookies.items():
jsluid = v
print(jsluid)
2.2__jsl_clearance_s获取
将请求得到的js拿到浏览器中执行得出结果与第二次请求中携带的cookie相同(这些奇怪符号是AAEncode的加密方式)
__jsl_clearance_s获取代码
js_c = re.findall('cookie=(.*?);location', res_1.text)[0]
result = execjs.eval(js_c).split(';')[0]
js_clearance = re.findall('__jsl_clearance_s=(.*)',result)[0]
# print(js_clearance)
3.第二次请求
第二次请求时需要携带第一次请求的得到的两个cookies值得到一段ob混淆的代码
4.解析ob混淆
共两种方法,一种在使用工具,方法一:慢慢调试,解读代码,方法二:用工具,补环境4.1方法一
首先将ob混淆代码复制到开发者工具中便于解析在JavaScript中一般使用 document.cookie 方法来创建Cookie,由此找到这个断点,也是cookies生成位置(若有定时器先删除定时器)
由此往上查找‘_0x1367aa’具体生成方式找到此处
因为‘_0x1367aa’是一长串的数据('__jsl_clearance_s=1709542939.903|0|q2Tbg0oLmHFrZMQsMChTUNCEb8M%3D;Max-age=3600; path = /; SameSite=None; Secure')但我们只需要加粗部分,所以在此分析cookies关键部分是_0x10c823[0x0],
继续向上找,得知_0x10c823[0x0]是由_0x918ae['ct']与_0x918ae[_0x42a9('0x109', '@ETj')]作为参数传入_0x19676e后得到,
在控制台上打印两个参数后得知
_0x918ae['ct']= 字典['ct']的值
_0x918ae[_0x42a9('0x109', '@ETj')]=字典['bts']的值
下一步,找到_0x19676e函数,进行下一步分析
经过断点调试后,知_0x11ce2b就是 jsl_clearance_s 的值,其定义在第611行:
将其优化,随后一个个分析
_0x4c97c3[0]:'1709542939.903|0|q2T'
_0x918ae['chars']['substr'](_0x51be70, 1):字典['chars'] 对应的值中的一个数
_0x918ae['chars']['substr'](_0x5d05c7, 1) :同上
_0x4c97c3[1]:'0oLmHFrZMQsMChTUNCEb8M%3D'
所以 jsl_clearance_s 参数的组成为:1709542939.903|0|q2T + chars 中的两个数 + 0oLmHFrZMQsMChTUNCEb8M%3D
得到_0x11ce2b后下还有一段if语句,判断_0x11ce2b经过hash处理后是否与_0x5d99ea,只有相等的情况下出现的jsl_clearance_s 才会有效,经过调试分析发现hash是字典['ha']即sha256加密,反复测试字典['ha']是SHA1、SHA256、MD5,三种加密方式动态调整的,此处需自行添加hash函数,并将612行中hash修改为hash[_0x918ae['ha']]
js代码
const CryptoJS = require("crypto-js");
var hash = {
'md5': function (a) {
return CryptoJS.MD5(a).toString()
},
'sha1': function (a) {
return CryptoJS.SHA1(a).toString()
},
'sha256': function (a) {
return CryptoJS.SHA256(a).toString()
}
}
var _0xd91daf = {
"Xoyii" : function (_0x58b987, _0x426614) {
return _0x58b987 < _0x426614;
},
"bOxwJ" : function (_0xc27ed9, _0x91a241) {
return _0xc27ed9 != _0x91a241;
},
};
function cookies(_0x918ae) {
var _0x5bfed9 = new Date();
function _0x19676e(_0x5d99ea, _0x4c97c3) {
var _0x1b71ce = _0x918ae['chars']['length'];
for (var _0x51be70 = 0x0; _0xd91daf['Xoyii'](_0x51be70, _0x1b71ce);
_0x51be70++) {
for (var _0x5d05c7 = 0x0; _0xd91daf['Xoyii'](_0x5d05c7, _0x1b71ce); _0x5d05c7++) {
var _0x11ce2b = _0x4c97c3[0] + _0x918ae['chars']['substr'](_0x51be70, 1) + _0x918ae['chars']['substr'](_0x5d05c7, 1) + _0x4c97c3[1];
if (hash[_0x918ae['ha']](_0x11ce2b) == _0x5d99ea) {
return [_0x11ce2b, new Date() - _0x5bfed9];
}
}
}
}
var _0x732635 = _0x19676e(_0x918ae['ct'], _0x918ae['bts']);
return {'__jsl_clearance_s': _0x732635[0]};}
// var _0x918ae = {
// 'bts': ['1709539623.094|0|nl2', 'y59QCIc9QxH5uguZJsguHA%3D'],
// 'chars': 'geJXrJxpiojvfuIxYOMtjt',
// 'ct': 'e47daea1b21c52eb01765cb9ed83c284',
// 'ha': 'md5',
// 'is': true,
// 'tn': '__jsl_clearance_s',
// 'vt': '3600',
// 'wt': '1500'
// }
//
// console.log(cookies(_0x918ae))
4.2方法二
这里使用的是AST,猿人学的工具https://tool.yuanrenxue.cn/decode_obfuscator
直接使用模式2
然后运行,开始补环境
window= global;
window.navigator = {}
navigator.userAgent = "Mozilla/5.0 ............"
document={}
还缺少location ,这个用不到就不用补了,直接删掉
然后打印下
console.log(document.cookie)
得到结果
这不是通用的JS。本文只展示 sha256 的解析方法。还有两种分别是sha1 和md5,下面推荐个通用的解析方法
js代码
var CryptoJS = require('crypto-js');
var hash = {
'md5': function (a) {
return CryptoJS.MD5(a).toString()
},
'sha1': function (a) {
return CryptoJS.SHA1(a).toString()
},
'sha256': function (a) {
return CryptoJS.SHA256(a).toString()
}
}
function decrypt_jsl_cookie(data) {
var chars = data["chars"]["length"];
for (var i = 0; i < chars; i++) {
for (var j = 0; j < chars; j++) {
var cookie = data["bts"][0] + data["chars"]["substr"](i, 1) + data["chars"]["substr"](j, 1) + data["bts"][1];
if (hash[data['ha']](cookie) === data["ct"]) {
return [data['tn'],cookie]
}
}
}
}
方法二参考链接
本文作者:导弹*
本文链接:https://www.cnblogs.com/ddkt/p/18045031
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架