JS 调试/反调试
2024年10月1日大约 1 分钟
todo 埋点 https://www.bilibili.com/video/BV1KhSyYNEzQ/
大前端时代:
Web 前端
移动端 IOS/Android 开发
桌面端 windows/Mac
- VSCode => eletron => 跨平台 => Mac/Windows/Linux
其他平台 穿戴设备/车载系统(智能汽车)/VR/AR/...
web3
反调试
原理
- 控制台特征判断控制台是否被打开,显示正常内容是否显示
- 通过 js 的内置函数进行无限 debugger,干扰调试过程
可用操作
- 页面窗口大小检测
console.log打印检测toString()检测setInterval和setTimeout事件判断eval执行debuggerconstructor构造函数执行debuggerFunction构造函数执行debugger- 调用
windows的内置方法如window.close()关节界面和window.history.back()页面回退
e.g.
// 检测时间差
function consoleOpenCallback2() {
window.close();
}
setInterval(function () {
const before = new Date();
/* 新版 chrome 禁用了这种命令调用方式:
* Uncaught EvalError:
* Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive:
* "script-src chrome://resources chrome://webui-test 'self'".
*/
(function () {}).constructor("debugger")();
// debugger;
const after = new Date();
const cost = after.getTime() - before.getTime();
if (cost > 100) {
// consoleOpenCallback2();
console.log("window.close()");
}
}, 1000);// 进行定时器加构造器,达到无限 debugger
$(function() {
setInterval(function() {
a();
}, 4E3);
var a = function() {
function a(c) {
(function() {}).constructor("debugger")();
// a(++c); // 放开后,浏览器会卡死!
}
try {
a(0);
} catch(d) {}
}
})