网页反调试总结
网站除了对代码进行加密进行保护,还时常携带了反调试手段。例如无限debugger;内存爆破,控制台检测。
相关无限debugger进行反调试阻挠请参考上文,不在此过多赘述。本节主要学习内存爆破原理与绕过思想、控制台检测原理与绕过,
内存爆破
通俗来理解是通过“特殊手段”不断开辟新内存,造成内存存储不足,从而使程序或电脑宕机。内存爆破并没有一种具体的实现方式,如果实现了内存爆破的效果都可以称之为内存爆破。
当我们在编程的时候,每当声明一个变量、初始化一个函数。都会在开辟一块内存。
内存爆破实现的流程
检测环境
实现内存爆破
此处的环境为泛指,当与正常用户访问相悖或有差异均可以以此为为“入口”,开始内存爆破
内存爆破常见入口点
hook检测
监听函数情况,当函数被hook,且未完善的伪装hook时。
代码格式化检测
正常情况下,代码被压缩成一行或几行。但在运行时不符。
浏览器指纹检测
当运行环境与所规定的环境不同时
控制台检测
监听控制台,当控制台被打开时。
内存爆破特征
- 检测环境
- 与预期环境不符合,死循环;符合,正常退出
1 |
// 内存爆破示例代码 |
在浏览器中执行内存爆破示例代码, 如下图所示
符合预期,正常情况下:
不符合,触发内存爆破
过了一小会,你就会发现,崩溃了!!!
内存爆破总结
内存爆破,更像一种陷阱。如果触发了该陷阱,有了这个“入口”,便开始内存爆破。
如何绕过内存爆破?
由于内存爆破的“入口”并不一致,所以内存爆破也并没有通用的解决方案。可提供的思路为“阻断”进入内存爆破,便为绕过。
例如
hook检测,伪装hook原型链即可
代码格式化检测,在检测处进行处理即可
浏览器指纹检测,伪装浏览器指纹,保持一致即可
控制台检测,处理检测代码即可。
控制台检测原理与绕过
不知你也是否和我一样遇见过这种情况,当打开控制台时。浏览器就直接崩溃,获取其他情况。
控制台检测原理
检测原理为与“正常”浏览网站有差异
当打开控制台的时候,会触发如下两种情况
- debugger可执行了
- div会自动获取id属性
第一种也就是我们常说的debugger调试干扰,
只要控制台打开,debugger便会执行。一直相关联的无限deugger便会随之而来(如果有)
第二种,当浏览器有使用document.createElement
创建标签时,会创建该标签。当控制台打开会自动获取其id属性。
如果在绑定他,在对他进行内存爆破等操作。那么就。。。
绕过
滞空该标签即可
pass