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)
    })
    
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风於尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值