2015年9月7日 星期一

[NodeJS] nodejs加密工具NPK

NPK投影片
NPK Github

npk, 簡單說就是一個幫NodeJS加密的工具.
支援一般加密方式, 也有支援透過compile編譯成binary的方式.

下面是在Windows 7 64bit平台操作, node版本要v0.10才行(後面會說原因)
node.js v0.10.0 官網下載
node.js各版本 官網下載

1. npk安裝
npm install npk -g
NPM安裝的東西預設是放在
C:\Users\chrislin\AppData\Roaming\npm\node_modules
如果只有要用Remove Mock-up (default)跟Mom doesn't recognize兩種加密方式, 做到這就可以了.
若要用Dad doesn't recognize加密, 就往下繼續做.

2.1. node-gyp 安裝(參考)
npm install -g node-gyp
2.2. Microsoft Visual Studio C++ 安裝(我自己是裝VS 2015 Professional)

2.3. Microsoft Windows SDK for Windows 7 and .NET Framework 4 安裝 (下載)

我有遇到Microsoft Windows SDK裝不進去的問題, 參考官網解法
● 解除安裝Microsoft Visual C++ 2010 x64 Redistributable
● Microsoft Windows SDK安裝
● 重新安裝Microsoft Visual C++ 2010 x64 Redistributable (下載)

npk怎麼用?
1. 先從NPK安裝好的目錄copy範例出來改, 我是copy下面目錄
C:\Users\chrislin\AppData\Roaming\npm\node_modules\npk\tests
2. 目錄說明
tests\purejs\lib 放NodeJS source code的地方
tests\package.json 目錄設定檔(設定source code以及output code位置等...)
tests\purejs\out\app.js 加密後產生output code的地方
tests\purejs\out\app.js\app.js 加密後的檔案

3. 執行
npk tests\purejs\
npk tests\purejs\ --mom-doesnt-recognize
npk tests\purejs\ --dad-doesnt-recognize

3.1.執行時出現下面錯誤(不過binding.gyp跟output.cpp還是有產生), 要設定環境變數

3.2.新增Python環境變數


PYTHONPATH=D:\Program Files (x86)\Python\27 PYTHON=%PYTHONPATH%\python.exe
4. 小編運氣不好, 執行爸爸不認識還是有問題(還是上面的錯誤), 所以還是去看一下npk背後怎麼作業

4.0. npk原始檔及相關lib位置
C:\Users\chrislin\AppData\Roaming\npm\node_modules\npk\lib
4.1. 把NodeJS檔案編譯成output.cpp, 並產生binding.gyp

4.2. 利用node-gyp把output.cpp編成binary
node-gyp configure
node-gyp build

4.2.1. 先到專案目錄下
C:\Users\chrislin\Desktop\tests\purejs\out\app.js
4.2.2. 執行configure沒問題
node-gyp configure
4.2.3. 再執行build
node-gyp build
4.2.4. 會發現出現下面錯誤訊息

去大神查了一下, 發現v8.h這個library在node v0.10跟v0.12是不一樣的(參考網頁)
像是v8::String在這兩個版本就不一樣(如下)

但是npk的compiler產生cpp的寫法是用v0.10
C:\Users\chrislin\AppData\Roaming\npm\node_modules\npk\lib\compiler.js
所以我就把v0.12移除, 重新裝了v0.10

5. 結果執行爸爸不認識還是同樣的錯誤ORZ
compiler.js似乎只執行到self.generateMakefile產生出binding.gyp
child_process.spawn執行node-gyp好像有問題@@?

6. 只好先用下面方式產生binary檔案了= =
● 產生configure需要的兩個檔案: binding.gyp跟output.cpp
npk tests\purejs\ --dad-doesnt-recognize
● 手動compile, 產生npk.node
cd tests\purejs\out\app.js\
node-gyp configure
node-gyp build

產生的binary檔案位置
C:\Users\chrislin\Desktop\tests\purejs\out\app.js\build\Release\npk.node
之後就可以用require('npk.node')的方式使用此檔案

沒有留言:

張貼留言