本文介绍一种NodeJS源代码保护方式:通过把NodeJS代码转化为字节码,用节点启动字节码文件的方式,保护NodeJS源代码不泄漏。
可应用于NodeJS项目提交源码,NodeJS产品在不可信的环境中部署,防止别人获取源码。
如同JS代码一样,NodeJS源码,也是透明代码,通常用节点启动代码时,都必须把源码也放置到启动环境中。这在很多时候是不安全不稳妥的。因为JS源码透明的原因,别人可以直接获取到产品或项目源码。
如果是为第三方定制项目,对方可以直接拿到源码。如果是要在某些环境中启动项目,比如虚拟主机,他人的服务器中,源码的也是很令人担心的。
为了防止源码泄漏带来的一系列令人不安的后果,这里介绍一种专门针对于NodeJS源码的保护技术:将NodeJS代码转化为字节码文件。
实现原理
NodeJS的内核中对于JS的解析,使用的是谷歌的v8引擎.v8引擎内置有JS虚拟机。通过v8虚拟机,可以将JS代码编译为字节码。而v8虚拟机是能够识别和直接运行该字节码的,因此,以下执行逻辑成为可能:
1, JS代码→js字节码
2, js字节码→nodejs→运行
实现代码
(例程)
生成字节码文件的部分:
读取并运行字节码的部分:
运行效果
测试。js是本例的测试文件,内容如下:
运行效果如下:
生成字节码,读取,运行字节码。如此操作起来,并不复杂,如果量大的话,还是稍有些繁琐的。
另外一个弊端是:兼容性问题。比如赢下生成的字节码,到linux下,是不能正常运行的。如果要在linux下用,就要在linux下生成。也就是操作系统要一致。
对于js代码产品的保护,除了可以使用字节码技术,还可以用代码混淆加密的办法,比如:JShaman (http://www.jshaman.com/)是一款对js代码进行混淆加密的工具,也适用于NodeJS代码加密,也是个非常不错的NodeJS代码保护手段,且可对前端js代码进行保护,通用性比较强。