JavaScript奇淫技巧:反调试 |
您所在的位置:网站首页 › js代码调试原理图 › JavaScript奇淫技巧:反调试 |
0
分享至
用微信扫码二维码 分享至好友和朋友圈 JavaScript奇淫技巧:反调试 本文,将分享几种JS代码反调试技巧,目标是:实现防止他人调试、动态分析自己的代码。 检测调试,方法一:用console.log检测 代码: var c = new RegExp ("1");c.toString = function () {alert("检测到调试")console.log (c);原理: 当console.log输出调试信息时,会将非字符串类型数据转成字符串,于是通过接管toString函数,判断是否有这样的行为,而如果没有打开调试窗口,即不会有console.log输出,从而识别是否于处调试状态。 运行效果: 检测调试,方法二、通过代码执行时间检测 代码: var startTime = new Date ();debugger;var endTime = new Date ();var isDev = endTime-startTime> 100;if (isDev){alert("检测到调试")原理: 在代码不同语句间加入debuger指令,debugger会使调试模式暂停,那么暂停将造成延迟。 通过检测延迟前后果的时间值,从而判断是否发生了延时,如果发生,则表达处于调试状态。 运行效果: debugger触发暂停: 检测到调试: 反调试手段 检测到调试又该如何呢? 反调试方法一、无限debugger 一般情况下,可以用无限循环的debugger,使不停的暂停代码执行,使调试无法进行。 如: var c = new RegExp ("1");c.toString = function () {alert("检测到调试")setInterval(function(){debugger},1000);console.log (c);运行效果: 反调试方法二、内存耗尽 debugger方法虽然效果不错,但太过直观,反制效果也过去温柔。 另有一种“内存耗尽”的方式,会更隐藏、更强大,如: var startTime = new Date ();debugger;var endTime = new Date ();var isDev = endTime-startTime> 100;var stack = [];if (isDev){while(true){stack.push(this);console.log(stack.length,this)运行效果: 代码运行造成的内存占用会越来越大,很快会使浏览器崩溃,如下图: JS代码加密 上述几种方法,已经达到了反调试的效果,但如果他人查看代码,也可能被找出检测功能并删去。 为了防止反调试功能被剔除,我们可以对JS代码进行混淆加密。 例如本文第一段代码: var c = new RegExp ("1");c.toString = function () {alert("检测到调试")console.log (c);代码功能很清晰,使用JShaman进行混淆加密: JShaman是专业且强力的JS代码混淆加密工具混淆加密后的代码,将成为: 这样的代码,将很难理解其功能,也就可以防止代码被修改。 其它的JS功能代码,同样可以使用JShaman进行混淆加密,最终使用混淆加密后的安全代码。 特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。 Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services. /阅读下一篇/ 返回网易首页 下载网易新闻客户端 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |