新聞中心
有了 debugger 這個(gè)關(guān)鍵字,我們可以非常方便地對 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)站制作要多少錢,請找那個(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)對方案。
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)這樣的效果的,原理大同小異。
了解了原理,下面我們就對癥下藥吧!
3. 禁用斷點(diǎn)
因?yàn)?debugger 其實(shí)就是對應(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í)候我們再重新點(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),對于 debugger 關(guān)鍵字聲明的斷點(diǎn),在這里直接取消是沒有用的。
那這種情況下還有什么辦法嗎?
有的。我們可以先將當(dāng)前 Breakpoints 里面的斷點(diǎn)刪除,然后在 debugger 語句所在的行的行號上單擊鼠標(biāo)右鍵,這里會(huì)出現(xiàn)一個(gè)下拉菜單,如圖所示。
在行號上單擊鼠標(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è)? 符號,同時(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è)模式更加高級,我們可以設(shè)置進(jìn)入斷點(diǎn)的條件,比如在調(diào)試過程中,期望某個(gè)變量的值大于某個(gè)具體值的時(shí)候才停下來。但在本案例中,由于這里是無限循環(huán),所以我們沒有什么具體的變量可以作為判定依據(jù),因此可以直接寫一個(gè)簡單的表達(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è)方法來對文件進(jì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)容。
文章名稱:JavaScript逆向過程中無限D(zhuǎn)ebug的繞過方案
標(biāo)題網(wǎng)址:http://m.fisionsoft.com.cn/article/coipisc.html


咨詢
建站咨詢
