【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

宣告

本文章中所有內容僅供學習交流,抓包內容、敏感網址、資料介面均已做脫敏處理,嚴禁用於商業用途和非法用途,否則由此產生的一切後果均與作者無關,若有侵權,請聯絡我立即刪除!

逆向目標

目標:網洛者反反爬蟲練習平臺第六題:JS加密,環境模擬檢測

連結:http://spider。wangluozhe。com/challenge/6

簡介:同樣是要求採集100頁的全部數字,並計算所有資料加和。請注意!不要重複使用一個引數值,不要欺騙自己哦!

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

抓包分析

透過抓包分析,可以發現本題不像前面幾題一樣 Payload 中引數有變化,而是在 Request Headers 裡有個 hexin-v 的,每次請求都會變化,如果有朋友做過某花順財經爬蟲的話,會發現這個引數在某花順的站點裡也大量使用,如下圖所示:

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

查詢加密

首先嚐試直接搜尋一下 hexin-v,只在 6。js 裡有值,很明顯這個 JS 是被混淆了的,無法定位,仔細觀察一下,整個 6。js 為一個自執行函式(IIFE),傳入的引數是7個數組,分別對應 n,t,r,e,a,u,c,如下所示:

6。js 在呼叫值的時候都是透過元素下標取值的,所以這個混淆也很簡單,如果你想去還原的話,直接寫個指令碼將陣列對應的值進行替換即可,當然在本例中比較簡單,不用解混淆。

因為 hexin-v 的值在 Request Headers 裡,所以我們可以透過 Hook 的方式,捕獲到設定 header 的 hexin-v 值時就 debugger 住(注入 Hook 程式碼的方法K哥以前的文章有詳細講解,本文不再贅述):

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

接下來就是跟棧了,往上跟一個就可以在 6。js 裡看到 h 的值就是我們想要的值,h = ct。update(),ct。update()實際上又是x(),如下圖所示:

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

繼續跟進x(),t 是我們想要的值,t = N():

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

繼續跟進N(),et。encode(n)就是最終值,可以看到有一些類似滑鼠移動、點選等函式:

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

前面我們已經分析過,6。js 是個自執行方法,而且程式碼量也不是很多,所以我們這裡直接定義一個全域性變數,把這個 N 方法匯出即可,就不再挨個方法扣了,虛擬碼如下:

環境補齊

經過如上改寫後,我們在本地除錯一下,會發現 window、document 之類的未定義,我們先按照以前的方法,直接定義為空,後續還會報錯getElementsByTagName is not a function,我們知道 getElementsByTagName 獲取指定標籤名的物件,屬於 HTML DOM 的內容,我們本地 node 執行肯定是沒有這個環境的。

這裡我們介紹一種能夠直接在 Node。js 建立 DOM 環境的方法,使用的是 jsdom 這個庫,官方是這麼介紹的:

sdom 是許多 Web 標準的純 JavaScript 實現,特別是 WHATWG DOM 和 HTML 標準,用於 Node。js。一般來說,該專案的目標是模擬足夠多的 Web 瀏覽器子集,以用於測試和抓取真實的 Web 應用程式。最新版本的 jsdom 需要 Node。js v12 或更新版本。(低於 v17 的 jsdom 版本仍然適用於以前的 Node。js 版本,但不受支援。)具體的用法可以參考jsdom 文件

[1]

需要注意的是,jsdom 也依賴 canvas,所以也需要另外安裝 canvas 這個庫,HTML canvas 標籤用於透過指令碼(通常是 JavaScript)動態繪製圖形,具體介紹和用法可以參考canvas 文件

[2]

我們在本地 JS 中新增以下程式碼後,就有了 DOM 環境,即可成功執行:

配合 Python 程式碼,在請求頭中,每次攜帶不同的 hexin-v,挨個計算每一頁的資料,最終提交成功:

【JS 逆向百例】網洛者反爬練習平臺第六題:JS 加密,環境模擬檢測

完整程式碼

GitHub 關注 K 哥爬蟲,持續分享爬蟲相關程式碼!歡迎 star !

https://github。com/kgepachong/

以下只演示部分關鍵程式碼,不能直接執行!

完整程式碼倉庫地址:

https://github。com/kgepachong/crawler/

JavaScript 加密程式碼

Python 計算關鍵程式碼

參考資料

[1]jsdom 文件: https://www。npmjs。com/package/jsdom

[2]canvas 文件: https://www。npmjs。com/package/canvas

點個

在看

你最好看

TAG: JSjsdom程式碼Canvascom