如何对JavaScript进行保护
代码压缩:
代码加密:
-
eval
- eval可以将其中的参数按照JavaScript的的语法进行解析并执行,其实就是将JavaScript的代码变成了eval的参数其中的一些字符会被按照特定的编码
- 可以使用eval加密的网站进行加密
http://www.jqueryfuns.com/tools/jsencode
加密前:console.log("hello")
加密后:eval(function(p,a,c,k,e,r){e=String;if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'^$'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('console.log("hello")',[],1,''.split('|'),0,{}))
- 因为可以将加密后的代码直接输出到控制台,所以这种加密方法是非常弱的
-
Emscripten
- Emscripten是一个用于编译的工具链asm.js公司使用LLVM构建的WebAssembly可以让你在没有插件的情况下,在网络上运行C和C++。
- 核心:C/C++
- 编译:Emscripten
- 结果:asm.js
-
调用:JavaScript
- 就是一些核心的功能可以使用c或者c++来实现,然后通过Emscripten编译器来生成asm.js文件,然后就可以在浏览器里调用,就可以实现它的执行了,所以可以起到保护核心逻辑的功能了。
-
WebAssembly等
- 核心:C/C++
- 结果:wasm文件(字节码文件)运行速度会更快,体积会更小
- 调用:JavaScript
代码混淆:
- 变量混淆(将变量名变成一些无意义的可以来较乱的字符串(16进制)降低代码的可读性)
- 字符串混淆(进行加密或者是编码,目的:确保代码里面,不可以使用搜索的方式来查到原始的字符串)
- 属性加密(JavaScript里面有一些Object,可能是一些键值对,所以可以把对象进行加密的转换,就是把key-value的映射关系混淆掉)
- 控制流扁平化(打乱原有的代码的执行流程)
- 僵尸代码注入(将一些无用的代码注入到我们的代码中,实现扰乱)
- 代码压缩(去除空格回车调试语句等等)
- 反调试 (无限debug、定时debug、debugger关键字)
- 多态变异(JavaScript一旦被调用,代码就变成和原来完全不同的代码,但是保证功能完全不变,避免代码被动态的分析调试)
- 锁定域名
- 反格式化
- 特殊编码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)