0%

网页调试干扰总结

网页反调试总结

网站除了对代码进行加密进行保护,还时常携带了反调试手段。例如无限debugger;内存爆破,控制台检测。

相关无限debugger进行反调试阻挠请参考上文,不在此过多赘述。本节主要学习内存爆破原理与绕过思想、控制台检测原理与绕过,

内存爆破

通俗来理解是通过“特殊手段”不断开辟新内存,造成内存存储不足,从而使程序或电脑宕机。内存爆破并没有一种具体的实现方式,如果实现了内存爆破的效果都可以称之为内存爆破。

当我们在编程的时候,每当声明一个变量、初始化一个函数。都会在开辟一块内存。

内存爆破实现的流程

检测环境

实现内存爆破

此处的环境为泛指,当与正常用户访问相悖或有差异均可以以此为为“入口”,开始内存爆破

内存爆破常见入口点

hook检测

监听函数情况,当函数被hook,且未完善的伪装hook时。

代码格式化检测

正常情况下,代码被压缩成一行或几行。但在运行时不符。

浏览器指纹检测

当运行环境与所规定的环境不同时

控制台检测

监听控制台,当控制台被打开时。

内存爆破特征

  1. 检测环境
  2. 与预期环境不符合,死循环;符合,正常退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 内存爆破示例代码
h = function (a) {
// 检测
if (a > 1) {
console.log("正常执行")
return new Array(1, 2);
} else {
// 进入陷阱
while (!![]) {
c = new Array().push(void 0);
;
console.log("内存爆破, 危!!!");
}
}
}

在浏览器中执行内存爆破示例代码, 如下图所示

符合预期,正常情况下:

不符合,触发内存爆破

过了一小会,你就会发现,崩溃了!!!

内存爆破总结

内存爆破,更像一种陷阱。如果触发了该陷阱,有了这个“入口”,便开始内存爆破。

如何绕过内存爆破?

由于内存爆破的“入口”并不一致,所以内存爆破也并没有通用的解决方案。可提供的思路为“阻断”进入内存爆破,便为绕过。

例如

hook检测,伪装hook原型链即可

代码格式化检测,在检测处进行处理即可

浏览器指纹检测,伪装浏览器指纹,保持一致即可

控制台检测,处理检测代码即可。

控制台检测原理与绕过

不知你也是否和我一样遇见过这种情况,当打开控制台时。浏览器就直接崩溃,获取其他情况。

控制台检测原理

检测原理为与“正常”浏览网站有差异

当打开控制台的时候,会触发如下两种情况

  1. debugger可执行了
  2. div会自动获取id属性

第一种也就是我们常说的debugger调试干扰,

只要控制台打开,debugger便会执行。一直相关联的无限deugger便会随之而来(如果有)

第二种,当浏览器有使用document.createElement创建标签时,会创建该标签。当控制台打开会自动获取其id属性

如果在绑定他,在对他进行内存爆破等操作。那么就。。。

绕过

滞空该标签即可

pass