当前位置: 首页 > article >正文

JavaScript常见反调试手段

  1. 自动跳转空白页:

    onMounted(() => {
      setInterval(() => {
        const screenWidth = window.screen.width
        const innerWidth = window.innerWidth
        const screenHeight = window.screen.height
        const innerHeight = window.innerHeight
        //如果窗口外部宽度-内部宽度大于200,或者外部高度-内部高度大于200,就跳转到about:blank
        if (screenWidth - innerWidth > 200 || screenHeight - innerHeight > 200) {
          // 重定向到空白页,或者清空页面内容
          window.location.href = 'about:blank'
          // document.body.innerHTML = '请勿调试'
        }
      }, 500)
    })
    
  2. 禁用鼠标右键,F12、ctrl + s 等快捷键:

    const preventCtrl = (e) => {
        if (e.keyCode === 123) {
            // F12
            e.preventDefault()
            return false
        } else if (e.keyCode === 17) {
            // ctrl
            document.onkeydown = preventS
            return false
        }
        return true
    }
    
    const preventS = (e) => {
        if (e.keyCode === 123 || e.keyCode === 83) {
            // s,防止ctrl + s
            e.preventDefault()
            return false
        }
        return true
    }
    
    const nopreventS = (e) => {
        if (e.keyCode === 17) {
            document.onkeydown = preventCtrl
        }
    }
    
    // 添加在App.vue中
    onMounted(() => {
        document.onkeydown = preventCtrl
        document.onkeyup = nopreventS
        // 鼠标右键
        document.oncontextmenu = (e) => {
            e.preventDefault()
        }
    }, 500)
    
  3. 无限debugger:

    const checkDebugger = () => {
      const d = new Date().getTime()
      // 自动创建临时脚本
      Function('debugger')()
      const dur = Date.now() - d
      return dur >= 5
    }
    
    const breakDebugger = () => {
      if (checkDebugger()) {
        breakDebugger()
      }
    }
    
    
    // 添加在App.vue中
    onMounted(() => {
      setInterval(breakDebugger, 500)
    })
    
  4. 内存爆破:

    onMounted(() => {
        // 最终导致页面卡死无响应
        setInterval(() => {
            const startTime = new Date().getTime()
            debugger
            const endTime = new Date().getTime()
            const stack = []
            if (endTime - startTime > 100) {
                for (;;) {
                    stack.push(this)
                }
            }
        }, 500)
    })
    
  5. 无限清除控制台:

    onMounted(() => {
        setInterval(() => console.clear(), 500)
    }) 
    
  6. 无限弹框:

    onMounted(() => {
      setInterval(() => {
        const c = new RegExp('1')
        c.toString = () => {
          alert('检测到调试')
          return '检测到调试'
        }
        console.log(c)
      }, 500)
    })
    

http://www.kler.cn/a/292230.html

相关文章:

  • 进程信号
  • C++:基于红黑树封装map和set
  • node对接ChatGpt的流式输出的配置
  • MYSQL 精通索引【快速理解】
  • HTML5实现俄罗斯方块小游戏
  • 基于OpenCV的图片人脸检测研究
  • 第10讲 后端2
  • Elastic Stack-ES集群常用的API
  • 【重学 MySQL】十二、SQL 语言的规则与规范
  • 认识爬虫技术
  • Rust多线程编程概述
  • 爬虫IP池推荐
  • 宠物空气净化器是智商税吗?希喂、IAM、范罗士哪款除毛效果更好?
  • FLTRNN:基于大型语言模型的机器人复杂长时任务规划
  • 深度学习基础--监督学习
  • 如何编写测试用例?
  • C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进)
  • 【FreeRTOS】内存管理
  • bug“医典”
  • Prometheus与Grafana入门:从安装到基础监控的完整指南
  • 数字政务行业ITSM案例分析报告
  • Spring Task
  • 基于BiLSTM-CRF的医学命名实体识别研究(下)模型构建
  • ITK-重采样
  • conda迁移windows虚拟环境到linux
  • React应用中的状态管理:Redux vs Context API