js逆向之js无限debugger的原理探索

采集pc数据的时候,会遇到很多的反爬机制。今天尝试探索下如何在合适的条件下触发js的无限debugger。

执行效果

关键词解读

  • 合适的条件触发

    • 打开控制台
    • 一段js代码的执行时间比平时要长
    • 。。。
  • 无限debugger

    • setInterval 间隔1s执行一次debugger代码
我们认为合适的触发条件就是有极大的可能此代码在被非法调试

原理

这里我尝试的是监控控制台的打开,如果控制台打开,那么就执行setInterval 中的无限debugger代码。
控制台打开的监控其实是监控window.visualViewport 下的宽度和高度的变化,如果发生变化,就认为控制台是打开的。

代码

  • 原始代码

  • 混淆后
$ = ~[];
    $ = {
        ___: ++$,
        $$$$: (![] + "")[$],
        __$: ++$,
        $_$_: (![] + "")[$],
        _$_: ++$,
        $_$$: ({} + "")[$],
        $$_$: ($[$] + "")[$],
        _$$: ++$,
        $$$_: (!"" + "")[$],
        $__: ++$,
        $_$: ++$,
        $$__: ({} + "")[$],
        $$_: ++$,
        $$$: ++$,
        $___: ++$,
        $__$: ++$
    };
    $.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
    $.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
    $.$ = ($.___)[$.$_][$.$_];
    $.$($.$($.$$ + "\"" + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $._$$ + $.$$$_ + $.__ + "\\" + $.__$ + $.__$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.__ + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + (![] + "")[$._$_] + "(" + $.$$$$ + $._ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$__ + $.__ + "\\" + $.__$ + $.$_$ + $.__$ + $._$ + "\\" + $.__$ + $.$_$ + $.$$_ + "\\" + $.$__ + $.___ + "()\\" + $.$__ + $.___ + "{\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$_$ + $._$ + "\\" + $.__$ + $.$$_ + $.$$$ + ".\\" + $.__$ + $.$$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$$_ + $._$$ + $._ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $.$$_ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$$_ + $.___ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.__ + ".\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + ";\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$$$ + "(\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "<\\" + $.__$ + $.$$_ + $.$$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.__ + "\\" + $.__$ + $.$_$ + $.___ + "||\\" + $.__$ + $.$_$ + $.$$_ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$$ + "_\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "<\\" + $.__$ + $.$_$ + $.___ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.__$ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$_$ + $.___ + $.__ + "){\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + $.$$$_ + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + (![] + "")[$._$_] + "('!" + $.$$$$ + $._ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$__ + $.__ + "\\" + $.__$ + $.$_$ + $.__$ + $._$ + "\\" + $.__$ + $.$_$ + $.$$_ + "(){" + $.$$_$ + $.$$$_ + $.$_$$ + $._ + "\\" + $.__$ + $.$__ + $.$$$ + "\\" + $.__$ + $.$__ + $.$$$ + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$_ + "}()')\\" + $.__$ + $._$_ + "\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "}\\" + $.__$ + $._$_ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "\\" + $.$__ + $.___ + "}," + $.__$ + $.___ + $.___ + $.___ + ")" + "\"")())();

  • jsonp
    • 如果刚刚混淆的代码通过jsonp动态的请求到客户端,整个程序会更复杂。

总结

  • 上面只是举了打开控制台的时候触发debugger的机制,当然,如果能判断代码是被非法调试,我们也可以创建大量无用对象,卡死对方的控制台。

你可能感兴趣的:(python爬虫)