Python爬蟲破解中國人民銀行(www.pbc.gov.cn)新聞獲取反爬

目的

通過獲取http://www.pbc.gov.cn/goutongjiaoliu/113456/113469/index.html
這個新聞頁上的列表,并且訪問其詳情頁

image.png

開干

先用console獲取一下新聞列表url的內(nèi)容,如下圖所示:


image.png

很明顯,根據(jù)爬蟲經(jīng)驗,這種反爬類似于一種叫做”加速樂”的反爬機制,在紅圈1處進行一些js運行的參數(shù)混淆加載,然后紅圈2中進行主要的反爬邏輯,”加速樂”通常會通過js加密一串字符,然后在Cookie中需要帶有該參數(shù)才能通過訪問,而這里通過后面分析可以知道,這個網(wǎng)站是需要生成一個動態(tài)URL來讓對方服務器校驗。這里先進行的是解決eval函數(shù)里面的js參數(shù)解析
分析過程如下:
1.先拷貝代碼到chrome里面運行一下看能生成一個什么結(jié)果


image.png

這里可以看到根據(jù)上面的eval執(zhí)行的代碼實際上會生成如上圖的js變量并應用,那么我就可以通過python進行模擬
image.png

上圖紅圈位置實際上是模擬了JS里面的Number.toString方法。
通過分析JS的源代碼可以從里面扣出邏輯并生成python代碼

2.運行上邊模擬的JS代碼Debug到下圖位置


image.png

圖中real_var前面的邏輯實際上是從源網(wǎng)站里面提取到eval里面的代碼,并且通過正則與邏輯從字符串中提取到我寫的packet函數(shù)所需要的參數(shù),并且返回的real_var正是與chrome里面生成的一模一樣(類似)

3.再解決JS加密的模塊,通過第一個步驟得到的紅圈2里面的就是主要的JS加密處,通常我對于這種的混淆分析都會通過Vscode+nodeJS去模擬一個js運行的瀏覽器環(huán)境然后單步調(diào)試


image.png

紅圈里面的就是我通過python運行后得到的變量,并且因為瀏覽器執(zhí)行js代碼的時候一般帶有一些用到的全局對象例如window之類的,那么我這里設置一個空的
找到程序執(zhí)行的入口


image.png

進入其代碼看邏輯,實際上有用的部分就是下圖這里
image.png

通過單步運行可以知道這三個值實際上目的是拼接一個下圖這里的URL,也就是我開篇說說的動態(tài)URL


image.png

那么只要模擬到上面的3個參數(shù)就可以破解了
4.破解流程
image.png

image.png

這里通過運行可以知道函數(shù)是被映射到上邊箭頭所指向的地方,那么進去分析
image.png

這個函數(shù)的邏輯摳出來并用python實現(xiàn)就是我這一段代碼
image.png

得到一段WZWS_CONFIRM_PREFIX_LABEL加上后綴參數(shù)的結(jié)果

然后運行第二個函數(shù)如下調(diào)用流程


image.png

image.png
image.png

到了這里,就是我python代碼里面的_0x412a72函數(shù)的邏輯了
摳取里面的邏輯并且用python實現(xiàn)位置如下(紅圈)


image.png

這里的變量復雜所以我在python里面也沒改變量名了,直接用并且調(diào)試
如下圖,這里的邏輯很明顯就是傳入的71652034就是下面switch邏輯運行的順序

image.png

執(zhí)行我寫的邏輯得到如下結(jié)果


image.png

對比源js代碼


image.png

最后一個函數(shù)實際上就是用一開始的dynamicurl與參數(shù)1,2還有下圖字符進行拼接成動態(tài)url
image.png

最后python運行得到下面紅線結(jié)果,完成破解
image.png

說明:實際上最快的解決方案可以是用python的executeJS庫+本地nodejs環(huán)境來運行js源碼,但是會存在調(diào)起nodejs運行環(huán)境的損耗以及容易發(fā)生一些難以控制的錯誤

本解決方案的所有代碼都是使用python的環(huán)境進行編碼并運行,是效率最高的方法,而在運行過程中也存在調(diào)用動態(tài)url失敗的方法,通過獲取到失敗的一次js代碼并且放到chrome中運行也是顯示失敗的,也證明對方服務器也存在一些錯誤
如下:

image.png

綠色圈中的key與value也調(diào)轉(zhuǎn)了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容