摘要:实际使用中,为了防止反Eval的代码逻辑被看到,当然不会使用console.log提示,可以换作return错误的值之类。还要将代码进行混淆加密,比如用JShaman进行JS代码混淆后,上面的示例可以变成难以阅读和理解的代码形式:
JavaScript奇技淫巧:反eval调试
Eval的正规用法是执行一段JS代码。
但它做为代码分析者的手段,也经常被用于调试分析:用eval运行某些函数,获得返回值、了解代码执行结果。
如何反eval调试、防止代码被eval执行?
我们可以在函数中抛出一个错误并捕获其堆栈跟踪,进而来检查调用栈中是否包含eval,便可识别是否是被eval调试,并可做出相应的操作。
例程:
function checkIfEvalled {try {throw new Error;} catch (e) {console.log(e.stack);if (e.stack.includes('eval')) {console.log("This function might have been called by eval.");} else {console.log("This function was not called by eval.");}}}// 正常调用checkIfEvalled;// 使用eval调用eval('checkIfEvalled;');执行效果:
实际使用中,为了防止反Eval的代码逻辑被看到,当然不会使用console.log提示,可以换作return错误的值之类。还要将代码进行混淆加密,比如用JShaman进行JS代码混淆后,上面的示例可以变成难以阅读和理解的代码形式:
注意:
这个方式,可用于浏览器或Node.JS中检测eval。但在某些特殊的运行环境中,例如:微信、支付宝等H5小游戏中的代码,是不可以使用的,因为这些场景中经常也是使用eval来执行代码的,阻止了eval执行会导致错误。如下图:
但这似乎也说明用此方式反eval确实是够强大的。
本文节选自开源电子书《JavaScript奇技淫巧》
《JavaScript奇技淫巧》目录
JavaScript奇技淫巧:防删水印 1JavaScript奇技淫巧:图片加密 5JavaScript奇技淫巧:复制陷阱 12JavaScript奇技淫巧:禁止页面分析 15JavaScript奇技淫巧:Html加密 17JavaScript奇技淫巧:隐秘执行 22JavaScript奇技淫巧:Hook与反Hook 26JavaScript奇技淫巧:链接劫持 31JavaScript奇技淫巧:揭秘jjencode 35JavaScript奇技淫巧:Ajax拦截 40JavaScript奇技淫巧:无效断点 48JavaScript奇技淫巧:时间密码 53JavaScript奇技淫巧:设备指纹 58JavaScript奇技淫巧:AST解释器 62JavaScript奇技淫巧:隐写术 70JavaScript奇技淫巧:隐形字符 77JavaScript奇技淫巧:数值的7种写法 81JavaScript奇技淫巧:详解Eval加密 88JavaScript奇技淫巧:禁止后退 96JavaScript奇技淫巧:加密反调试 98JavaScript奇技淫巧:花样赋值 103JavaScript奇技淫巧:Eval的未公开用法 107JavaScript奇技淫巧:终极Eval加密 109JavaScript奇技淫巧:自动下载 112JavaScript奇技淫巧:防复制 115JavaScript奇技淫巧:从词法分析到混淆加密 122JavaScript奇技淫巧:操控URL 131JavaScript奇技淫巧:彩色命令行 133JavaScript奇技淫巧:变速齿轮 139JavaScript奇技淫巧:按键精灵 144JavaScript奇技淫巧:6种alert 150JavaScript奇技淫巧:try&catch加密 155JavaScript奇技淫巧:代码压缩&加密 159JavaScript奇技淫巧:加密字库 162JavaScript奇技淫巧:网站防火墙 173JavaScript奇技淫巧:Lisp 2 JS 177JavaScript奇技淫巧:混淆加密技术探究 190JavaScript奇技淫巧:清理无效代码 227JavaScript奇技淫巧:debugger拦截 229JavaScript奇技淫巧:执行“二进制”代码 234JavaScript奇技淫巧:32进制加密 237等... ...来源:修丹道的程序猿
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!