失蹤人口迴歸ing
今天要講的是今日頭條web版的_signature參數逆向
直接上鍊接 --> 今日頭條
首先隨便點開一個版本,這裏點的是娛樂,抓包看看結果。
可以很清晰地看到首頁html源碼裏面並沒有上圖中的關鍵字"古巨基",可以初步判斷是異步加載的數據,所以接着往後面找找接口。
不難找到這個接口,可以看到data裏面的數據就是網頁上所展示的了,所以可以確定這個接口就是用來拿數據的了,然後看看裏面post的參數,除了as,sp,_signature以外,其他的都是固定值,as,sp這裏先不做分析,因爲實際上測試之後發現不帶這個參數也無所謂。
首先F12全局搜索這個參數:
這斷點一打就發現了大冪冪,看來估計應該不算太難?接着往function裏面look look~
這下就很清晰了 實際上就是window.byted_acrawler.sign()這個方法對url進行了encrypt,加密的函數和結果全部都是它來完成的,然後我們全局搜索一下window.byted_acrawler這個東東來看看
這下就很清晰了 把window.byted_acrawler這個算法扣下來,放到nodejs裏面跑跑看,就ok了。
主要代碼塊如下
# -*- coding: utf-8 -*-
import urllib
import requests
def get_json():
url = "https://www.toutiao.com/api/pc/feed/"
headers = {
"content-type": "application/x-www-form-urlencoded",
"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
"referer": "https://www.toutiao.com/ch/news_tech/",
}
params = {
"category": "news_tech",
"utm_source": "toutiao",
"widen": "1",
"max_behot_time": "0",
"max_behot_time_tmp": "0",
"tadrequire": "true",
"as": "",
"cp": "",
}
decode_url = url + "?" + urllib.parse.urlencode(params)
decode_url = decode_url.replace("com/", "com/toutiao/")
data = {
"url": urllib.parse.quote(decode_url)
}
_signature = requests.post('http://121.40.96.182:4007/get_sign', data=data).json()['_signature']
print("計算_signature值爲:", _signature)
params["_signature"] = _signature
resp = requests.get(url, headers=headers, params=params)
print(resp.json())
if __name__ == '__main__':
get_json()