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

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js逆向之js无限debugger的原理探索相关的知识,希望对你有一定的参考价值。

采集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的机制,当然,如果能判断代码是被非法调试,我们也可以创建大量无用对象,卡死对方的控制台。

以上是关于js逆向之js无限debugger的原理探索的主要内容,如果未能解决你的问题,请参考以下文章

2021-11-29JS逆向之J简壁纸

fiddler替换修改后的js文件绕过无限debugger

yjj某数后缀生成(1-15,js逆向)

瑞数维普期刊JS逆向详细流程及4000字爬虫总结

探索 Vue.js 响应式原理

瑞数维普期刊JS逆向4000字详细流程_1_获取接口签名