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

chromium魔改——绕过无限debugger反调试

在进行以下操作之前,请确保已完成之前文章中提到的 源码拉取及编译 部分。

如果已顺利完成相关配置,即可继续执行后续操作。


在浏览器中实现“无限 debugger”的反调试技术是一种常见的手段,用于防止他人通过开发者工具对网页进行调试或逆向分析。这种技术的核心是利用 JavaScript 的 debugger 语句,当开发者工具打开时,debugger 会触发断点,从而阻止代码继续执行。

以下是如何实现“无限 debugger”的几种方式

使用 setInterval

setInterval(() => {
    debugger;
}, 100);

递归调用

function infiniteDebugger() {
    debugger;
    infiniteDebugger();
}
infiniteDebugger();

事件监听

document.addEventListener('keydown', (event) => {
    if (event.key === 'F12' || (event.ctrlKey && event.shiftKey && event.key === 'I')) {
        debugger;
    }
});

document.addEventListener('contextmenu', (event) => {
    debugger;
});

检测开发者工具状态

setInterval(() => {
    const start = performance.now();
    debugger;
    const end = performance.now();

    // 如果执行时间过长,说明开发者工具可能已打开
    if (end - start > 100) {
        console.clear(); // 清空控制台
        debugger; // 再次触发断点
    }
}, 500);

使用console.debug

const hook = new Error()
let num = -1
Object.defineProperty(hook, "stack", {
    get: function () {
        num += 1
        num ? debugger : ''
        return num;
    }
});
function isOpenDevTool() {
    num = -1
    console.debug(hook);
    hook.stack
    requestAnimationFrame(isOpenDevTool);
}
requestAnimationFrame(isOpenDevTool);

在了解实现原理后,我们现在的思路是让 debugger 关键字像 JavaScript 中的其他独立关键字一样,无需特定上下文即可单独执行。以下是一些可以在 JavaScript 中独立执行且不需要特定上下文的关键字示例:

true;
false;
this;
null;
undefined;
NaN;
Infinity;
-Infinity;

这些关键字在 JavaScript 中具有独立的意义和用途,我们的目标是使 debugger 关键字也能以类似的方式运行。

以下为修改路径

\src\v8\src\parsing\keywords-gen.h

我们将 debugger 关键字替换为与 null 等效的值。当然,也可以选择其他关键字,但需确保其能够独立运行,且不依赖任何参数或上下文环境。

在这里插入图片描述
修改保存之后,执行以下命编译

autoninja -C out/Default chrome

经过验证可以发现,运行 debugger 语句的效果与返回 null 是等价的。这种情况下,程序既不会抛出错误,也不会因断点而中断执行。

在这里插入图片描述

相关文章:

  • FreeRTOS同步和互斥机制以及相关API
  • 【开源】Unity 商业级引擎源码加密混淆过马甲包 Il2cpp global-metadata加密方案 Android加固IOS加固
  • Windows修改hosts文件让向日癸软件联网
  • 从开发到上线:基于 Linux 云服务器的前后端分离项目部署实践(Vue + Node.js)
  • 什么是市盈率,通俗解释清楚
  • CAN/FD CAN总线配置 最新详解 包含理论+实战(附带源码)
  • 《JVM考古现场(十六):太初奇点——从普朗克常量到宇宙弦的编译风暴》
  • matlab从pytorch中导入LeNet-5网络框架
  • 数论4 组合数
  • Java全栈面试宝典:线程安全机制与Spring Boot核心原理深度解析
  • 游戏引擎学习第202天
  • 面试算法高频01
  • PostgreSQL有回收站吗?
  • 大语言模型应用和训练(人工智能)
  • STL容器中不进行前置条件检查有可能导致不安全的操作
  • 工程画图-UML类图 组合和聚合
  • SDK中窗口调用
  • 什么是Stop The World
  • Apifox app的用法作用
  • Linux开发工具——apt
  • 帮客户做网站内容/人员优化方案怎么写
  • 网站建设好友/百度学术搜索
  • 广州购物网站建设价格/2023年第三波新冠9月
  • 直播做愛网站国外/长沙专业网站制作
  • 合肥专业做网站公司有哪些/5月疫情第二波爆发
  • 网站套模板教程/网络最有效的推广方法