有些网页一打开 F12,就会进入 debugger 状态

278 天前
 ThinkStu

这是不是网站的一种防御机制?🥲有点难受...

完整代码如下:

((function() {
    var callbacks = [],
        timeLimit = 50,
        open = false;
    setInterval(loop, 1);
    return {
        addListener: function(fn) {
            callbacks.push(fn);
        },
        cancleListenr: function(fn) {
            callbacks = callbacks.filter(function(v) {
                return v !== fn;
            });
        }
    }

    function loop() {
        var startTime = new Date();
        debugger;
        if (new Date() - startTime > timeLimit) {
            if (!open) {
                callbacks.forEach(function(fn) {
                    fn.call(null);
                });
            }
            open = true;
            window.stop();
            document.body.innerHTML = "";
        } else {
            open = false;
        }
    }
})()).addListener(function() {
    window.location.reload();
});
2150 次点击
所在节点    问与答
12 条回复
MossFox
278 天前
开发者工具里面点一下停用断点即可。
murmur
278 天前
这种都是小把戏,那种检测调试模式下某些特殊对象的也是小把戏,以前听说过一种,美化后美化前因为某些不规范的写法,会导致代码执行逻辑变更,从而达到反调试

但是这种我还没见过
tanranran
278 天前
@murmur #2 这种好强
emonc
278 天前
debugger --> contextmenu --> ignore line
estk
278 天前
支付宝官网打开调试显示招聘信息
caiqichang
278 天前
先打开开发者工具 -> deactive breakpoints ,再打开页面
loading
277 天前
感觉放水了,我一般用这个,你可以感受一下。
https://github.com/obfuscar/obfuscar
yanyao233
277 天前
@estk discord 也是
ericlgq2
277 天前
这是开发忘了把断点去掉,别问我是怎么知道的。。。
HuskyYellow
277 天前
aegon466
277 天前
这就是前端忘了去掉 debug 或者是故意留的
murmur
276 天前
@ericlgq2 你不看图的,这逻辑太简单了,检测每次函数的执行时间,如果函数执行太长,就停止所有代码,body 全清空

这不是防调试是啥

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/962757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX