Js逆向教程-14反调试
一、检测是否在调试
- 键盘监听(F12)
- 检测浏览器的高度插值
- 检测开发者人员工具变量是否为true
- 利用console.log调用次数
- 利用代码运行的时间差
- 利用toString
- 检测非浏览器
二、显性
2.1 debugger:
function xx() {
debugger;
console.log(1);
}
function xuhss() {
xx();
}
xuhss()
代码会在调试的时候段下来
跳过Debugger的方式
2.1.1非虚拟机
非虚拟机的方式不会跳转 到一个vm的页面
方式一:
通过将editbreakpoint设置为false 可以禁用这个调试
方式二:
跳过代码
利用chrome插件
- Fiddler(代理替换)
- 油猴插件(需要自己写代码 )
2.1.2虚拟机(eval() Function())
在eval里面运行debugger.
var aaa =Function.prototype.constructor("debugger;")
通过hook方式,将运行的函数设为空就可以跳过debugger了
Function.prototype.constructor = function(){}
2.2 死循环
- 循环语句
- 无限递归
- 两个方法互相调用
- 计时器
( 打开页面 写历史记录卡死)
三、隐形(暗装)
发现你调试之后 引入错误的逻辑。
将你的预期值和实际值进行比较,如果不一样,就是这种debugger 只能通过浏览器调用的堆栈区分出正确的逻辑
最好的方式就是不要被识别出来调试,可以通过下hook解决。