js逆向反调试的基本 bypass
反调试的基本检测方法
1、无限debugger 技术 (防止你断点 反编译)
2、键盘监听(右键 、 f12的禁止)
3、检测是否是浏览器
4、检测是否启用了管理员模式的(检测是不是 true)
绕过技巧:
对于没有联系的简单发现的单断点无限debug :
1、无断点模式设置
2、禁止局域断点
3、设置条件断点
高级 :
4、文件替换
5、burp规则过滤
6、hook脚本绕过
单断点: Title
单击f12 直接进入到 debugger模式 之后就是无限的停止在这个页面
使用方法1 :
使用这个
debug 绕过了 但是缺点就是我们也不能使用断点了
第二种 2、
优点是 还可以再别的函数上进行断点 缺点就是对于有联系的断点来说很麻烦
第三方法 : 和第二种差不多 :
这个的意思其实就是 用不在此处进行断点
高级 : Scrape | Movie
文件替换 :
我们打开的时候会出现 自动断点的情况 其实就是debug 函数导致的 那这个是不是可以使用本地的文件进行替换 ???因为js是前端的东西 是可以进行修改的
操作 :1、
我的是edge 浏览器 所以可能会有些不同 记录下debug的位置
debugger ;console.log("debugger")
说明现在这个js就是我们本地的了 我们可以进行修改
修改 运行
发现不止一个 waf 上面的操作
然后重新开始就绕过了
burp规则过滤
配置上规则就行了
hook脚本:
burp一般不常用 因为来回换代理太麻烦了
下载这个篡改猴 除了 edge 其他的浏览器需要魔法才能访问这个
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 2025-01-12
// @description 监控Function构造函数调用,并拦截包含'debugger'语句的函数定义,替换为日志记录
// @author xiaodisec
// @match https://jishulink.com/video/c246316
// @icon https://www.google.com/s2/favicons?sz=64&domain=jishulink.com
// @grant none
// ==/UserScript==// 立即执行函数表达式,返回一个清理函数,用于在必要时恢复Function.prototype.constructor
const cleanup = (function () {'use strict';// 保存原始的Function构造函数const originalConstructor = Function.prototype.constructor;// 检查Function.prototype.constructor是否可写if (typeof Object.getOwnPropertyDescriptor(Function.prototype, 'constructor').writable === 'boolean' &&!Object.getOwnPropertyDescriptor(Function.prototype, 'constructor').writable) {console.error('Function.prototype.constructor is not writable. Cannot hook the constructor.');return function () {};}// 重写Function构造函数Function.prototype.constructor = function (...args) {console.log(`Function constructor called on page ${location.href} with arguments:`, args);if (args.length && args[0].includes("debugger")) {console.warn(`Attempt to use 'debugger' in Function constructor intercepted on page ${location.href}!`);args[0] = args[0].replace(/debugger/g, "console.log('debugger intercepted');");// 这里需要返回一个函数实例,而不是直接返回,否则会导致函数定义失败return originalConstructor.apply(this, args);}return originalConstructor.apply(this, args);};console.log("Function.prototype.constructor is now hooked!");// 返回清理函数,用于恢复原始的Function构造函数return function () {Function.prototype.constructor = originalConstructor;console.log("Function.prototype.constructor has been restored.");};
})();// 在脚本卸载或页面卸载时调用清理函数
window.addEventListener('unload', function () {cleanup();
});
分享一个 解无限debug的脚本
启用起来
https://jishulink.com/video/c246316
目标web 当然如果你想测试其他的web 可以改指向的web
当我们不启用脚本时
播放视频时点击 f12会触发无限debug
直接bypass了