本文仅供参考学习,如有侵权可联系本人
某电视(荔枝平台)平台逆向
- 目标链接
'aHR0cHM6Ly93d3cuZ2R0di5jbi9jaGFubmVsRGV0YWlsLzI0Ng=='
接口链接:
'aHR0cHM6Ly9nZHR2LWFwaS5nZHR2LmNuL2FwaS9jaGFubmVsL3YxL25ld3M/cGFnZVNpemU9NDAmY2hhbm5lbElkPTI0NiZjdXJyZW50UGFnZT0x'
- 接口分析
-
荔枝网看看数据这一块,heander带有几个请求体,请求参数很正常。响应数据正常。拿去pychram请求第二页就不能正常出现数据了。
x-itouchtv-ca-key: 89541443007807288657755311869534 看起来像加密参数用到的key,刷新了一下不会变
x-itouchtv-ca-signature: s0ejgTWVIIUC3X+5A0fFVUGtBAB7hJSb8yPPKtHRDfs= 应该是加密后的值
x-itouchtv-ca-timestamp: 1658974287663 时间戳
x-itouchtv-client: WEB_PC 来源
x-itouchtv-device-id: WEB_f7461cd0-fde8-11ec-b3cc-c120738f1955 见名知意有点像设备id 固定的。 -
全局搜"X-ITOUCHTV-Ca-Signature",需要注意的是这里需要搜大写否则找不到。
直接看JavaScript,其他文件都不是加密生成的地方。
- 加密参数分析
-
给上断点往下滑可以看每个值的生成逻辑,验证之前的猜想,发现基本都是对的。
而X-ITOUCHTV-Ca-Signature就像是 m值加上一串盐值进行了加密。 -
往上走可以看到m的生成。
是由t、n、d通过换行符"\n"拼接的,再接入_组成;
t:是请求方式GET
n:是带有参数的链接
d:是时间戳也就是heanders的时间戳
_:是空字符 -
继续单步调试,可以发现它是经过了HMAC.init(),感觉就是经过了一直哈希算法。
-
继续单步可以发现整个是webpack打包的JavaScript,可以往上看初步判断是sha256
-
大概加密就是m作为加密参数,一长串的字符串作为key进行了hmac sha256 加密之后再经过了base64; 验证是否是自己猜想。
事实证明没有错的。
-
接下就是通过python还原算法
url = 'https://敏感域名/api/channel/v1/news?pageSize=40&channelId=246¤tPage=1&searchByTime=false&beginScore='
keys = "dfkcY1c3sfuw0Cii9 **敏感key** Qy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX"
def get_sha256(self, url, key):
date = str(round(time.time() * 1000))
method = "GET"
p = ""
data_list = [method, url, date, p]
data = '\n'.join(data_list)
key = key.encode('utf-8') # sha256加密的key
message = data.encode('utf-8') # 待sha256加密的内容
sign = base64.b64encode(hmac.new(key, message, digestmod=sha256).digest()).decode()
return date, sign
如有不懂可以联系博主