[英]node.js code protection
我正在檢查是否可以分發node.js
應用程序的閉源。 不是客戶端Javascript文件,而是服務器端文件作為商業產品。 我認為代碼混淆/ uglification不會提供真正的隱私。 也許將包裝/編譯源代碼編譯成二進制文件可能有所幫助。 這可能嗎?
我做了一些搜索NodeJS和v8代碼。
首先在NodeJS存儲庫上,我在src / node.cc第1128行找到了首次加載源代碼的位置:
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)
首先編譯字符串,(以后執行),使用:
Local<v8::Script> script = v8::Script::Compile(source, filename);
看一下deps / v8 / include / v8.h第639行的v8源代碼,Compile函數返回:
Compiled script object, bound to the context that was active
when this function was called. When run it will always use this
context.
我不確定綁定到上下文的腳本意味着什么,但我認為它不僅僅是一個二進制對象,您可以保存並轉移到另一台機器而無需傳輸整個上下文。
編輯:深入研究v8.h,還有一個ScriptData類,它預先編譯腳本以使編譯更快,並且可以與Script類一起使用,但Script類仍然需要原始源代碼加載腳本。 (可能在打印錯誤時,它知道錯誤的來源。)
總之,如果沒有太多工作,我認為這是不可能的。
您可以嘗試一種很好的方法 - 重新編譯NodeJS源代碼。
打開nodejs src文件夾(nodejs-v0.xxx/lib/module.js),你會發現:
// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
};
添加新擴展以滿足您的需求。 例如:
// Native extension for .jse (encrypted js)
Module._extensions['.jse'] = function (module, filename) {
var content = stripBOM(NativeModule.require('fs').readFileSync(filename, 'utf8')).split('').reverse().join('');
module._compile(content, filename);
};
然后重新編譯nodejs,並加密代碼並將代碼文件擴展名從xxx.js重命名為xxx.jse。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.