我是靠谱客的博主 强健枕头,最近开发中收集的这篇文章主要介绍Node.JS实战38:将Node.JS代码编译成字节码!本文介绍一种NodeJS源代码保护方式实现原理实现代码(例程)运行效果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文介绍一种NodeJS源代码保护方式

通过把nodejs代码转化为字节码,用node启动字节码文件的方式,保护nodejs源代码不泄漏。可应用于nodejs项目提交源码、nodejs产品在不可信的环境中部署,防止别人获取源码。

如同JS代码一样,nodejs源码,也是透明代码,通常用node启动代码时,都必须把源码也放置到启动环境中。这在很多时候是不安全不稳妥的。因为js源码透明的原因,别人可以直接获取到产品或项目源码。

如果是为第三方定制项目,对方可以直接拿到源码。如果是要在某些环境中启动项目,比如虚拟主机、他人的服务器中,源码的也是很令人担心的。

为了防止源码泄漏带来的一系列令人不安的后果,这里介绍一种专门针对于nodejs源码的保护技术:将nodejs代码转化为字节码文件。

实现原理

nodejs的内核中对于js的解析,使用的是谷歌的v8引擎。v8引擎内置有js虚拟机。通过v8虚拟机,可以将js代码编译为字节码。而v8虚拟机是能够识别和直接运行该字节码的。因此,以下执行逻辑成为可能:

1、js代码 -> js字节码
2、js字节码 -> nodejs ->运行

实现代码(例程)

生成字节码文件的部分:

var v8 = require('v8');
var fs = require('fs');

//读取源文件(JS源码)
var js_code = fs.readFileSync(__dirname+"/test.js").toString();

//生成字节码
var script = new vm.Script(js_code, {produceCachedData: true});
var byte_code = script.cachedData;

//将字节码写入文件
fs.writeFileSync(__dirname+"/test.jsb",byte_code);
读取并运行字节码的部分:

var v8 = require('v8');
var fs = require('fs');

//从文件中读取字节码
byte_code = fs.readFileSync(__dirname+"/test.jsb");

//运行
var l = byte_code.slice(8, 12).reduce(function (sum, number, power) { return sum += number * Math.pow(256, power);});
var dummyCode =" ".repeat(l);
script = new vm.Script(dummyCode, {cachedData: byte_code});
script.runInThisContext();

运行效果

test.js是本例的测试文件,内容如下:

console.log("hello world");
console.log("this is a test");

运行如下:

生成字节码,读取、运行字节码。如此操作起来,并不复杂,但如果量大的话,还是稍有些繁琐的。
另外使用JShaman(jshaman.com)对JS代码进行混淆加密,同样适用于nodejs代码加密,也是个非常不错的nodejs代码保护手段。

最后

以上就是强健枕头为你收集整理的Node.JS实战38:将Node.JS代码编译成字节码!本文介绍一种NodeJS源代码保护方式实现原理实现代码(例程)运行效果的全部内容,希望文章能够帮你解决Node.JS实战38:将Node.JS代码编译成字节码!本文介绍一种NodeJS源代码保护方式实现原理实现代码(例程)运行效果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部