developer tool 막는코드
debugger를 걸고 시간을 체크해서 막는다.
같은 라인으로 설정해서 never pause here 도 막는다.
난독화된 막는코드
1 | ( function (_0x58753b,_0x16ff52){ var _0x135e8f=_0x5dcf,_0xde025=_0x58753b(); while (!![]){ try { var _0x31c520=-parseInt(_0x135e8f(0xc0))/0x1*(-parseInt(_0x135e8f(0xbb))/0x2)+parseInt(_0x135e8f(0xc8))/0x3+-parseInt(_0x135e8f(0xc3))/0x4+-parseInt(_0x135e8f(0xb7))/0x5+-parseInt(_0x135e8f(0xbe))/0x6+parseInt(_0x135e8f(0xba))/0x7+parseInt(_0x135e8f(0xb6))/0x8*(parseInt(_0x135e8f(0xb9))/0x9); if (_0x31c520===_0x16ff52) break ; else _0xde025[ 'push' ](_0xde025[ 'shift' ]());} catch (_0x20ae29){_0xde025[ 'push' ](_0xde025[ 'shift' ]());}}}(_0x354f,0x2b9d7)); var tryCount=0x0,minimalUserResponseInMiliseconds=0xc8; function check(){ var _0x2920ff=_0x5dcf;console[_0x2920ff(0xbf)](),before= new Date()[_0x2920ff(0xb2)]();debugger;after= new Date()[_0x2920ff(0xb2)](),after-before>minimalUserResponseInMiliseconds?(document[_0x2920ff(0xc4)](_0x2920ff(0xc1)),self[ 'location' ][ 'replace' ](window[_0x2920ff(0xc9)][_0x2920ff(0xb4)]+window[_0x2920ff(0xc9)][ 'href' ][_0x2920ff(0xb8)](window[_0x2920ff(0xc9)][_0x2920ff(0xb4)][_0x2920ff(0xbd)]))):(before= null ,after= null , delete before, delete after),setTimeout(check,0x64);} function _0x5dcf(_0x5221a2,_0xb91dec){ var _0x354fcc=_0x354f(); return _0x5dcf= function (_0x5dcf24,_0x10d262){_0x5dcf24=_0x5dcf24-0xb2; var _0x50521a=_0x354fcc[_0x5dcf24]; return _0x50521a;},_0x5dcf(_0x5221a2,_0xb91dec);} function _0x354f(){ var _0x5b9b08=[ '1272984MhFTXp' , 'clear' , '116519YFlKMJ' , '\x20Dont\x20open\x20Developer\x20Tools.\x20' , 'keyCode' , '753852wcxXcd' , 'write' , 'addEventListener' , 'preventDefault' , 'shiftKey' , '529290xDYcGb' , 'location' , 'getTime' , 'ctrlKey' , 'protocol' , 'keydown' , '512yAKOVf' , '1260885GzfCoT' , 'substring' , '37971YKeExw' , '1879402uDLZvg' , '2dUCUWm' , 'event' , 'length' ];_0x354f= function (){ return _0x5b9b08;}; return _0x354f();}check(),window[ 'onload' ]= function (){ var _0xce5e94=_0x5dcf;document[ 'addEventListener' ]( 'contextmenu' , function (_0x13a5ad){ var _0x54926e=_0x5dcf;_0x13a5ad[_0x54926e(0xc6)]();},![]),document[_0xce5e94(0xc5)](_0xce5e94(0xb5), function (_0x3b45c3){ var _0x513285=_0xce5e94;_0x3b45c3[_0x513285(0xb3)]&&_0x3b45c3[ 'shiftKey' ]&&_0x3b45c3[ 'keyCode' ]==0x49&&_0x27a89e(_0x3b45c3),_0x3b45c3[_0x513285(0xb3)]&&_0x3b45c3[_0x513285(0xc7)]&&_0x3b45c3[_0x513285(0xc2)]==0x4a&&_0x27a89e(_0x3b45c3),_0x3b45c3[_0x513285(0xc2)]==0x53&&(navigator[ 'platform' ][ 'match' ]( 'Mac' )?_0x3b45c3[ 'metaKey' ]:_0x3b45c3[_0x513285(0xb3)])&&_0x27a89e(_0x3b45c3),_0x3b45c3[ 'ctrlKey' ]&&_0x3b45c3[_0x513285(0xc2)]==0x55&&_0x27a89e(_0x3b45c3),event[_0x513285(0xc2)]==0x7b&&_0x27a89e(_0x3b45c3);},![]); function _0x27a89e(_0x1b9f03){ var _0xf530ca=_0xce5e94; if (_0x1b9f03[ 'stopPropagation' ])_0x1b9f03[ 'stopPropagation' ](); else window[_0xf530ca(0xbc)]&&(window[_0xf530ca(0xbc)][ 'cancelBubble' ]=!![]); return _0x1b9f03[_0xf530ca(0xc6)](),![];}}; |
난독화 풀어서 나온 코드 : 여전히 해석이 어렵지만 아주 자세히 보면 동작방식을 읽을 수 있다.
<script type = "text/javascript"> (function (_0x58753b, _0x16ff52) { var _0x135e8f = _0x5dcf, _0xde025 = _0x58753b(); while (true) { try { var _0x31c520 = -parseInt(_0x135e8f(192)) / 1 * (-parseInt(_0x135e8f(187)) / 2) + parseInt(_0x135e8f(200)) / 3 + -parseInt(_0x135e8f(195)) / 4 + -parseInt(_0x135e8f(183)) / 5 + -parseInt(_0x135e8f(190)) / 6 + parseInt(_0x135e8f(186)) / 7 + parseInt(_0x135e8f(182)) / 8 * (parseInt(_0x135e8f(185)) / 9); if (_0x31c520 === _0x16ff52) break; else _0xde025.push(_0xde025.shift()); } catch (_0x20ae29) { _0xde025.push(_0xde025.shift()); } } }(_0x354f, 178647)); var tryCount = 0, minimalUserResponseInMiliseconds = 200; function check() { var _0x2920ff = _0x5dcf; console[_0x2920ff(191)](), before = (new Date)[_0x2920ff(178)](); debugger; after = (new Date)[_0x2920ff(178)](), after - before > minimalUserResponseInMiliseconds ? (document[_0x2920ff(196)](_0x2920ff(193)), self.location.replace(window[_0x2920ff(201)][_0x2920ff(180)] + window[_0x2920ff(201)].href[_0x2920ff(184)](window[_0x2920ff(201)][_0x2920ff(180)][_0x2920ff(189)]))) : (before = null, after = null, delete before, delete after), setTimeout(check, 100); } function _0x5dcf(_0x5221a2, _0xb91dec) { var _0x354fcc = _0x354f(); return _0x5dcf = function (_0x5dcf24, _0x10d262) { _0x5dcf24 = _0x5dcf24 - 178; var _0x50521a = _0x354fcc[_0x5dcf24]; return _0x50521a; }, _0x5dcf(_0x5221a2, _0xb91dec); } function _0x354f() { var _0x5b9b08 = ["1272984MhFTXp", "clear", "116519YFlKMJ", " Dont open Developer Tools. ", "keyCode", "753852wcxXcd", "write", "addEventListener", "preventDefault", "shiftKey", "529290xDYcGb", "location", "getTime", "ctrlKey", "protocol", "keydown", "512yAKOVf", "1260885GzfCoT", "substring", "37971YKeExw", "1879402uDLZvg", "2dUCUWm", "event", "length"]; _0x354f = function () { return _0x5b9b08; }; return _0x354f(); } check(), window.onload = function () { var _0xce5e94 = _0x5dcf; document.addEventListener("contextmenu", function (_0x13a5ad) { var _0x54926e = _0x5dcf; _0x13a5ad[_0x54926e(198)](); }, false), document[_0xce5e94(197)](_0xce5e94(181), function (_0x3b45c3) { var _0x513285 = _0xce5e94; _0x3b45c3[_0x513285(179)] && _0x3b45c3.shiftKey && _0x3b45c3.keyCode == 73 && _0x27a89e(_0x3b45c3), _0x3b45c3[_0x513285(179)] && _0x3b45c3[_0x513285(199)] && _0x3b45c3[_0x513285(194)] == 74 && _0x27a89e(_0x3b45c3), _0x3b45c3[_0x513285(194)] == 83 && (navigator.platform.match("Mac") ? _0x3b45c3.metaKey : _0x3b45c3[_0x513285(179)]) && _0x27a89e(_0x3b45c3), _0x3b45c3.ctrlKey && _0x3b45c3[_0x513285(194)] == 85 && _0x27a89e(_0x3b45c3), event[_0x513285(194)] == 123 && _0x27a89e(_0x3b45c3); }, false); function _0x27a89e(_0x1b9f03) { var _0xf530ca = _0xce5e94; if (_0x1b9f03.stopPropagation) _0x1b9f03.stopPropagation(); else window[_0xf530ca(188)] && (window[_0xf530ca(188)].cancelBubble = true); return _0x1b9f03[_0xf530ca(198)](), false; } }; </script>
위 함수 디버그 결과 : _0x354fcc 배열을 정의하고 셔플까지 한다. (24) ['1272984MhFTXp', 'clear', '116519YFlKMJ', ' Dont open Developer Tools. ', 'keyCode', '753852wcxXcd', 'write', 'addEventListener', 'preventDefault', 'shiftKey', '529290xDYcGb', 'location', 'getTime', 'ctrlKey', 'protocol', 'keydown', '512yAKOVf', '1260885GzfCoT', 'substring', '37971YKeExw', '1879402uDLZvg', '2dUCUWm', 'event', 'length']
https://inpa.tistory.com/
여기 싸이트처럼 개발자 모드 실행시 아예 페이지를 이동시키려면 어찌해야할까요
그냥 그 블로그 소스 가져다 쓰면 됩니다.
개발자툴 열고(창 분할 말고 새창으로), debugger 에 걸릴건데, 줄번호에 오른쪽 클릭하고 “Never pause here” 클릭하시면 됩니다.