实战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/zichliang/p/16634375.html

posted @ 2024-03-01 17:03  枸杞子*  阅读(10)  评论(0编辑  收藏  举报