python爬蟲 - js逆向之某網站逆向分析(上)-- 突破某網的debug檢測
前言
朋友給了我一個網站,他說這個網站的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逆向