Python 爬虫进阶必备 | 某常见 cookie 加密算法逻辑分析 (加速乐 - jsl)
点击上方“咸鱼学Python”,选择“加为星标”
第一时间关注Python技术干货!
今日网站
我测试的这个站不太好发,涉及 gov,所以我找了找另一个用同一套加密的站,大家将就一下
aHR0cHM6Ly93d3cuY252ZC5vcmcuY24vZmxhdy9saXN0Lmh0bQ==
加密分析
看标题就知道本次文章的分析主题是 cookie 加密,所以打开测试网站,看看 cookie

框选出来的就是我们要分析的字段啦
大大的jsl
,极具辨识度
开一个无痕窗口看看能不能抓到包
接下来应该是有图的,但是 Chrome 对于网站 状态码为 521 的请求展示处理不是很好
【假装有图.jpg】
手速不够没有截到,大家将就一下
通过上图,(因为只能看到状态码 521 的红色请求一闪而过,我esc
键都按烂了也没断下来)所以果断换了 Fiddler
通过 Fiddler 抓包,看到这个网站有类似下面的几个请求
现在分别看看这 几个请求
请求 1、单纯的请求网页,请求头中没有 cookie,返回了个script
,包含了一串js
代码,并且在response header
中携带了set-cookie


请求 2、请求带上了 cookie
,cookie 分别为__jsluid_s
和__jsl_clearance_s
,返回了另一个段js
代码

请求 3、请求还是携带了两个cookie
,但是__jsl_clearance_s
发生了改变,请求返回的是正常的网站页面
经过上面的分析,这两段返回的 js 应该就是加密的关键
现在我们需要分析
第二个请求里__jsl_clearance_s
怎么来的?
第三个请求中__jsl_clearance_s
是怎么改的?
加密分析
先看第一段代码
document.cookie=('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('_')+('s')+('=')+(-~{}+'')+((1+[2])/[2]+'')+((1<<1)+'')+(2+4+'')+(4+5+'')+(-~{}+'')+((1<<3)+'')+([2]*(3)+'')+((2)*[2]+'')+(1+5+'')+('.')+(~~[]+'')+(([2]+0>>2)+'')+(2+7+'')+('|')+('-')+(+!+[]+'')+('|')+('z')+('G')+('A')+(9+'')+('N')+('Y')+('U')+('%')+((1<<1)+'')+('B')+('g')+('Y')+('R')+('W')+('V')+('Z')+('b')+('W')+('m')+('i')+('S')+(2+4+'')+('X')+('w')+('v')+('A')+('Q')+('P')+('g')+('%')+((1+[2]>>2)+'')+('D')+(';')+('m')+('a')+('x')+('-')+('a')+('g')+('e')+('=')+((1|2)+'')+(1+5+'')+((+[])+'')+((+false)+'')+(';')+('p')+('a')+('t')+('h')+('=')+('/');location.href=location.pathname+location.search
在编辑器里改改就能跑出下面的逻辑

这样第一个疑问就得到解答了
现在看第二段的js
代码
这个代码比较长,经过了混淆

结尾部分调用了go
函数,并传入了如下参数
{
"bts": ["1626918646.167|0|xcX", "rLB%2FdFGil%2FWSDtvv5CSWRc%3D"],
"chars": "vyPzcSzkrMmFNwvtkEHtwG",
"ct": "30ef50b82076b2284fa6ca90acbb5938",
"ha": "md5",
"tn": "__jsl_clearance_s",
"vt": "3600",
"wt": "1500"
}
这里可以不解混淆分析,也可以使用现有的各类解混淆工具
推荐解混淆工具如下
1、蔡老板知识星球 - 一键解 ob 混淆工具包
2、猿人学在线解混淆 - http://tool.yuanrenxue.com/decode_obfuscator
这里用哪个都可以哈,如果你有更好的工具欢迎交流

解混淆后的加密就没有什么难度了,同时也可以看到代码里的检测点。

感兴趣的可以记录下来,下次不用解混淆直接套环境就可以直接运行了
简单说,这个 js 的主体逻辑就是go
函数,它主要完成的就是将__jsl_clearance_s
分成两个部分,分别和传入 go 方法中传入的字符串进行拼接,然后根据ha
中传入的参数进行 hash,将 hash 的结果进行比对,比对正确返回 cookie
注意:这里的 hash 有几种算法,md5、sha1、sha256

请求结果截图如下

以上就是今天的全部内容了,咱们下次再会~
对了,看完记得一键四连,这个对我真的很重要。