1. 程式人生 > 實用技巧 >Python爬蟲進階必備 | 加密分析

Python爬蟲進階必備 | 加密分析

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲 作者:鹹魚學Python

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

這次來分析某個小說網站。

分析請求

先來看看頁面的請求【圖1-1】

圖1-1

經過檢視請求,並沒有請求的加密引數,但是響應的內容卻不正常,許多文字在響應中都變成了 span 標籤【圖1-2】

圖1-2

這樣的反爬蟲措施,如何分析?

定位加密

既然這裡替換的內容都是 span 那就從它開始入手吧。

可以看到應該顯示在正文的內容顯示在 CSS 的 content 中【圖2-1】。

圖2-1

這個是什麼操作?容我百度一下。

CSS中,::before 建立一個偽元素,其將成為匹配選中的元素的第一個子元素。常通過 content 屬性來為一個元素新增修飾性的內容。此元素預設為行內元素。

這裡附帶一個語法示例【圖2-2】,加深理解:

圖2-2

現在通過上面的例項描述,我們大致清楚原來它是一種 CSS 的隱式寫法。

一般 CSS 樣式我們可以通過點選右上角的連結跳轉到相應的檔案位置,但是這裡是無法跳轉的【圖2-3】


圖2-3

我們照著之前的思路,搜尋一波看看能不能找到一些蛛絲馬跡。

先試試搜尋類名【圖2-4】,找到的是請求頁面的響應內容,並沒有找到有用的資訊。


圖2-4

繼續搜尋::before,這次找到的同樣是請求頁面的響應內容但是::before在檔案的位置值得我們開啟看看。【圖2-5】

圖2-5

點開檔案再次搜尋,在這裡就定位到了疑似加密的地方【圖2-6】,對!只是疑似加密。

圖2-6

你不能因為程式碼長得醜、難理解就懷疑它是加密。

其實這裡也可以全域性搜尋.context_kw可以找到操作 DOM 的程式碼,可以找到操作 DOM 的加密位置,搜尋方法大同小異。

這裡就不細說了,我們只要找到加密邏輯的整體位置就行,不妨礙我們分析。

ps : 怕自己找錯可以多試幾次,相關檔案都開啟看看。

分析與改寫

既然找到一個疑似加密的位置,我們肯定是要分析一波看看是不是我們要找的。

通過大概的梳理,可以看到整個 JS 分為兩個部分,第一部分 JS 是CryptoJS的加解密的內容,第二部分是經過混淆的內容,根據部分 JS 可以猜測第二部分的 JS 操作了 DOM ,完成了 CSS 相關的解密。【圖3-1】

關於第一部分的CryptoJS沒啥好改的,照著用就好了。

第二部分值得研究一下,因為是混淆過的內容,照著還原回原來的程式碼意義不大且費時費力,需要做的就是不停除錯你看不明白的程式碼,爭取能明白這個程式碼的意思,能理解的程式碼越多,去改寫越簡單。

圖3-1

簡單說下程式碼的邏輯:

  1. 先取出 _0xa12e這個數組裡面一個加密過的元素,取出後用 AES解密
    圖3-2

在 node 中執行輸出的結果是這樣的【圖3-3】

圖3-3

很明顯 node 環境下輸出的結果不是我們要的,而且字元數也少了兩個,同一份程式碼環境不同,可以大致猜到可能是程式碼裡做了一些對環境屬性的判斷。

這個時候理解程式碼的好處就來了,可以很快定位到下面這行程式碼【圖3-4】:

圖3-4

這裡檢測的是當前的 URL ,在瀏覽器中這個判斷條件是不成立的【圖3-5】,所以不執行判斷中程式碼。

圖3-5

到了 node 環境下是沒有瀏覽器的window屬性的,所以執行這句會出現異常,執行的是異常處理中的程式碼,所以我們直接把這段if程式碼註釋掉。

繼續向下,找找還有沒有相關的程式碼,只要是判斷瀏覽器相關屬性的都需要注意一下。

很快看到【圖3-6】這一行的程式碼也進行了相關的判斷。

圖3-6

在瀏覽器環境下程式碼的結果是這樣的【圖3-7】

圖3-7

但是在 node 環境下是這樣的,計算結果也相應的出現了錯誤【圖3-8】

圖3-8

所以這裡需要做相應的修改,讓結果能夠計算正確。

例如:

_0x1532b6[_0xea12('0x26')](_0x490c80, 0x3 * +!('object' === _0xea12('0x27')))

這樣 node 環境下的計算結果就正常了。

將經過處理後的 JS 運用到 Python 爬蟲中,就可以看到正確的內容了【圖3-9】

圖3-9

總結

這個網站的加密不是很難,不過加密的方法很典型,前段時間有不少讀者朋友在群裡討論研究,非常值得學習一下。

不過既然是小說網站,這裡也涉及到相關的版權問題,所以希望大家不要搞事,以學習的態度和目的閱讀本文。

Peace~