前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >JavaScript黑科技:反Eval调试

JavaScript黑科技:反Eval调试

原创
作者头像
用户8703799
发布2024-11-29 09:17:21
发布2024-11-29 09:17:21
11500
代码可运行
举报
文章被收录于专栏:javascript技术javascript技术
运行总次数:0
代码可运行

Eval的正规用法是执行一段JS代码。

但它做为代码分析者的手段,也经常被用于调试分析:用eval运行某些函数,获得返回值、了解代码执行结果。

如何反eval调试、防止代码被eval执行?

我们可以在函数中抛出一个错误并捕获其堆栈跟踪,进而来检查调用栈中是否包含eval,便可识别是否是被eval调试,并可做出相应的操作。

例程:

代码语言:javascript
代码运行次数:0
复制
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奇技淫巧》,此书向您分享一系列新奇、有趣、有技术含量的,特别是很多侧重于JS代码安全的编程技术,十分推荐JavaScript程序员阅读。

获取地址:https://github.com/w2sft/JavaScript-diabolic-tricks-and-wicked-craft

目录:

代码语言:javascript
代码运行次数:0
复制
JavaScript奇技淫巧:防删水印	1
JavaScript奇技淫巧:图片加密	5
JavaScript奇技淫巧:复制陷阱	12
JavaScript奇技淫巧:禁止页面分析	15
JavaScript奇技淫巧:Html加密	17
JavaScript奇技淫巧:隐秘执行	22
JavaScript奇技淫巧:Hook与反Hook	26
JavaScript奇技淫巧:链接劫持	31
JavaScript奇技淫巧:揭秘jjencode	35
JavaScript奇技淫巧:Ajax拦截	40
JavaScript奇技淫巧:无效断点	48
JavaScript奇技淫巧:时间密码	53
JavaScript奇技淫巧:设备指纹	58
JavaScript奇技淫巧:AST解释器	62
JavaScript奇技淫巧:隐写术	70
JavaScript奇技淫巧:隐形字符	77
JavaScript奇技淫巧:数值的7种写法	81
JavaScript奇技淫巧:详解Eval加密	88
JavaScript奇技淫巧:禁止后退	96
JavaScript奇技淫巧:加密反调试	98
JavaScript奇技淫巧:花样赋值	103
JavaScript奇技淫巧:Eval的未公开用法	107
JavaScript奇技淫巧:终极Eval加密	109
JavaScript奇技淫巧:自动下载	112
JavaScript奇技淫巧:防复制	115
JavaScript奇技淫巧:从词法分析到混淆加密	122
JavaScript奇技淫巧:操控URL	131
JavaScript奇技淫巧:彩色命令行	133
JavaScript奇技淫巧:变速齿轮	139
JavaScript奇技淫巧:按键精灵	144
JavaScript奇技淫巧:6种alert	150
JavaScript奇技淫巧:try&catch加密	155
JavaScript奇技淫巧:代码压缩&加密	159
JavaScript奇技淫巧:加密字库	162
JavaScript奇技淫巧:网站防火墙	173
JavaScript奇技淫巧:Lisp 2 JS	177
JavaScript奇技淫巧:混淆加密技术探究	190
JavaScript奇技淫巧:清理无效代码	227
JavaScript奇技淫巧:debugger拦截	229
JavaScript奇技淫巧:执行“二进制”代码	234
JavaScript奇技淫巧:32进制加密 237
等... ...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何反eval调试、防止代码被eval执行?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档