加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

把JS代码生成字节码,用字节码技术保护NodeJS源码

发布时间:2019-11-05 03:28:10 所属栏目:建站 来源:轻薄的假像
导读:此刻很后端处事都是用NodeJS开拓的,好比网站靠山、游戏处事器、应用处事等等。但NodeJS的后端,有一个破绽,常让民气里不扎实:JS的代码,代码是透明果真的,很轻易被他人COPY,很轻易本身开拓产物就走漏了,乃至是很快呈现类似产物。 这里先容一种NodeJS

此刻很后端处事都是用NodeJS开拓的,好比网站靠山、游戏处事器、应用处事等等。但NodeJS的后端,有一个破绽,常让民气里不扎实:JS的代码,代码是透明果真的,很轻易被他人COPY,很轻易本身开拓产物就走漏了,乃至是很快呈现类似产物。

不传之密:把JS代码天生字节码,用字节码技能掩护NodeJS源码

这里先容一种NodeJS源代码掩护方法:把nodejs代码转化为字节码,用node启动字节码文件的方法,掩护nodejs源代码不走漏。可应用于nodejs项目提交源码、nodejs产物在不行信的情形中陈设,防备别人获取源码。

实现道理

nodejs的内核中对付js的理会,行使的是谷歌的v8引擎。v8引擎内置有js假造机。通过v8假造机,可以将js代码编译为字节码。而v8假造机是可以或许辨认和直接运行该字节码的。因此,以下执行逻辑成为也许:

1、js代码 -> js字节码

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

实当代码

(例程)

天生字节码文件的部门:

  1. var v8 = require('v8'); 
  2. var fs = require('fs'); 
  3. //读取源文件(JS源码) 
  4. var js_code = fs.readFileSync(__dirname+"/test.js").toString(); 
  5. //天生字节码 
  6. var script = new vm.Script(js_code, {produceCachedData: true}); 
  7. var byte_code = script.cachedData; 
  8. //将字节码写入文件 
  9. fs.writeFileSync(__dirname+"/test.jsb",byte_code); 

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

  1. var v8 = require('v8'); 
  2. var fs = require('fs'); 
  3. //从文件中读取字节码 
  4. byte_code = fs.readFileSync(__dirname+"/test.jsb"); 
  5. //运行 
  6. var l = byte_code.slice(8, 12).reduce(function (sum, number, power) { return sum += number * Math.pow(256, power);}); 
  7. var dummyCode =" ".repeat(l); 
  8. script = new vm.Script(dummyCode, {cachedData: byte_code}); 
  9. script.runInThisContext(); 

运行结果

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

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

运行结果如下:

不传之密:把JS代码天生字节码,用字节码技能掩护NodeJS源码

天生字节码,读取、运行字节码。云云操纵起来,并不伟大,假如量大的话,照旧稍有些繁琐的。

其它行使JShaman对JS代码举办夹杂加密,同样合用于nodejs代码加密,也是个很是不错的nodejs代码掩护本领。

留意事项

用这个步伐天生呆板码,有一点是必要留意的,那就是:平台同等性,好比要在Linux体系中运行,就要在Linux下天生;假如要在Windows平台运行,就得在Windows中天生,不然天生的字节码文件无法正常行使。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读