豆瓣讀書搜尋頁的window.__DATA__的解密

sergiojune發表於2019-03-12

上次發了破解知乎模擬登陸的最新版之後,很多人看了都說好,唯獨沒人給我點贊,以後還是麻煩大家,如果看到對你有用的文章,可以點點贊,支援下作者哈。

還有,知乎模擬登陸的程式碼已給出,github地址為:https://github.com/SergioJune/Spider-Crack-JS

希望各位大佬給點個star哈,以後會持續更新,將我的每個破解的網站原始碼都放上去,如果你也有什麼解不開的網站,歡迎去提issue,我會盡我能力去破解,後分享給大家。

這次給大家分享的是豆瓣的讀書搜尋頁

https://book.douban.com/subject_search?search_text=%E7%BD%91%E7%BB%9C%E6%98%AF%E6%80%8E%E6%A0%B7%E8%BF%9E%E6%8E%A5%E7%9A%84&cat=1001複製程式碼

豆瓣讀書搜尋頁的window.__DATA__的解密

以前還以為豆瓣只是給新手爬蟲練手的,直到我發現了這個頁面,才發現是我錯了,原來豆瓣也有加密的,有可能是為了防止新手亂爬吧,一看到這個就覺得爬蟲越來越不好做了,隨便一個頁面都有 js 加密。

而且我覺得比上次的知乎的還難點,但是可能就只有搜尋頁是加密的,其他的直接找全部圖書的都是直接放在html原始碼的。

廢話不多說,生死看淡,不服就幹!!!開始分析。

1. 尋找搜尋內容

這個圖書資料是直接加密的,隱藏在了html頁面,如果你需要找的話,估計還得找很長時間,我是從一位大佬告訴我的,就在下面這個頁面的 window.__DATA__ 裡面

豆瓣讀書搜尋頁的window.__DATA__的解密

不過如果需要自己找的話,還是可以的,需要點時間,自己細心點找,對於這個有經驗了,以後遇到那些找不到資料的都可以嘗試在本頁面的html裡面找。


2. 找解密位置

直接搜 window.__DATA__ 即可

豆瓣讀書搜尋頁的window.__DATA__的解密

上面的就是html內容,所以是下面一個,或者你不信的話可以自己嘗試下。

豆瓣讀書搜尋頁的window.__DATA__的解密

打斷點,一看,果不其然,資料都出來了

豆瓣讀書搜尋頁的window.__DATA__的解密

接著就是自己慢慢除錯了,點選下一步自己慢慢除錯,看看用到的方法

豆瓣讀書搜尋頁的window.__DATA__的解密

走了幾步會很容易發現這個,這個就可以說是上面那個方法的解密步驟了

接下來就是自己看這些 JS 的內容了,不算難,如果你厲害的話,能看出他加密使用的方法的話,你可以直接使用 Python 語言的相關加密方法,如果看不懂,你就需要自己扣出相關的 JS 了,

如果你初學 JS 的話,學過了 JS 原型的屬性,那麼非常推薦你解一下,因為這裡的 JS 分佈在兩個檔案內,不像上次知乎那樣直接一段函式就解決了那麼簡單,並且扣出來了還需要自己改下函式之間或者物件之間的原型,總之很複雜,這個只能意會不能言傳,篇幅有限,也不可能全部一個一個扣出來並和你說怎麼改。

還是得自己實踐一次才能感受到,我最後花了幾天時間,扣出了1500+行程式碼

豆瓣讀書搜尋頁的window.__DATA__的解密


3. 用Python執行

這裡扣出了 JS 使用 python 的 execjs 執行,會出現一個問題

​UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 41: illegal multibyte sequence複製程式碼


豆瓣讀書搜尋頁的window.__DATA__的解密

這裡是因為裡面使用了一個 TextIOWrapper 物件,裡面沒有指定編碼型別,使用了預設的 cp936 也就是 gbk 編碼,使讀取字元出錯,我們可以在這個類上面初始化改下編碼型別為 utf-8 即可執行

豆瓣讀書搜尋頁的window.__DATA__的解密

再次執行,即可成功。

豆瓣讀書搜尋頁的window.__DATA__的解密


4. 寫在最後

這個豆瓣解密可以說不難,也可以說有點難,因為需要扣很多 JS ,如果你能看懂他相關的解密方法就不需要扣,就會很容易了。如果逆向深入研究逆行 JS 的話,還是建議你自己動手擼一遍,

最後,想要原始碼地址為 https://github.com/SergioJune/Spider-Crack-JS/tree/master/douban,對你有用的話請給個star,謝謝。

如果文章對你有用的話就點個贊吧!


本文僅用於交流學習,請勿用於非法用途,後果自負!

豆瓣讀書搜尋頁的window.__DATA__的解密


相關文章