freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

web逆向 | 常见的反调试方式和绕过细谈
2025-03-06 11:07:30

Web 逆向|前端反调试方式及绕过细谈

在 Web 逆向中,网站通常使用各种方式来检测调试工具并进行反调试操作。以下是常见的 反调试技术相应的破解方法

1.window对象

反调试方式

  • window.close()→ 关闭当前页面,防止调试

  • 破解方案

    window.close = function() { console.log("阻止 window.close()"); };
    

2.history对象

反调试方式

  • history.back()→ 返回上一页

  • history.forward()→ 前进一页

  • history.go(n)→ 跳转指定页面

  • 破解方案

    history.back = function() { console.log("阻止 history.back()"); };
    history.forward = function() { console.log("阻止 history.forward()"); };
    history.go = function() { console.log("阻止 history.go()"); };
    

3.console对象

反调试方式

  • console.log()/console.table()→ 通过输出内容检测 DevTools

  • console.clear()→ 清除控制台内容

  • 破解方案

    console.clear = function() { console.log("console.clear 被拦截"); };
    console.log = function() { console.warn("console.log 被拦截"); };
    console.table = function() { console.warn("console.table 被拦截"); };
    

4.location对象

反调试方式

  • location.href = "URL"→ 页面重定向

  • location.reload()→ 刷新页面,使 Hook 失效

  • location.replace("URL")→ 替换当前页面

  • location.assign("URL")→ 加载新页面

  • 破解方案

    location.reload = function() { console.log("阻止 location.reload()"); };
    location.replace = function() { console.log("阻止 location.replace()"); };
    location.assign = function() { console.log("阻止 location.assign()"); };
    

5.setInterval&setTimeout

反调试方式

  • window.setInterval(func, delay)→ 反复执行func

  • window.setTimeout(func, delay)→ 延迟func执行

  • 破解方案

    let _setInterval = window.setInterval;
    let _setTimeout = window.setTimeout;
    
    window.setInterval = function(func, delay) {
        if (func.toString().includes('debugger')) return;
        return _setInterval(func, delay);
    };
    
    window.setTimeout = function(func, delay) {
        if (func.toString().includes('debugger')) return;
        return _setTimeout(func, delay);
    };
    

6.debugger关键字

反调试方式

  • debugger;会在 DevTools 打开时暂停执行

  • 解决方案:
    1、在开发者工具中禁用断点(Chrome的Deactivate breakpoints)。
    2、使用代码注入或Hook技术绕过debugger语句。

  • 破解方案

    function removeDebugger() {
        let scriptList = document.querySelectorAll("script");
        scriptList.forEach(script => {
            script.innerHTML = script.innerHTML.replace(/debugger;/g, "");
        });
    }
    removeDebugger(); //移除Debugger()
    

7. 开发者工具 (DevTools) 检测

反调试方式

  • 检测window.outerHeight&window.outerWidth

    setInterval(() => {
        if (window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200) {
            alert("调试模式检测到");
            window.location.href = "about:blank";
        }
    }, 1000);
    
  • 破解方案

# web安全 # 逆向工程 # 逆向分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录