你想逆向我的 js 代碼?呵呵,先過了我的反 debug 再說吧!

有時候我們在爬取

某個用 js 渲染的網站


需要去分析一下

別人網站的數據展示規則


這個時候就不得不用 Chrome 的 DevTools 進行分析了



圖片

對於一般的網站
我們在具體的位置打個斷點就可以進行調試了

圖片

不過有一些網站
當你打開 DevTools 的時候你都還沒打斷點他媽的直接就這樣了






一直 debug
只要一按 F2 就一直 debug
就算你運行過去
還是一直 debug一直調用卡死你卡死你卡死你

就是不讓你進行調試
你奈我何




哇靠啊
怎麼解決呢

接下來就是學習反反 debug 的正確姿勢
































來來來
莫慌


小帥b先跟你說說
在 Chrome 的開發者工具中怎麼樣在代碼裏面打斷點


我們最常用的操作就是在想要打斷點的代碼行左側用鼠標輕輕點一下
就可以生成一個圖標

然後就可以對這行代碼開始進行調試了




這樣的操作也可以直接在代碼中操作使用 debugger 這個關鍵字就可以了

比如這樣的 js










console.log('a');

console.log('b');

debugger;

console.log('c');


當 Chrome 在運行的時候發現了 debugger
就會停下來
進入調試模式

其實在代碼中聲明 debugger 
就和我們點擊代碼行左側進行調試是一樣的
也正是因爲這個關鍵字
所以就可以從它入手
只要在首頁的 js 中
寫一個方法不斷的循環執行 debugger
比如













while true{    debugger;}


那麼當我們打開這個網頁 的調試面板的時候
就會不停的處於 debug 模式
即使你瘋狂的點擊運行按鈕

也無濟於事




其實 Chrome 有一個 忽略斷點 的功能
只要在代碼行左側
點擊右鍵 選擇 Never pause here  即可 然後就會有個黃色的標識



當下次運行到這裏的時候 就會忽略這個斷點

這對於一些簡單的很有效


但是 有些比較 變態 的就沒那麼容易了


比如這個




就算我忽略了 它還是會瘋狂進入 debug 模式
看看右邊的 Call stack
一直瘋狂的調用 _0xa3e3cc喫你的內存


把你搞的不要不要的
那怎麼辦好呢?
只能看看它的源碼了



可以看到
2949 行
一直在遞歸調用_0xa3e3cc 函數
所以我們纔會一直處於 debug 模式

既然已經問題出現在哪裏了
那就想辦法把這個給搞掉




還記不記得我們之前說的 mitmproxy
沒錯
這次走它的代理然後攔截這個網頁把 js 中的 debugger 代碼去掉
然後我們不用受這個罪了呀
快點開啓我們的 mitmweb

設置地址攔截


瀏覽器設置好代理


打開代理之後訪問一波































這時候被我們攔截下來了



圖片

請求我們直接讓它過去

圖片

因爲我們只要攔截返回的數據
然後對它進行修改
ok現在我們就攔截到返回的數據了

圖片

修改一下代碼
點擊這支筆

圖片

可以看到現在的代碼難看


複製出來用編輯器打開吧

把調用遞歸的代碼去掉



把 debugger 關鍵字換成 return


複製到 mitmweb 替換



右上角的勾給打上然後運行
圖片圖片

此時此刻瀏覽器得到的就是修改過的文件

圖片

打開 F12

圖片

可以看到
不會在一直 debug 噁心我們了

可能不同的網站
反 debug 的實現不同
思路就是這麼個思路

以不變應萬變
下回見了哦peace




















































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章