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奇技淫巧》GitHub - w2sft/JavaScript-diabolic-tricks-and-wicked-craft: 一本新奇、有趣、有技术含量的JavaScript编程技术集锦书籍。一本新奇、有趣、有技术含量的JavaScript编程技术集锦书籍。. Contribute to w2sft/JavaScript-diabolic-tricks-and-wicked-craft development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/w2sft/JavaScript-diabolic-tricks-and-wicked-craft

此书向您分享一系列新奇、有趣、有技术含量的,特别是很多侧重于JS代码安全的编程技术,十分推荐JavaScript程序员阅读。

《JavaScript奇技淫巧》目录

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
等... ...

 


自创一种前端语言,能否替代js,以实现代码加密?-优快云博客文章浏览阅读403次,点赞4次,收藏9次。比如:我们能否自己开发一种前端浏览器语言,取代js(将js代码,转化为自己独特的语言,从而让他人看不懂),以此实现变相的js代码加密。,防止代码被分析、复制、盗用,还是远远不及js混淆加密工具的(jshaman、jsjiami.online等正统js混淆加密工具)。如果大量的这种代码出现在前端,替代js,实现各种功能,貌似是具备了加密的效果。或者有人会说,如果livescript代码它没有还原为js,而是直接执行,可能吗?由于能被轻易还原为js代码,所以,并不具备很强的加密效果。等进行js代码混淆加密。https://blog.youkuaiyun.com/w2sft/article/details/143381940?spm=1001.2014.3001.5502前端js中如何保护密钥?_js代码隐藏密钥-优快云博客文章浏览阅读297次,点赞9次,收藏5次。在前端js编程中,如果涉及到加密通信、加密算法,经常会用到密钥。但密钥,很容易暴露。暴露原因:js代码透明,在浏览器中可以查看源码,从中找到密钥。如何保护源码中的密钥呢?很多时候,人们认为需要对密钥字符串进行加密。其实更重要的是对存储密钥的变量进行加密。加密了密钥变量,使变量难以找到,才更能保护密钥本身。_js代码隐藏密钥https://blog.youkuaiyun.com/w2sft/article/details/143330531?spm=1001.2014.3001.5502如何防止webpack打包被逆向?-优快云博客文章浏览阅读375次。在我们的项目开发过程中,为了避免上述问题。在发布前,很建议用专业的js加密工具,对js代码进行混淆加密,比如JShaman、JsJiami.online等。混淆加密后的js代码,即使泄露,也可避免被人轻松分析、避免重要信息泄露、避免被二次开发利用。不然,因为webpack只是将多个文件合并到了一起,并没有多少保护代码的功能。webpack打包后的js代码,看起来很混乱,似乎源码得到了保护?可见webpack打包,不能保护js代码,不具备安全防护效果。https://blog.youkuaiyun.com/w2sft/article/details/142858965?spm=1001.2014.3001.5502JS中这样定义变量,你见过吗?-优快云博客文章浏览阅读153次。一般情况下,在JS中定义变量,是使用var、let、const。比如:var abc =1;但如果你不希望别人看到你定义了一个变量abc,该怎么办呢?https://blog.youkuaiyun.com/w2sft/article/details/142783301?spm=1001.2014.3001.5502倒底需不需要对JS代码加密?前端无安全?所以忽视前端安全吗?_有必要保证前端js、css、html的安全性吗-优快云博客文章浏览阅读318次。一文说明白:JS代码加密的必要性、要不要进行JS混淆加密。_有必要保证前端js、css、html的安全性吗https://blog.youkuaiyun.com/w2sft/article/details/142351090?spm=1001.2014.3001.5502Windows一键JS混淆加密:功能集成到鼠标右键菜单_jshamanvip码-优快云博客文章浏览阅读450次,点赞6次,收藏10次。如您已获得JShaman VIP 码,可修改上述代码中的VIP码、使用商业接口,能使配置参数生效果、获得更好的JS混淆加密效果。操作过程,通常情况下,需要将代码复制或提交到网站或软件中,以使用JShaman为例,需要复制代码到JShaman网站,完成JS混淆加密,再把代码粘贴回来。实现此功能,需要用NodeJS运行一个脚本JS文件,以便调用JShaman WebApi接口,进行。修改注册表是为给JS文件添加右键菜单,以便在右键点击.js文件时菜单中显示“混淆加密”功能。测试,加密一个JS文件,如上图所示。_jshamanvip码https://blog.youkuaiyun.com/w2sft/article/details/137264313?spm=1001.2014.3001.5502JS压缩谁最强?对比5款JS代码压缩工具-优快云博客文章浏览阅读2.4k次,点赞7次,收藏13次。在这5款工具中,JShaman表现最好,674字节的代码压缩后是207字节,压缩率惊人。JShaman是专业工具中的代表,具有无效代码清除、代码逻辑优化、变量名变短等功能,而且各功能都有开关,可供使用者自由选用。最后一类(第5种)无品牌的工具,仅仅是去除了代码中的回车换行、注释,并未对代码进行有效果的压缩。通过本测试可知,专业的JS压缩工具,可对JS代码进行优化、重构,可很大程度上压缩代码体积。测评建议:市面上的JS压缩工具很多,质量参差不齐,进行JS压缩,请选用专业工具。_js压缩https://blog.youkuaiyun.com/w2sft/article/details/135103185?spm=1001.2014.3001.5502网页JS代码,加密与不加密的区别_网站代码加没加密怎么评定-优快云博客文章浏览阅读185次。网页中用JS实现的功能,不加密时,是对所有访问者透明的,任何人都可以直接查看、分析其中的功能逻辑。而经混淆加密后的JS,以密文形式存在,可防止它人窥探。由上两例可知,网页中加密后的JS代码,数据被加密,逻辑被混淆,无法从代码中理解功能逻辑,JS代码安全性提到了提升,网站功能得到了保护。_网站代码加没加密怎么评定https://blog.youkuaiyun.com/w2sft/article/details/134242985?spm=1001.2014.3001.55025款在线JavaScript加密混淆工具_js加密工具-优快云博客文章浏览阅读981次。5款常用、好用的在线JavaScript加密混淆工具_js加密工具https://blog.youkuaiyun.com/w2sft/article/details/134089049?spm=1001.2014.3001.5502JavaScript混淆工具大比拼:JScrambler和JShaman哪个更胜一筹?_idea js代码混淆工具-优快云博客文章浏览阅读366次。两款顶级JavaScript混淆工具测评:JScrambler和JShaman_idea js代码混淆工具https://blog.youkuaiyun.com/w2sft/article/details/133232906?spm=1001.2014.3001.5502使用eval的fromCharCode方法对js代码加壳_eval(string.fromcharcode-优快云博客文章浏览阅读322次。文章介绍了如何利用JavaScript中的eval函数和String.fromCharCode方法对代码进行加壳加密,以提高代码的安全性和保护知识产权。示例展示了如何通过定义encrypt和decrypt函数进行编码和解码,并提到了专业工具JShaman用于更复杂的JS代码混淆加密。https://blog.youkuaiyun.com/w2sft/article/details/130044261?spm=1001.2014.3001.55025款全球知名的JavaScript混淆加密工具_chrome插件js混淆-优快云博客文章浏览阅读1.1k次。本文介绍了五款流行的JavaScript混淆加密工具,包括UglifyJS、JScrambler、JShaman、JavaScriptObfuscator和Babili,这些工具提供代码压缩、混淆和保护功能,适用于不同类型的JavaScript项目,如Web和移动应用,帮助开发者保护代码不被轻易理解或篡改。https://blog.youkuaiyun.com/w2sft/article/details/129994703?spm=1001.2014.3001.5502JavaScript奇技淫巧:加密JS代码反调试_js混淆加密能被反吗-优快云博客文章浏览阅读590次。JS代码混淆加密,已被很多人使用,因为它真的很有用、很实用,可以用于保护代码、防护分析、复制、盗用,还可以用于小游戏过审、APP加固等方面。混淆加密后的JS代码,可能被他人分析,为了对抗分析调试,本文分享一种反调试技术。_js混淆加密能被反吗https://blog.youkuaiyun.com/w2sft/article/details/129154318?spm=1001.2014.3001.550272篇Node.JS教程:Node.JS编程从入门到精通_node 开发教程-优快云博客文章浏览阅读509次。72篇Node.JS教程:Node.JS编程从入门到精通_node 开发教程https://blog.youkuaiyun.com/w2sft/article/details/129040933?spm=1001.2014.3001.5502JavaScript奇技淫巧:隐形字符-优快云博客文章浏览阅读1k次。本文,分享一种奇特的JS编程技巧,功能是:可以使字符串“隐形”、不可见!_隐形字符https://blog.youkuaiyun.com/w2sft/article/details/128588984?spm=1001.2014.3001.5502巧用try、catch实现JS代码加密_try{}catch{}有指定加密的作用吗-优快云博客文章浏览阅读261次。本文介绍了一种利用try、catch和eval实现JavaScript代码加密的方法。通过异或加密技术对源代码进行加密,然后在解密过程中尝试用eval执行解密后的代码,如果执行成功则解密完成,失败则重新解密。这种方法适用于需要执行的加密语句,如包含alert或console.log等。文章还提到了二重加密以增强安全性,但指出该方法依赖eval,可能有执行风险。https://blog.youkuaiyun.com/w2sft/article/details/128503169?spm=1001.2014.3001.5502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值