日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
JavaScript逆向過程中無限Debug的繞過方案

有了 debugger 這個關鍵字,我們可以非常方便地對 JavaScript 代碼進行調試,比如使用 JavaScript Hook 時,我們可以加入 debugger 關鍵字,使其在關鍵的位置停下來,以便查找逆向突破口。

新蔡網站建設公司創(chuàng)新互聯公司,新蔡網站設計制作,有大型網站制作公司豐富經驗。已為新蔡上千提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿網站制作要多少錢,請找那個售后服務好的新蔡做網站的公司定做!

但有時候,debugger 會被網站開發(fā)者利用,使其成為阻撓我們正常調試的攔路虎。

本節(jié)我們就來介紹一個案例,來繞過無限 Debug。

1. 案例介紹

我們先看一個案例,網址是:https://antispider8.scrape.center/,打開這個網站,正常操作和之前的網站沒有什么不同。但是,一旦我們打開開發(fā)者工具,就發(fā)現它立即進入了斷點模式,如圖所示。

進入斷點模式

我們并沒有設置任何斷點,也沒有執(zhí)行任何額外的腳本,它就直接進入了斷點模式。這時候我們可以點擊 Resume script execution (恢復腳本執(zhí)行)按鈕,嘗試跳過這個斷點繼續(xù)執(zhí)行,如圖所示。

嘗試跳過斷點

然而不管我們按多少次,它仍然一次次地進入斷點模式,無限循環(huán)下去,我們可以稱這樣的情況為無限 Debugger。

這怎么辦呢?似乎無法正常打斷點調試了,有什么解決辦法嗎?

辦法當然是有的,本節(jié)我們就來總結一下無限 Debugger 的應對方案。

2. 實現原理

我們首先要做的是找到無限 Debugger 的源頭。在 Sources 面板中可以看到,debugger 關鍵字出現在了一個 JavaScript 文件里,這時候點擊左下角的格式化按鈕,如圖所示。

點擊 Sources 面板中的格式化按鈕

這里通過 setInterval 循環(huán),每秒執(zhí)行 1 次 debugger 語句,如圖所示。

每秒執(zhí)行 1 次 debugger 語句

當然還有很多類似的實現,比如無限 for 循環(huán)、無限 while 循環(huán)、無限遞歸調用等,它們都是可以實現這樣的效果的,原理大同小異。

了解了原理,下面我們就對癥下藥吧!

3. 禁用斷點

因為 debugger 其實就是對應的一個斷點,它相當于用代碼顯式地聲明了一個斷點,要解除它,我們只需要禁用這個斷點就好了。

首先,我們可以禁用所有的斷點。全局禁用開關位于 Sources 面板的右上角,叫作 Deactivate breakpoints,如圖所示。

全局禁用開關

點擊一下它,這時候就會發(fā)現所有的斷點變成了灰色,如圖所示。

禁用所有的斷點

這時候我們再重新點擊一下 Resume script execution 按鈕,跳過當前斷點,頁面就不會再進入到無限 Debugger 的狀態(tài)了。

但是這種全局禁用其實并不是一個好的方案,因為禁用之后我們也無法在其他位置增加斷點進行調試了,所有的斷點都失效了。

這時候,我們可以選擇禁用局部斷點。取消剛才的 Deactivate breakpoints 模式,頁面會重新進入無限 Debugger 模式,我們嘗試使用另一種方法來跳過這個無限 Debugger。

我們可能會想著去掉 Breakpoints 里勾選的斷點,心想這樣不就禁用了嗎?大家嘗試一下取消勾選,如圖所示。

取消勾選

然而,取消之后再繼續(xù)點擊 Resume 按鈕,它依然不斷地停在有 debugger 關鍵字的地方,并沒有什么效果。

其實,Breakpoints 只代表了我們手動添加的斷點,對于 debugger 關鍵字聲明的斷點,在這里直接取消是沒有用的。

那這種情況下還有什么辦法嗎?

有的。我們可以先將當前 Breakpoints 里面的斷點刪除,然后在 debugger 語句所在的行的行號上單擊鼠標右鍵,這里會出現一個下拉菜單,如圖所示。

在行號上單擊鼠標右鍵

這里會有一個叫作 Never pause here 的選項,意思是從不在此處暫停,我們選擇這個選項,于是頁面變成如圖所示的樣子。

點擊 Never pause here 選項后的頁面

當前斷點顯示為橙色,并且斷點前面多了一個? 符號,同時 Breakpoints 也出現了剛才添加的斷點位置。這時再次點擊 Resume 按鈕,就可以發(fā)現我們不會再進入無限 Debugger 模式了。

當然我們也可以選擇另外一個選項 Add conditional breakpoint,如圖所示。

Add conditional breakpoint 選項

這個模式更加高級,我們可以設置進入斷點的條件,比如在調試過程中,期望某個變量的值大于某個具體值的時候才停下來。但在本案例中,由于這里是無限循環(huán),所以我們沒有什么具體的變量可以作為判定依據,因此可以直接寫一個簡單的表達式來控制。

點擊 Add conditional breakpoint 選項,直接填入 false 即可,如圖所示。

設置 Conditional breakpoint 為 false

設定為 false,其效果就和選擇了 Never pause here 是一樣的,重新點擊 Resume 也不會進入無限 Debbugger 循環(huán)了。

4. 替換文件

前文我們介紹過 Overrides 面板的用法,利用它我們可以將遠程的 JavaScript 文件替換成本地的 JavaScript 文件,這里我們依然可以使用這個方法來對文件進行替換,替換成什么呢?

很簡單,我們只需要在新的文件里面把 debugger 這個關鍵字刪除。

我們將當前的 JavaScript 文件復制到文本編輯器中,刪除或者直接注釋掉 debugger 這個關鍵字,修改如下:

setInterval((function() {
// debugger; // 可以直接刪除此行或者注釋此行
console.log("debugger")
}

打開 Sources 面板下的 Overrides 面板,將修改后的完整 JavaScript 文件復制進去,修改的內容如圖所示:

替換 JavaScript 文件

替換完成之后,我們重新刷新網頁,這時候就發(fā)現不會進入無限 Debugger 模式了。

另外我們還可以使用 Charles、Fiddler 等抓包工具進行替換,也可以使用瀏覽器插件 ReRes 等進行替換,也可以使用 Playwright 等工具使用 Request Interception 進行替換,達成的效果是一致的,原理都是將在線加載的 JavaScript 文件進行替換,最終消除無限 Debugger。

5. 總結

本節(jié)講解了無限 Debugger 的繞過方案,包括禁用全局斷點、條件斷點、替換原始文件等,從這些操作中我們也可以學習到一些 JavaScript 逆向的基本思路,建議好好掌握本內容。


新聞標題:JavaScript逆向過程中無限Debug的繞過方案
轉載注明:http://m.5511xx.com/article/coipisc.html