美文网首页
前端反调试实现

前端反调试实现

作者: 会爬虫的小蟒蛇 | 来源:发表于2022-09-02 14:14 被阅读0次

前端反调试实现

无限Debugger

在讲无限Debugger之前首先要知道三种debugger的实现

// 方法1: 使用关键字
debugger;

// 方法2:使用eval
eval("debugger;")

// 方法3: 借助于Funciton
function a(){}

Function("debugger").call() // call() apply() bind()
a.constructor("debugger").call()
Function.constructor("debugger").call()
(function(){}.constructor("debugger").call())

// 方法4: 前三种方式交叉使用

无限debugger实现

// 方式1:while这种方式在关闭控制台时 浏览器会卡死,因为主线程阻塞
while (true){
    debugger;
}

// 方式2:定时器 setInterval 或 setTimeout (推荐)
setInterval(()=>{
    debugger;
}, 0.5)

解决方法

// 定时器型 解决方案
setInterval_ = setInterval
setInterval = function (fun, timeout){
    if(fun.toString().indexOf("debugger") == -1){
        return setInterval_(fun, timeout);
    }
}

// ob 和 Funciton型 解决方案
Function.prototype.constructor_ = Function.prototype.constructor
Function.prototype.constructor = function (){
    if(arguments === "debugger"){

    }else {
        return Function.prototype.constructor_.apply(this, arguments)
    }
}

控制台反调

禁用控制台

window.document.oncontextmenu = function(){             
    return false;   
} 
document.onkeydown = document.onkeyup = document.onkeypress = function(event) {
    var e = event || window.event || arguments.callee.caller.arguments[0];
    if (e && e.keyCode == 123) {
        e.returnValue = false;
        return (false);
    }
}

解决方法

// 进入网站前 提前打开控制台

监测控制台是否被打开

通过浏览器宽高监测

setInterval(()=>{
    if (window.outerHeight - window.innerHeight > window.outerHeight / 10){
        console.log("请不要打开控制台")
    }
}, 500)

解决方法

// 控制台单独开一个窗口

通过console.log 的 输出时机监测

// 部分浏览器不受限制,例如谷歌91版本后就修复了这一特性
var x = document.createElement("div");
Object.defineProperty(x, 'id', {
    get: function() {
        alert("请不要打开控制台");
    }
})
function use(){
    console.log(x);
    console.clear();
}
setInterval(use, 200);

内存爆破

function bp(){
    var arr = [window]
    for (var index = 0; index < arr.length; index++){
        arr.push(window.toString())
        arr.push(arr.join("="))
    }
}

var flag = false;  // 这里可以通过一些监测 或者 蜜罐, 将flag变为true

if (flag){
    bp()
}

相关文章

  • 反爬:网页反 debug 问题解决

    1. 网页反 debug 机制分析 反 debug 调试措施,是通过在代码中 添加 debugger 代码 实现,...

  • 第十天

    轮播图实现和vue调试 urls viewset serializer (前端还需要相关配置 swiper-pag...

  • iOS原生与H5相关文章

    前端调试工具 Safari 前端开发调试 iOS 完美解决方案(iPhone/iTouch 等) JavaScri...

  • 前端调试--真机环境调试

    前端调试环境搭建 前言 日常前端开发调试过程中,经常会遇到真机调试。真机调试环境搭建主要从如下几点进行讲解: 启动...

  • 前端调试

    今天分享一个超级不错的前端调试技巧,还在为前端端点调试而烦恼吗 为什么需要调试 解决bug通常要对代码进行调试,这...

  • HBuilder Android真机调试

    关于调试 难者不会,会者不难。对于调试,这句话尤其合适。无论是前端调试、Java调试、PHP调试、Python调试...

  • mock新玩法nodejs之Mountebank5分钟内搞定

    开发挡板快速实现-5分钟内搞定 解决前端开发数据调试、后端多服务交互数据调试系统间不稳定,或接口规范定好功能没有实...

  • 前端开发必备调试技巧

    前端开发必备调试技巧

  • 前端项目实现手机端调试

    实现效果 手机端浏览器实际预览前端项目 准备物料 开发工具VsCode工程:VueAndroid手机一台Andro...

  • 前端在线编辑调试工具集合

    Edit前端在线编辑调试工具集合前端在线编辑调试工具的比较 http://runjs.cn/http://code...

网友评论

      本文标题:前端反调试实现

      本文链接:https://www.haomeiwen.com/subject/vcmunrtx.html