设为首页 - 加入收藏 92站长网 (http://www.92zhanzhang.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 为什么 中国 苹果 系统
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

发布时间:2019-10-30 16:13 所属栏目:[优化] 来源:轻薄的假像
导读:现在很后端服务都是用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中生成,否则生成的字节码文件无法正常使用。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章