js 读取mid文件_高手不传之密:把JS代码生成字节码,用字节码技术保护NodeJS源码。...

df2d9a51100d981628268c40e511498c.png

现在很后端服务都是用NodeJS开发的,比如网站后台、游戏服务器、应用服务等等。但NodeJS的后端,有一个弊端,常让人心里不踏实:JS的代码,代码是透明公开的,很容易被他人COPY,很容易自己开发产品就泄漏了,甚至是很快出现雷同产品。

这里介绍一种NodeJS源代码保护方式:把nodejs代码转化为字节码,用node启动字节码文件的方式,保护nodejs源代码不泄漏。可应用于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);

读取并运行字节码的部分:

(run.js)

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");


运行效果如下:

a762ab81feb4074a239b564a58914bbd.png

生成字节码,读取、运行字节码。如此操作起来,并不复杂,如果量大的话,还是稍有些繁琐的。

另外使用JShaman对JS代码进行混淆加密,同样适用于nodejs代码加密,也是个非常不错的nodejs代码保护手段。

注意事项

用这个办法生成机器码,有一点是需要注意的,那就是:平台一致性,比如要在Linux系统中运行,就要在Linux下生成;如果要在Windows平台运行,就得在Windows中生成,否则生成的字节码文件无法正常使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值