首頁>技術>

主要內容是覆盤知乎搜尋頁的js逆向的具體流程。

第一步 找到傳遞資料的連結

操作:進入知乎搜尋頁,搜尋”書籍“,按F12調出開發者工具。

下圖可以看到,這個連結傳遞了我們需要的資料:

可以從請求的URL看到,知乎請求資料是用GET的方式,請求連結格式如下:

https://www.zhihu.com/api/v4/search_v3?t=general&q=xxx

不過直接GET是拿不到資料的,因此需要進行JS逆向查詢資料。

CSDN這篇博文中主要說了,透過API抓取知乎搜尋頁內容,需要在請求頭加入正確的x-zse-86才能拿到資料。

x-zse-86是經過js加密而來,x-zst-81是用於翻頁的,同一個請求是相同的,請求加不加這個引數都可以。

第三步 解密x-zse-86

前面說了,x-zse-86是由js加密得到的,因此我們現在得到知乎網站的js資料夾中找一下。

看看x-zse-86是在哪一個js檔案中生成的。

注意:最下面的可以對js檔案進行規範化顯示,方便閱覽。

可以看到,x-zse-86主要是根據p這個自變數進行變化的,而 p = f.signature。

因此我們找到f函式的話就可以。

據原博文作者分析,f是由x-zse-83 + 資料包的url去掉https://www.zhihu.com後 + referer+cookie中的d_c0的值所得。(都是我們可以直接拿到的資料)

因此現在只需要搞清楚傳遞進去的引數是怎麼解密的。

第四步 找到解密函式

從下面的函式可以看到,f經過了

H()跟W()

兩個函式的傳遞。其中H()只是進行了簡單的md5加密,用python是可以直接完成的,因此我們只需要找

W()(H()(f))

呼叫的就是下面這個函式:

接下來我們就需要將這個函式有關的js程式碼複製,放入g_encrypt.js檔案。

第五步 找到js程式碼

在函式所在行打上斷點,注意得選擇第二個小方塊,而不是return前面這一個方塊。

其他步驟

g_encrypt.js檔案,加上如下處理:

const jsdom = require("jsdom");

const { JSDOM } = jsdom;

const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);

window = dom.window;

document = window.document;

XMLHttpRequest = window.XMLHttpRequest;

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Rancher 收集匯入 k8s 叢集 etcd 資料