摘要:當斷點被執行到時,你就可以查看右邊的調用棧了,很容易就找到這個地方這個也是一個定時執行,不過他只執行一次,相當于定時炸彈。本文僅用于交流學習,請勿用于非法用途,后果自負首發地址請求網頁時,怎么給我返回了一段代碼
今天給大家帶來的是一個論壇網站,牛仔俱樂部-努比亞社區,
網址為:https://bbs.nubia.cn/
如果你想要獲取這個網站的源代碼的話,必須要先獲取一個 cookie,其字段名為:acw_sc__v2,你是不是不相信?爬取網站還需要獲取 cookie 值才可以?說實話,我剛開始爬的時候我也不相信,直到我運行請求代碼,一看,給我返回這個:
這是什么啊,一段 JavaScript 代碼,很容易地就可以看到下面有個 setCookie 的方法,這不就是我剛才說的需要獲取的 cookie 的字段嗎?如果你看到這,留下了沒技術的眼淚的話?別怕,我勸你擦干眼淚,繼續看下去,你會發現新大陸!
我們首先在 chrome 看看這里網站的請求先,打開 chrome,打開開發者工具,輸入網址:https://bbs.nubia.cn/(需要先...,你可以看到下面這個東西:
是不是呆住了?這是debug,明明什么都沒按啊,如果你按跳出這個函數的話,可以暫時跳出,不過等到運行多幾行代碼的話,他會運行到一個無限執行 debug 的函數,讓你永無翻身之日,一直在 debug 轉動。
那怎么辦?莫慌,其實這里運行代碼就是我們在上面第一次請求這個網站給我們返回的 JavaScript 代碼,那么我們可以把剛才響應回來的代碼復制出來,寫成 html 文件,使用 chrome 瀏覽器打開。
如果你把 那段代碼展開的話,打開的時候就會無限進行刷新,直到瀏覽器崩潰。
這里是代碼在執行過程中使用正則檢測你把代碼展開了,所以就會無限進行刷新,這叫做內存爆破,是不是又 get 新知識?
所以我們直接原樣復制進去,在打開 chrome 進行調試。
但是,當我們一打開 開發者工具,還是會立刻彈出 debug 頁面
這又是為什么呢?我們根據右邊的調用棧看看是怎樣執行的,查看調用棧,可以看到這個函數:
如果你是學習過 JavaScript 的話,很容易就知道 setInterval 是個設置每隔一段時間就執行相應操作的函數。所以他這里每隔一段時間就會執行函數,用于檢測用戶有沒有打開開發者工具,這個太猛了,具體原理我現在還不知道,如果你知道的不防在下面留言分享給大家。
知道了,之后,我們直接在原文件找到這個定時設置語句給刪除就可以了。刪除了之后,還是會執行這個 debug 語句,我們繼續把這個執行給刪除。
現在就不會出現 debug 了,但是有一個新的問題,出現,頁面會不斷刷新,也是一個定時操作,這時該怎么辦呢?因為是一個刷新操作,每次刷新必然會執行里面的 JavaScript 代碼,所以不妨隨便打個斷點,看看調用棧,這里我比較有經驗,所以就在這里打了個斷點
因為這個 relaod 函數就是一個刷新頁面的函數,所以直接在這里點擊,可以肯定這個函數會被執行,如果你打的斷點沒有被執行,可以多打幾個斷點,總會被執行的,這個不需要擔心。
當斷點被執行到時,你就可以查看右邊的調用棧了,很容易就找到這個地方
這個 setTimeout 也是一個定時執行,不過他只執行一次,相當于定時炸彈。又因為每次都會 reload,所以這個炸彈在每次刷新的時候就會繼續新的炸彈,才會有剛才的不斷刷新,了解了原理之后,那么我們就把這個 setTimeout 給刪除即可。
這時候,再次刷新網頁,就什么阻力都沒有了,是不是感覺來到這一步不容易?哈哈,爬蟲就是這樣,與反爬死坑到底,不服就干,看誰更有耐心。
這時候終于可以開始我們的調試之旅了,因為知道這個 JavaScript 執行之后會返回一個 cookie 值,所以接下來就是尋找生成的位置,如果你熟練的話,可以利用二分法來找,具體怎樣找自己探索,因為我也不是很熟練。如果你不熟練的話,可以學我一樣,因為代碼就幾百行,可以直接從第一行開始找。
如果你認真找,不用多久,很快就可以發現這個,這個 arg2 就是我們需要找的 cookie 的值,所以接下來可以在這里打斷點,看看具體的執行步驟。
可以看到,通過傳一參數,使用這個函數就可以完成加密了,根據這個函數的函數名是 hexXor,可以知道是一個 Xor 加密,想知道原理的可以看看這篇文章:http://www.ruanyifeng.com/blo...,我們也可以根據 JavaScript 代碼直接轉成 python 代碼也可以,不難。
通過調試發現,這里面需要兩個參數,一個是加密的信息,一個是key
加密的信息是在很容易就發現,是從這里生成的
所以也可以在這里打斷點,再刷新一下,就可以看到加密信息是由這個函數生成的。
這里的 JavaScript 代碼也很容易,也可以直接翻譯成 python 代碼。而其參數需要的是 arg1,這個變量在代碼第一行就聲明了,所以在獲取的時候,可以使用正則獲取。
接著就是 key 的獲取了。直接搜索這個 key 的變量,很容易就找到這個
加密函數很長,但是也是可以自己轉 python的,難度也不大。
在經過我多次測試之后,發現這個 key 是固定的,所以無需自己實現這個函數,可以直接取這個值即可。
現在大功告成,已經可以獲得所需要的 cookie 值了,是不是覺得非常不可思議,一路走過來都不容易。
不過這里有個 bug,就是有時還是獲取到 JavaScript 代碼,但是多運行幾次還是可以正常獲取到 html 源碼的,由于自己只是獲取這個值而已,能成功即可,所以沒有研究下去,如果你知道原因,也可以在留言區告訴我。
最后總結下遇到各種挑戰:
代碼展開會無限刷新,內存爆破,如果你認真自己調試的話,會發現里面有幾個正則,有些是用來匹配函數的,用于判斷有沒有展開代碼的,展開了就代表有人想搞代碼了,所以就會無限刷新。
設置定時與刷新網頁,使網頁無限刷新。這個對我們來說調試問題不大,畢竟每次刷新我們都可以斷點調試代碼
設置定時檢測有沒有打開開發者工具,這個才是最厲害的,檢測到的話就胡無限 debug。
最后就沒有啦,如果你需要源碼的話,可以在我的 GitHub 上獲取,地址為:https://github.com/SergioJune...
如果對你有用的話,還請給個star,我會一直更新下去,你有什么需要破解的網站也可以提issue。
目前還更新了拼多多的搜索參數 anti_content 和另一個更加厲害的 cookie 反爬,也是屬于這個 Incapsula-CDN 的,難度比今天這個難上不少,由于個人問題,暫時只能每周講解一個,請諒解。
原創不易,希望能給個贊,給個star,支持下繼續寫下去。
本文僅用于交流學習,請勿用于非法用途,后果自負!
首發地址:請求網頁時,怎么給我返回了一段 JavaScript 代碼
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43413.html
摘要:需要的數據就是這個快遞軌跡,看到上面的好像沒什么問題,挺容易的,這還有什么比這爽的,趕緊使用請求一波。由于說過了,就不多說了,突破了繼續刷新也會遇到一些未定義的,也是同樣扣代碼,就不多說了,這里說另一個。 原本昨天就要發文章的了,由于之前的pdd文章被投訴了,刪除了,影響心情的同時也不敢亂發文章了,所以就暫時歇了一天,也改了另外一個網站,就是今天的物流網站。如果大家某天看不到我發文了,...
摘要:如果在學習過程中有什么問題可以關注我公眾號琉憶編程庫給我留言。有興趣可以深入學習最后附上學習的知識結構圖譜,可以按著下面的這個知識結構圖進行學習不一定完整,更多資料,面試題,都可以關注公眾號琉憶編程庫獲取。 你好,是我——琉憶。PHP程序員面試系列圖書作者。 作為一名PHP開發者過來人,也是經歷了菜鳥到老手的過程,在此給那些想學PHP的同學指條路,即使你是轉行學PHP一樣可以學會PHP...
摘要:函數式編程前端掘金引言面向對象編程一直以來都是中的主導范式。函數式編程是一種強調減少對程序外部狀態產生改變的方式。 JavaScript 函數式編程 - 前端 - 掘金引言 面向對象編程一直以來都是JavaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數式編程越來越多得受到開發者的青睞。函數式編程是一種強調減少對程序外部狀態產生改變的方式。因此,...
閱讀 2410·2021-10-14 09:43
閱讀 2443·2021-09-09 09:34
閱讀 1606·2019-08-30 12:57
閱讀 1207·2019-08-29 14:16
閱讀 725·2019-08-26 12:13
閱讀 3208·2019-08-26 11:45
閱讀 2290·2019-08-23 16:18
閱讀 2669·2019-08-23 15:27