鐵人賽 Day 6 DevTools debugger 常見觸發方式與解法

鐵人賽 Day 6 DevTools debugger 常見觸發方式與解法
鐵人賽 Day 6 DevTools debugger 常見觸發方式與解法

本系列文章所討論的 JavaScript 資安與逆向工程技術,旨在分享知識、探討防禦之道,並促進技術交流。

所有內容僅供學術研究與學習,請勿用於任何非法或不道德的行為。

讀者應對自己的行為負完全責任。尊重法律與道德規範是所有技術人員應共同遵守的準則。

 

在進行 JavaScript 逆向工程時,開啟 DevTools 進行程式觀察是必經的步驟。

但許多前端防護或反爬蟲系統會利用 debugger 來干擾分析,讓你在程式跑到關鍵位置時不斷中斷。

要能順利逆向必須先理解 debugger 的觸發方式再掌握對應的方法。

1.jpg
debugger;
setInterval(function() {
    debugger;
}, 1000);
(function () {
    while (true) {
        debugger;
    }
})();
(function() {
    eval("debugger");
})();
Function("debugger")();

可以利用 Overrides 功能直接修改本地檔案。

但遇到程式碼混淆嚴重的就會難以找到確切位置。

DevTools工具中的Sources 可以開啟關閉斷點的功能,但這時會造成調適時也無法下斷點。

用定時器觸發的可以將定時器函式複寫

setInterval = function() {};

用eval觸發的也可以將eval複寫

window.eval = function() {};

最好的方式是從建構函式直接處理

Function.prototype.__constructor = Function.prototype.constructor;
Function.prototype.constructor = function(){
	if(arguments && typeof arguments[0] === 'string'){
		if(arguments[0] === 'debugger'){
			return;
		}
	}
	Function.prototype.__constructor.apply(this, arguments);
}

debugger 是逆向工程中最常見的干擾技巧攻防兩端都很常用。

理解它的觸發方式並熟悉相對應的解法,才能確保逆向流程不中斷順利觀察程式的行為。

但僅只有這個防護是遠遠不夠的還需要多的手段進行保護。

作者頭像
Nick

擅長從前端的互動設計到後端的資料處理,都能親自規劃與實作。對我來說開發網站不只是完成功能,而是打造一個能被真正使用、體驗順暢的平台。我喜歡把複雜的技術轉化成簡單好懂的成果,並在這個過程中持續學習與挑戰自己。