采集pc数据的时候,会遇到很多的反爬机制。今天尝试探索下如何在合适的条件下触发js的无限debugger。
执行效果
关键词解读
-
合适的条件触发
- 打开控制台
- 一段js代码的执行时间比平时要长
- 。。。
-
无限debugger
- setInterval 间隔1s执行一次debugger代码
我们认为合适的触发条件就是有极大的可能此代码在被非法调试
原理
这里我尝试的是监控控制台的打开,如果控制台打开,那么就执行setInterval 中的无限debugger代码。
控制台打开的监控其实是监控window.visualViewport 下的宽度和高度的变化,如果发生变化,就认为控制台是打开的。
代码
- 原始代码
<script>
var width = window.visualViewport.width;
var height = window.visualViewport.height;
setInterval(function () {
var new_width = window.visualViewport.width;
var new_height = window.visualViewport.height;
if(new_width<width||new_height<height){
eval('!function(){debugger}()')
}
},1000)
</script>
- 混淆后
$ = ~[];
$ = {
___: ++$,
$$$$: (![] + "")[$],
__$: ++$,
$_$_: (![] + "")[$],
_$_: ++$,
$_$$: ({} + "")[$],
$$_$: ($[$] + "")[$],
_$$: ++$,
$$$_: (!"" + "")[$],
$__: ++$,
$_$: ++$,
$$__: ({} + "")[$],
$$_: ++$,
$$$: ++$,
$___: ++$,
$__$: ++$
};
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$($.$$ + "\"" + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $._$$ + $.$$$_ + $.__ + "\\" + $.__$ + $.__$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.__ + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + (![] + "")[$._$_] + "(" + $.$$$$ + $._ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$__ + $.__ + "\\" + $.__$ + $.$_$ + $.__$ + $._$ + "\\" + $.__$ + $.$_$ + $.$$_ + "\\" + $.$__ + $.___ + "()\\" + $.$__ + $.___ + "{\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$$ + "(\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "<\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "||\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "<\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "){\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + (![] + "")[$._$_] + "('!" + $.$$$$ + $._ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$__ + $.__ + "\\" + $.__$ + $.$_$ + $.__$ + $._$ + "\\" + $.__$ + $.$_$ + $.$$_ + "(){" + $.$$_$ + $.$$$_ + $.$_$$ + $._ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$__ + $.$$$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + "}()')\\" + $.__$ + $._$_ + "\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "}\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "}," + $.__$ + $.___ + $.___ + $.___ + ")" + "\"")())();
- jsonp
- 如果刚刚混淆的代码通过jsonp动态的请求到客户端,整个程序会更复杂。
总结
- 上面只是举了打开控制台的时候触发debugger的机制,当然,如果能判断代码是被非法调试,我们也可以创建大量无用对象,卡死对方的控制台。