JavaScript代码保护浅谈

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/feibabeibei_beibei/article/details/98232069

一、国外:

1.jscrambler(商业):链接:https://jscrambler.com/

收费比较高;

2.JavaScript-Obfuscator(开源)

有了开源很多人都在这个基础上改改,但是强度也是会比较弱;

二、国内:

1.jshaman

https://www.jshaman.com/guide.html

看了他们这个说明可能以上两个功能相对比较吸引人:

因为加密和压缩这种太容易被人分析了,原理比较简单;

控制流混淆对于逻辑的处理能够增大分析难度,原理上其实就是分析js得到语法树,通过操控语法树,比如对于if---case---变为switch-----case等;但是如果规则被攻击者识破,也是会比较危险;至于多态变异其实就是多样随机性。

2.Js2x:

http://ty2y.com/obfuscate/#how-to-use

这个跟上面那个多态变异是一样的。

3.SecurityWorker

https://www.securitify.io/

这个重点强调了虚拟机,其实虚拟机的思路也比较好理解:这里只说虚拟机的思路i:

第一阶段:

这个可能是目前看到应该是js vmp最强的,这种方案其实也是很好理解的,比如对于一个js代码来说,我们只用js操作写一个基于栈的解释器,然后对于本身要保护的js进行虚拟化,定义一堆自定义操作,这个时候其实还是比较弱,因为全部是js写的暴漏在攻击者面前;

第二阶段:

这个时候的一个大致的想法是我们可以把虚拟机解释器这部分用C/c++来实现,通过Emscripten 处理为webasembly,这个时候的分析难度就会增加很多,并且中间嵌套我们自己设计的opcode.这样就安全很多。如果再结合别的一些保护方案,效果应该会很不错,但是毕竟webasem这种文件的格式是公开的,可能这种方案的持久性不行,并且各个浏览器的兼容也是一大问题;当然后期也可以针对webasembly再进行处理,这就另当别论了。

4.腾讯防水墙

https://segmentfault.com/a/1190000015216576#articleHeader8

腾讯防水墙这个根据自己的业务需求,以及动态多样性与服务端结合相当于混淆保护出多套,每次请求下发的时候根据前后端的标识每次都不一样。 结合服务端针对多样性来增加难度;

5.做移动安全代码保护的传统厂商们

这里就不评论分析了,因为他们可能重点在APP相关的dex、so以及手游相关的文件上;

6.其他

像其他的一些大厂比如阿里这种肯定做了jsVMP,因为他们的需求太强烈了,以及国外的一些厂商。

三、总结:

对于js这种语言来说,由于语言本身的特殊性,一定的保护是非常必要的,再结合浏览器本身的发展,为了性能会在编译上做处理,引入本地层的东西,比如谷歌的V8,火狐的 asm.js 在安全性上:业务上更多的结合服务端动态特性以及客户端强大的静态代码保护的设计会达到一个比较好的效果。

猜你喜欢

转载自blog.csdn.net/feibabeibei_beibei/article/details/98232069