1. 程式人生 > 其它 >python爬蟲 - js逆向之某網站逆向分析(上)-- 突破某網的debug檢測

python爬蟲 - js逆向之某網站逆向分析(上)-- 突破某網的debug檢測

這段的意思就是,先記錄一個時間before,然後啟動debugger,此時就是上面我們已經跳過debugger那裡,然後再生成一個時間after,用這兩個時間相減,如果大於50,它就任務你還是在嘗試除錯,所以仍然出現同樣的提示 整段程式碼就是這樣,那麼它既然檢測那麼多,那這樣,我們開啟除錯視窗之後,點這個: 讓除錯視窗作為一個單獨頁面視窗,就可以規避掉上面的好多層檢測,同時剛才的never pasue here也繼續保持,重新整理頁面: 網址終於正常顯示,然後就可以進行下面的介面分析了 而其實,你還有很多方法,比如直接hook,把裡面那個debugflag改為false之類的,或者直接在控制檯改制,或者用瀏覽器外掛控制改值,或者用reres外掛直接把相關的js替換了,方法很多,這裡就不一一展示了

前言

朋友給了我一個網站,他說這個網站的debug檢測有點東西,於是我準備研究一下

網址:aHR0cHM6Ly93d3cuYXFpc3R1ZHkuY24vaGlzdG9yeWRhdGEvZGF5ZGF0YS5waHA/Y2l0eT0lRTYlOUQlQUQlRTUlQjclOUUmbW9udGg9MjAyMTA5 (請不要問我什麼東西,懂的都懂)

分析

開啟網站,只能給一部分了,看出來的就懂,看不出來的也不要問我是啥

開啟確實是正常顯示哈,好,我們按右鍵,開啟控制檯看看,當我按滑鼠右鍵的時候:

牛逼啊,有按鍵檢測

那直接按f12吧:

有點意思哈,f12也被警用了

那行,我在開啟這個網站之前就把瀏覽器除錯工具按住來了,把地址放上去,回車:

網站資料頁面本來有展示,但是在一瞬間突然變成如下頁面:

然後還出來了個這個:

根據常規經驗,滑鼠放到這一行,右鍵,然後選擇:

然後再按右邊的斷點繼續鍵:

現在網頁變成這樣:

回車重新整理頁面,看到有資料頁面,但是一瞬間又變回剛才那個檢測頁面:

是哪裡的問題呢?直接搜相關的欄位:

找到這個js檔案:

原始碼:

var debugflag = false;
document.onkeydown = function() {
    if ((e.ctrlKey) && (e.keyCode == 83)) {
        alert(
"檢測到非法除錯,CTRL + S被管理員禁用"); return false } } ; document.onkeydown = function() { var e = window.event || arguments[0]; if (e.keyCode == 123) { alert("檢測到非法除錯,F12被管理員禁用"); return false } } ; document.oncontextmenu = function() { alert('檢測到非法除錯,右鍵被管理員禁用');
return false } ; !function() { if (window.outerWidth - window.innerWidth > 210 || window.outerHeight - window.innerHeight > 210) { $('#body').html('檢測到非法除錯, 請關閉除錯終端後重新整理本頁面重試!<br/>Welcome for People, Not Welcome for Machine!<br/>'); debugflag = true } let handler = setInterval(()=>{ if (window.outerWidth - window.innerWidth > 210 || window.outerHeight - window.innerHeight > 210) { $('#body').html('檢測到非法除錯, 請關閉除錯終端後重新整理本頁面重試!<br/>Welcome for People, Not Welcome for Machine!<br/>'); debugflag = true } let before = new Date(); (function() {} ["constructor"]("debugger")()); let after = new Date(); let cost = after.getTime() - before.getTime(); if (cost > 50) { debugflag = true; try { $('#body').html('檢測到非法除錯, 請關閉除錯終端後重新整理本頁面重試!<br/>Welcome for People, Not Welcome for Machine!<br/>'); document.write('檢測到非法除錯, 請關閉除錯終端後重新整理本頁面重試!<br/>'); document.write("Welcome for People, Not Welcome for Machine!<br/>") } catch (err) { alert('檢測到非法除錯, 請關閉除錯終端後重新整理本頁面重試!') } } } , 2000) }();

有點意思哈

一段一段的看,先看這一段

意思就是防止整個頁面被儲存到本地,所以禁用了ctrl+s鍵

再看第二段:

首先keyCode這個對於前端的老哥來說就很熟悉了,可以這麼說,你鍵盤的所有按鍵,js都是有對應的數字編碼的,123剛好就是f12i鍵的編碼,這裡的意思就是禁用f12,防止你開啟除錯視窗除錯該網站介面

鍵盤編碼表:

/* 鍵盤編碼列表 
    8: BackSpace BackSpace            79: o O                          133: F22
    9: Tab Tab                        80: p P                          134: F23
    12: Clear                         81: q Q at                       135: F24
    13: Enter                         82: r R                          136: Num_Lock
    16: Shift_L                       83: s S                          137: Scroll_Lock
    17: Control_L                     84: t T                          187: acute grave
    18: Alt_L                         85: u U                          188: comma semicolon
    19: Pause                         86: v V                          189: minus underscore
    20: Caps_Lock                     87: w W                          190: period colon
    27: Escape Escape                 88: x X                          192: numbersign apostrophe
    32: space                         89: y Y                          210: plusminus hyphen macron
    33: Prior                         90: z Z                          211:
    34: Next                          96: KP_0 KP_0                    212: copyright registered
    35: End                           97: KP_1 KP_1                    213: guillemotleft guillemotright
    36: Home                          98: KP_2 KP_2                    214: masculine ordfeminine
    37: Left                          99: KP_3 KP_3                    215: ae AE
    38: Up                            100: KP_4 KP_4                   216: cent yen
    39: Right                         101: KP_5 KP_5                   217: questiondown exclamdown
    40: Down                          102: KP_6 KP_6                   218: onequarter onehalf threequarters
    41: Select                        103: KP_7 KP_7                   220: less greater bar
    42: Print                         104: KP_8 KP_8                   221: plus asterisk asciitilde
    43: Execute                       105: KP_9 KP_9                   227: multiply division
    45: Insert                        106: KP_Multiply KP_Multiply     228: acircumflex Acircumflex
    46: Delete                        107: KP_Add KP_Add               229: ecircumflex Ecircumflex
    47: Help                          108: KP_Separator KP_Separator   230: icircumflex Icircumflex
    48: 0 equal braceright            109: KP_Subtract KP_Subtract     231: ocircumflex Ocircumflex
    49: 1 exclam onesuperior          110: KP_Decimal KP_Decimal       232: ucircumflex Ucircumflex
    50: 2 quotedbl twosuperior        111: KP_Divide KP_Divide         233: ntilde Ntilde
    51: 3 section threesuperior       112: F1                          234: yacute Yacute
    52: 4 dollar                      113: F2                          235: oslash Ooblique
    53: 5 percent                     114: F3                          236: aring Aring
    54: 6 ampersand                   115: F4                          237: ccedilla Ccedilla
    55: 7 slash braceleft             116: F5                          238: thorn THORN
    56: 8 parenleft bracketleft       117: F6                          239: eth ETH
    57: 9 parenright bracketright     118: F7                          240: diaeresis cedilla currency
    65: a A                           119: F8                          241: agrave Agrave atilde Atilde
    66: b B                           120: F9                          242: egrave Egrave
    67: c C                           121: F10                         243: igrave Igrave
    68: d D                           122: F11                         244: ograve Ograve otilde Otilde
    69: e E EuroSign                  123: F12                         245: ugrave Ugrave
    70: f F                           124: F13                         246: adiaeresis Adiaeresis
    71: g G                           125: F14                         247: ediaeresis Ediaeresis
    72: h H                           126: F15                         248: idiaeresis Idiaeresis
    73: i I                           127: F16                         249: odiaeresis Odiaeresis
    74: j J                           128: F17                         250: udiaeresis Udiaeresis
    75: k K                           129: F18                         251: ssharp question backslash
    76: l L                           130: F19                         252: asciicircum degree
    77: m M mu                        131: F20                         253: 3 sterling
    78: n N                           132: F21                         254: Mode_switch
    */

再接著看這一段:

這個,說白了,滑鼠的左鍵,右鍵,中鍵也是可以被js檢測到的,所以,當檢測你按了滑鼠右鍵,也不讓用,怕你按右鍵-檢查也進行除錯

再看下面這一段:

這裡就是檢測你的電腦的實際寬度和高度分別跟瀏覽器顯示寬度和高度相減,如果大於210,那說明你開了除錯工具,什麼意思,看下圖:

第一個大框,你姑且認為我畫的就是最外層的顯示寬度和高度,內層的大框,姑且任務就是瀏覽器顯示的實際寬度和高度,因為這個截圖工具,不太好控制邊距,各位老哥將就看了,所以,你看到就是這樣,而比較明顯的就是,電腦實際高度跟瀏覽器顯示高度相肯定大於210了,所以它就覺得你肯定開了除錯工具,所以也顯示那個提示

再看最後一段:

這段的意思就是,先記錄一個時間before,然後啟動debugger,此時就是上面我們已經跳過debugger那裡,然後再生成一個時間after,用這兩個時間相減,如果大於50,它就任務你還是在嘗試除錯,所以仍然出現同樣的提示

整段程式碼就是這樣,那麼它既然檢測那麼多,那這樣,我們開啟除錯視窗之後,點這個:

讓除錯視窗作為一個單獨頁面視窗,就可以規避掉上面的好多層檢測,同時剛才的never pasue here也繼續保持,重新整理頁面:

網址終於正常顯示,然後就可以進行下面的介面分析了

而其實,你還有很多方法,比如直接hook,把裡面那個debugflag改為false之類的,或者直接在控制檯改制,或者用瀏覽器外掛控制改值,或者用reres外掛直接把相關的js替換了,方法很多,這裡就不一一展示了

結語

很簡單對吧,所以還是得學學js,能看懂js程式碼,你才能真的做js逆向