实战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

本文作者:导弹*

本文链接:https://www.cnblogs.com/ddkt/p/18045031

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   导弹*  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.