反反调试原理及解决方法

sojosn

格式化检测:

一般原理

1.匹配长度  length

2.正则匹配 new RegExp

解决方法:

一,修改代码

搜索关键词,下段并且找到关键函数

1.恢复匹配的那段js代码

2.修改函数的返回值  直接取反      !返回值

二,hook
方法名 =function(){return '压缩的原方法'}
1.保存原来的函数
RegExp.prototype.test_ =RegExp.prototype.test;
2.替换原函数
RegExp.prototype.test=function(){
    3.执行原函数
    var a=RegExp.prototype.test_.apply(this,arguments)
    return !a;

}
4.保护原函数
RegExp.prototype.test.toString =RegExp.prototype.test_.toString;

debugger:

原理:

eval函数去执行字符串

var a = eval("debugger;function xx(){return 2};xx()")

Function 函数返回一个方法,等待执行a

var a = Function("console.log(1)")

解决方法:

1,修改源代码

2,hook

Function.prototype.constructor_=Function.prototype.constructor;

Function.prototype.constructor =function(a){
//把传进来的字符串中的debugger替换为空
    a = a.replace("debugger",'');
    return Function.prototype.constructor_(a);
}

Function.prototype.constructor.toString =Function.prototype.constructor_.toString;

//保护原函数

 

Blob   内存对象

禁止控制台调试

原理:

设置一个定时器清空控制台

setInterval('console.clear()',1000)

把输出置空

console.log = function(){}

解决方法:

提前HOOK 保存console

监测调试 

 基于时间差函数去判断是否被调试

hook 时间函数 Date

基于DOM去检查

1.一些快捷键

2.tostring 函数是否被使用

3.窗口大小变化   (单独打开调试窗口解决)

基于控制台API

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值