av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

JavaScript逆向過程中無限D(zhuǎn)ebug的繞過方案

有了 debugger 這個(gè)關(guān)鍵字,我們可以非常方便地對(duì) JavaScript 代碼進(jìn)行調(diào)試,比如使用 JavaScript Hook 時(shí),我們可以加入 debugger 關(guān)鍵字,使其在關(guān)鍵的位置停下來,以便查找逆向突破口。

新蔡網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,新蔡網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為新蔡上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的新蔡做網(wǎng)站的公司定做!

但有時(shí)候,debugger 會(huì)被網(wǎng)站開發(fā)者利用,使其成為阻撓我們正常調(diào)試的攔路虎。

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

1. 案例介紹

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

進(jìn)入斷點(diǎn)模式

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

嘗試跳過斷點(diǎn)

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

這怎么辦呢?似乎無法正常打斷點(diǎn)調(diào)試了,有什么解決辦法嗎?

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

2. 實(shí)現(xiàn)原理

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

點(diǎn)擊 Sources 面板中的格式化按鈕

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

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

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

了解了原理,下面我們就對(duì)癥下藥吧!

3. 禁用斷點(diǎn)

因?yàn)?debugger 其實(shí)就是對(duì)應(yīng)的一個(gè)斷點(diǎn),它相當(dāng)于用代碼顯式地聲明了一個(gè)斷點(diǎn),要解除它,我們只需要禁用這個(gè)斷點(diǎn)就好了。

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

全局禁用開關(guān)

點(diǎn)擊一下它,這時(shí)候就會(huì)發(fā)現(xiàn)所有的斷點(diǎn)變成了灰色,如圖所示。

禁用所有的斷點(diǎn)

這時(shí)候我們?cè)僦匦曼c(diǎn)擊一下 Resume script execution 按鈕,跳過當(dāng)前斷點(diǎn),頁面就不會(huì)再進(jìn)入到無限 Debugger 的狀態(tài)了。

但是這種全局禁用其實(shí)并不是一個(gè)好的方案,因?yàn)榻弥笪覀円矡o法在其他位置增加斷點(diǎn)進(jìn)行調(diào)試了,所有的斷點(diǎn)都失效了。

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

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

取消勾選

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

其實(shí),Breakpoints 只代表了我們手動(dòng)添加的斷點(diǎn),對(duì)于 debugger 關(guān)鍵字聲明的斷點(diǎn),在這里直接取消是沒有用的。

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

有的。我們可以先將當(dāng)前 Breakpoints 里面的斷點(diǎn)刪除,然后在 debugger 語句所在的行的行號(hào)上單擊鼠標(biāo)右鍵,這里會(huì)出現(xiàn)一個(gè)下拉菜單,如圖所示。

在行號(hào)上單擊鼠標(biāo)右鍵

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

點(diǎn)擊 Never pause here 選項(xiàng)后的頁面

當(dāng)前斷點(diǎn)顯示為橙色,并且斷點(diǎn)前面多了一個(gè)? 符號(hào),同時(shí) Breakpoints 也出現(xiàn)了剛才添加的斷點(diǎn)位置。這時(shí)再次點(diǎn)擊 Resume 按鈕,就可以發(fā)現(xiàn)我們不會(huì)再進(jìn)入無限 Debugger 模式了。

當(dāng)然我們也可以選擇另外一個(gè)選項(xiàng) Add conditional breakpoint,如圖所示。

Add conditional breakpoint 選項(xiàng)

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

點(diǎn)擊 Add conditional breakpoint 選項(xiàng),直接填入 false 即可,如圖所示。

設(shè)置 Conditional breakpoint 為 false

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

4. 替換文件

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

很簡(jiǎn)單,我們只需要在新的文件里面把 debugger 這個(gè)關(guān)鍵字刪除。

我們將當(dāng)前的 JavaScript 文件復(fù)制到文本編輯器中,刪除或者直接注釋掉 debugger 這個(gè)關(guān)鍵字,修改如下:

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

打開 Sources 面板下的 Overrides 面板,將修改后的完整 JavaScript 文件復(fù)制進(jìn)去,修改的內(nèi)容如圖所示:

替換 JavaScript 文件

替換完成之后,我們重新刷新網(wǎng)頁,這時(shí)候就發(fā)現(xiàn)不會(huì)進(jìn)入無限 Debugger 模式了。

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

5. 總結(jié)

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


新聞標(biāo)題:JavaScript逆向過程中無限D(zhuǎn)ebug的繞過方案
文章轉(zhuǎn)載:http://uogjgqi.cn/article/coipisc.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流