目标网址:aHR0cDovL3d3dy5nc3h0Lmdvdi5jbi9TZWFyY2hJdGVtQ2FwdGNoYT90PTE2MjcxOTgwMzAzODk= (其中的t参数为当前时间戳)
加速乐特征:
破解流程:
第一步:
请求目标网址,会返回状态为521的响应,其响应内容为一段设置cookie的js,将其抠出来运行之后,获得cookie值“__jsl_clearance ”。
第二步:
cookie带上js生成的“__jsl_clearance ”和第一步中返回的cookie值“__jsluid_h ”再次请求目标网址,返回状态为521的响应,其响应内容为一段混淆js代码,其是生成真正的“__jsl_clearance ”值的关键代码。
混淆代码中有一个很重要的对象:
{'bts': ['1627199909.798|0|Fvk', '2FsCJDBZ3Vy1Yk9aI9vXVfbo%3D'],
'chars': 'MQUFxgIOEYkH%iHLgVrMFe',
'ct': '69772dff1afe6e88a969640397eb8bca3515cc6fe6eb36ab1d866ca4ff9208da',
'ha': 'sha256',
'tn': '__jsl_clearance',
'vt': '3600',
'wt': '1500'}
核心加密逻辑就是对参数bts 和chars 做拼接处理(中间会加几个字符),然后对拼接后的字符串进行hash(使用的hash函数就是参数ha ,本例为“sha256 ”),然后对比参数ct ,如果相同,则返回此时拼接后的字符串,否则替换中间的几个字符,继续hash并对比参数ct 。
用python实现其逻辑:
import hashlib
def _hash(val: str, hash_name: str):
"""hash方法"""
hash_func = getattr(hashlib, hash_name)
return hash_func(val.encode()).hexdigest()
def get_jsl_clearance(ct, bts, chars, hash_name):
"""加速乐cookie加密逻辑"""
chars_len = len(chars)
for i in range(chars_len):
for j in range(chars_len):
jsl_clearance = bts[0] + chars[i] + chars[j] + bts[1]
if _hash(jsl_clearance, hash_name) == ct:
return jsl_clearance
第三步:
带上第二步生成的cookie值“__jsl_clearance ”再次访问目标网址,返回状态码为200的响应,至此破解结束。
|