網(wǎng)頁端debugger反調(diào)試的幾種對(duì)抗方式

簡(jiǎn)單總結(jié)下目前我掌握的幾種對(duì)抗debugger反調(diào)試的方法掰吕,也歡迎大佬們有新的好用的方式補(bǔ)充果覆。

首先寫一個(gè)簡(jiǎn)單的html演示:
看下下面的這段JS,很簡(jiǎn)單殖熟,運(yùn)行時(shí)做了一下驗(yàn)證随静,對(duì)比test方法的文本,如果不一樣就通過setInterval無限調(diào)用debugger吗讶。
    function test(x,y){
            z=x+y;
            return z;
        }
        setInterval(function()
        {test+""=="function test(x,y){z=x+y;return z;}" ? console.log("未修改") 
:setInterval(
        function(){
            debugger;
            },1000);}
            ,1000);
        test(100,200);

然后我們添加這一句燎猛,也就是對(duì)源代碼進(jìn)行破壞,讓他驗(yàn)證不通過照皆。

瀏覽器打開HTML文件重绷,打開F12開發(fā)者工具∧せ伲可以看到已經(jīng)進(jìn)入無限debugger模式了昭卓。

方法一:通過停用斷點(diǎn)

應(yīng)該是各位見過最多的方法了愤钾,就是開發(fā)者工具的這個(gè)按鈕:

點(diǎn)擊切換成這個(gè)樣子后,已經(jīng)停用了斷點(diǎn)調(diào)試候醒,無限debugger將消失:
如果只是從干掉debugger的層面上講能颁,那么我們的目的已經(jīng)達(dá)到了。但是這種方法不好用倒淫,干掉debugger的同時(shí)伙菊,也無法再對(duì)該網(wǎng)頁進(jìn)行任何調(diào)試。然而往往我們打開F12就是為了調(diào)試敌土,你把調(diào)試給禁了镜硕,我開F12干嘛。返干。

方法二:條件斷點(diǎn)

想必各位對(duì)如下打斷點(diǎn)的方式并不陌生:

點(diǎn)擊代碼行數(shù)就會(huì)添加斷點(diǎn)兴枯。這是普通斷點(diǎn)的快捷添加方法。在瀏覽器中還有一種條件斷點(diǎn)矩欠。

條件斷點(diǎn)與打常規(guī)斷點(diǎn)的方法類似财剖,在要添加的行號(hào)上右鍵,選擇Add conditional breakpoint:
然后輸入false癌淮,回車:
代碼變成了這個(gè)樣子:

再按下F9峰伙,你會(huì)發(fā)現(xiàn)debugger已經(jīng)消失了。

方法三:離老子遠(yuǎn)點(diǎn)8媚(Never Pause Here)

字面意思瞳氓,不從這行代碼經(jīng)過。

依舊是右鍵點(diǎn)擊行號(hào)栓袖,選擇Never pause here匣摘。

以上是常規(guī)操作,接下來介紹比較騷操作的方法裹刮。
首先是用fiddler&charles&multiproxy之類的工具音榜。接下來我會(huì)用fiddler演示,其他的工具類似捧弃。

方法四:替換文件

我們既然已經(jīng)知道代碼里有反調(diào)試赠叼,那么用以上工具替換response內(nèi)容不就行了嗎?這里演示有點(diǎn)蛋疼违霞,服務(wù)器到期了嘴办,我又不想去專門找個(gè)有反調(diào)試的網(wǎng)站。买鸽。于是自己注入一個(gè)吧涧郊。

使用到Fiddler的Fiddler Script功能,F(xiàn)iddler Script使用的語言是JScript.NET眼五。語法和JS類似妆艘,我是當(dāng)做JS來寫的彤灶,細(xì)微差別注意一下就好了,反正用到這個(gè)功能一般也不會(huì)寫太多代碼批旺。幌陕。

首先,百度主頁是沒有任何debugger的汽煮,我們接下來要做的是在百度中注入一段反調(diào)試代碼搏熄,讓他進(jìn)入到debugger中。打開Fiddler逗物,在右邊可以找到Fiddler Script選項(xiàng)卡。

下面這些是Fiddler提供給我們的一些生命周期鉤子瑟俭,做過前端或者安卓開發(fā)很容易就會(huì)理解翎卓。
簡(jiǎn)單說,OnBeforeRequest會(huì)在攔截請(qǐng)求之前執(zhí)行摆寄,屬于攔截到了失暴,但是還沒有發(fā)出去的狀態(tài),在這里你可以修改一些請(qǐng)求頭等內(nèi)容微饥。
OnBeforeResponse是在攔截響應(yīng)前執(zhí)行逗扒,比如我們?cè)诰W(wǎng)頁中打開了百度,百度的代碼已經(jīng)返回來了欠橘,但被Fiddler攔截在了這里矩肩,還沒有到達(dá)瀏覽器!我們可以在這個(gè)階段劫持響應(yīng)內(nèi)容肃续。

其他的可以去查找相關(guān)資料或者閱讀官方文檔黍檩,F(xiàn)iddler Script是Fiddler強(qiáng)大之處之一。

我們可以在這里寫代碼擴(kuò)展一些自己想要的東西始锚。這個(gè)的應(yīng)用其實(shí)很廣刽酱,比如有時(shí)候不得不用selenium抓數(shù)據(jù),但是又不想通過selenium讀數(shù)據(jù)瞧捌,因?yàn)橐染W(wǎng)頁渲染棵里,實(shí)在太慢了。這時(shí)候就可以使用Fiddler Script姐呐,在里面寫一段腳本殿怜,讓響應(yīng)回來的時(shí)候直接解析,然后把數(shù)據(jù)保存在數(shù)據(jù)庫里曙砂。

咳咳稳捆,扯遠(yuǎn)了。先來注入:選擇OnBeforeResponse麦轰,會(huì)自動(dòng)跳到這個(gè)函數(shù)的位置:

然后我們添加注入的代碼:
比較簡(jiǎn)單乔夯,我將上面例子中的那段debugger代碼添加到百度頁面中的<title>標(biāo)簽前面砖织。保存,打開百度主頁末荐,按下F12:
已經(jīng)把debugger注入到網(wǎng)頁中了侧纯。

接下來我們要干掉他。AutoResponser:


先右鍵點(diǎn)擊查看網(wǎng)頁源代碼甲脏,把源代碼拷貝下來一份眶熬,放到我們寫好的html中。
然后修改代碼块请,把debugger置為false:
Fiddler中找到要替換的請(qǐng)求:把他拖進(jìn)AutoResponser中:
選擇Find a file娜氏,并在里面選擇我們準(zhǔn)備好的html文件。
刷新頁面墩新。
我們發(fā)現(xiàn)已經(jīng)不會(huì)停在我們注入的地方了贸弥。也就是debugger失效了。

PS:萬萬沒想到網(wǎng)頁里還是出現(xiàn)了debugger海渊,是因?yàn)镕iddler Script注入的地方?jīng)]有關(guān)绵疲。。也驗(yàn)證了臣疑,F(xiàn)iddler Script的優(yōu)先級(jí) > AutoResponser盔憨。AutoResponser執(zhí)行后才會(huì)走Fiddler Script

方法五:腳本注入

方法四是比較方便的,但是有時(shí)候你會(huì)發(fā)現(xiàn)要修改的JS代碼是動(dòng)態(tài)的讯沈,每次加載都不一樣郁岩,這時(shí)候如果盲目替換文件,很可能導(dǎo)致網(wǎng)頁的邏輯無法使用缺狠。我們僅僅需要把debugger的地方干掉就可以了驯用。

也就是,通過注入儒老,修改指定代碼蝴乔。細(xì)心的你可能已經(jīng)發(fā)現(xiàn)了,這不就是上面我們注入debugger做的事嗎驮樊?是的薇正。。囚衔。所以挖腰,沒有看上面方法四的建議回去看一下。练湿。猴仑。方法類似,指定Host,用正則替換掉debugger代碼辽俗。
這里不再講了疾渣。

方法六:JS Hook劫持方法

首先要裝一個(gè)油猴插件,這個(gè)程序員應(yīng)該都裝了吧崖飘。榴捡。。實(shí)現(xiàn)各種騷操作朱浴。
js的hook和Frida中的很像吊圾,或者說比Frida的hook更簡(jiǎn)單。我們現(xiàn)在知道了debugger是在setInterval中執(zhí)行的翰蠢,那我們嘗試劫持setInterval项乒。點(diǎn)擊這里,新建一個(gè)油猴腳本:


編輯內(nèi)容如下:
簡(jiǎn)單解釋下梁沧,match代表應(yīng)用的網(wǎng)址檀何,也可以用正則配成*。require引入了jquery...這行不看也罷趁尼,以前寫的模板埃碱,直接帶過來了猖辫。run-at document-start在加載的時(shí)候運(yùn)行酥泞。
然后就是主要代碼了:
var new_setInterval=setInterval;
window.setInterval=function(a,b){
    if(a.toString().indexOf("debugger")!=-1)
        {
        return null;
    }
    new_setInterval(a,b);
}

首先用new_setInterval接收了原生的setInterval。然后hook原生setInterval啃憎,如果在參數(shù)a芝囤,也就是定時(shí)器結(jié)束時(shí)調(diào)用的函數(shù)中出現(xiàn)debugger的話,就讓函數(shù)返回null辛萍,什么都不做悯姊,再繼續(xù)運(yùn)行定時(shí)器。

效果:

總結(jié)

以前遇到debugger贩毕,沒有處理的經(jīng)驗(yàn)悯许,真的是一臉懵逼,慢慢也積累下來一些對(duì)抗的方法辉阶,希望能拋磚引玉先壕,各位如果有其他方法也可以交流一下。

其實(shí)通過這些谆甜,學(xué)到的不僅僅是針對(duì)反調(diào)試垃僚,這些方法在其他的地方也有相當(dāng)多的應(yīng)用場(chǎng)景。比如Hook规辱,這么好用的方法難道僅僅用來對(duì)付反調(diào)試谆棺?不不不,他還可以hook任意JS加密方法罕袋,hook Cookie的生成改淑,hook一個(gè)搜索不到的入口等等等碍岔。。留給大家自己研究了溅固。

如果后續(xù)我找到新的對(duì)付無限debugger的方法付秕,也會(huì)更新在這里。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侍郭,一起剝皮案震驚了整個(gè)濱河市询吴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亮元,老刑警劉巖猛计,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異爆捞,居然都是意外死亡奉瘤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門煮甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盗温,“玉大人,你說我怎么就攤上這事成肘÷艟郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵双霍,是天一觀的道長(zhǎng)砚偶。 經(jīng)常有香客問我,道長(zhǎng)洒闸,這世上最難降的妖魔是什么染坯? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮丘逸,結(jié)果婚禮上单鹿,老公的妹妹穿的比我還像新娘。我一直安慰自己深纲,他們只是感情好仲锄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著囤萤,像睡著了一般昼窗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涛舍,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天澄惊,我揣著相機(jī)與錄音,去河邊找鬼。 笑死掸驱,一個(gè)胖子當(dāng)著我的面吹牛肛搬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毕贼,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼温赔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了鬼癣?” 一聲冷哼從身側(cè)響起陶贼,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎待秃,沒想到半個(gè)月后拜秧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡章郁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年枉氮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖庄。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聊替,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出培廓,到底是詐尸還是另有隱情惹悄,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布医舆,位于F島的核電站俘侠,受9級(jí)特大地震影響象缀,放射性物質(zhì)發(fā)生泄漏蔬将。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一央星、第九天 我趴在偏房一處隱蔽的房頂上張望霞怀。 院中可真熱鬧,春花似錦莉给、人聲如沸毙石。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徐矩。三九已至,卻和暖如春叁幢,著一層夾襖步出監(jiān)牢的瞬間滤灯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳞骤,地道東北人窒百。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像豫尽,于是被迫代替她去往敵國和親篙梢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容