巨量算数指数的signature签名和返回data的解密。
文章内容过于简单,主要是帮网友解决采集问题,不做太多说明了。
最新的已经更新,更新时间2022/5/31
@
signature生成
感觉没啥讲的,可以看《抖音网页版signature》,这里的sign和抖音的老版本sign非常像
这里做法比较简单,通过浏览器RPC获取sign值。
因为网友告诉我,想高价出售代码给他的人,仅仅用了RPC来调sign。。。
需要执行的主要代码:
var e={"url":"https://trendinsight.oceanengine.com/api/open/index/get_multi_keyword_hot_trend",
"method":"POST",
"data" : '{"keyword_list": ["%s"],"start_date": "%s","end_date": "%s","app_name": "aweme"}'};
var h = new XMLHttpRequest;h.open(e.method, e.url, true);
h.setRequestHeader("accept","application/json, text/plain, */*");
h.setRequestHeader("content-type","application/json;charset=UTF-8");
h.send(e.data);
return h._url
data解密
刚开始我顺着post的流程找
e为字符串"data",t为字符串"base64",r为字符串"utf8"
this._update 等于 function(e){}
this._mode.encrypt 等于 function(e,t,r)
最后的n是解密后的数据
我本来准备按着这个流程补一遍环境,补着补着400多行了,下班前搞不完。
所以直接找加密算法和加密方式,然后拿python现成的库来还原吧。
在该文件搜 decrypt ,找了不少地方。最后断点找到这里
断点可以发现是AES-128-cfb加密,继续往下走
iv = "amlheW91LHFpYW53"
key = 'anN2bXA2NjYsamlh'
segment_size=128
mode=AES.MODE_CFB
python还原AES
import base64
from Crypto.Cipher import AES
# AES-128
def decrtptlx(String):
iv = "amlheW91LHFpYW53".encode(encoding='utf-8')
key = 'anN2bXA2NjYsamlh'.encode(encoding='utf-8')
cryptor = AES.new(key=key, mode=AES.MODE_CFB, IV=iv, segment_size=128)
decode = base64.b64decode(String)
plain_text = cryptor.decrypt(decode)
print(plain_text)
return plain_text
更新说明
2022/06/01
经调试发现现在多了signature和xbogus参数,但是不影响我们RPC。
目前通过Promise可以取出异步函数onreadystatechange中的响应内容。
完整代码
上面步骤是最初版的,不想改了,因为流程差不多,代码已经更新。
【温馨提示:此处隐藏内容需要付费订阅后才能查看!】