Chrome 反调试之检测 DevTools

0x00 前言 前言的前言 笔者一直认为反调试不是银弹,它只能有限地提升利用成本,并没有本质上的改善 最近的一个项目里,不得不引入一些反调试的手段。因此,笔者对近些年来的 Chrome 反调试技术进行了回顾与测试。 在比较流行的反调试技术里,经常提到的有以下几类: 通过死循环 debugger 让用户无法正常调试 通过 HTML Element 的 id 属性检测 devtools 是否被开启 通过正则表达式的 toString() 方法检测 devtools 是否被开启 方法 1 依旧是简单有效的手段。由于过于简单,容易被发现,一般配合代码混淆以及 eval() 等动态代码执行特性实现。这种方式也容易违反 CSP 。如果没有结合动态代码执行,这个方式很容易被发现并且绕过。 方法 2、3 很不幸,在最新的 Chrome 中已经无法利用。关于 2 ,有个 Chromium 的 issue 记录了这个问题以及它的修复方式。关于 3, 笔者暂时没有没有找到 Chrome 的修复记录。 出于上述原因,笔者不得不找到更多的反调试实现。经过一番测试,找到了一个通过 sourcemap 检测 devtools 的方法。 0x01 SourceMap 检测 DevTools 的实现 关于 SourceMap 及其详细用途可参考 Mozilla 的介绍文档 。 为了加快下载于加载速度,现代网页的 JS 文件普遍被最小化(minified)处理过,去除了不必要的元素,简化了实现,甚至重命名一些变量/函数,提换成更简短的命名方式。这种抠到家的方式,对于开发人员的 debug 和 troubleshooting 是很不利,开发人员自己都读不懂这些 JS 文件。 因此,SourceMap 诞生了。 ...

May 6, 2023 · 1 min · 168 words · SYM01