次のプロジェクトでnode.jsを使用したいのですが、上司は競合他社がソースコードを読み取れることを嫌っています。
JavaScriptコードを保護する方法はありますか?
次のプロジェクトでnode.jsを使用したいのですが、上司は競合他社がソースコードを読み取れることを嫌っています。
JavaScriptコードを保護する方法はありますか?
これは、ノードのNativeExtensionを使用して実現できます
boostrap.js
.jseファイルの拡張子ハンドラーを追加するファイルがあります
// register extension
require.extensions[".jse"] = function (m) {
m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename));
};
require("YourCode.jse");
YourCode.jse
ソースコードの暗号化されたバージョンになります(復号化プロセスはネイティブ拡張で行われるため、復号化のキーはプレーンテキストのどこにもありません)。
これで、NativeExtensionsdecrypt
関数がソースをjavascriptに変換し直しました。ビルドプロセス.jse
ですべてのファイルの暗号化されたバージョンを作成し、それらを顧客にリリースするだけです。ネイティブ拡張機能も必要ですが、あまり労力をかけずにコードを変更するのが少し難しくなりました。ネイティブの内線番号を自宅に呼び出してライセンス情報を確認し、著作権侵害を防止することもできます(これは著作権侵害を阻止するものではなく、解決策はありません)。
ライセンス契約を含めて、ソースコードを提供するだけです。彼らはとにかくそれをカスタマイズしたいかもしれません。
80以上のファイルで巨大な純粋なNodejsプロジェクトを完了したばかりなので、OPと同じ問題が発生しました。ハードワークには少なくとも最小限の保護が必要でしたが、この非常に基本的なニーズはNPMjsOSコミュニティではカバーされていなかったようです。怪我に塩を加えるJXCoreパッケージ暗号化システムは先週数時間でクラックされたので難読化に戻ります...
そこで、ファイルのマージ、醜さを処理する完全なソリューションを作成しました。指定したファイル/フォルダもマージから除外するオプションがあります。次に、これらのファイルはマージされたファイルの新しい出力場所にコピーされ、それらへの参照は自動的に書き換えられます。
PS:人々がそれをさらに良くするために貢献してくれたら嬉しいです。これは泥棒とあなたのような勤勉なコーダーの間の戦争です。私たちの力を合わせて、リバースエンジニアリングの苦痛を増やしましょう!
非常に明確にするために、クライアント側のJavascript(リモートサーバーから標準のWebブラウザーにダウンロードされたもの)は、元のソースの再構築(「難読化解除」)以降、どのように難読化しても、表示や変更から保護することはできません。技術的には些細なことです。(Javascriptの難読化は、広く使用されているセキュリティの誤称「隠すことによるセキュリティ」の単なる別の例です。)
JavascriptとNode.jsを使用して保護された「製品」(このコンテキストでは、会社が制御していないサーバーへのインストールを必要とするアプリケーションまたはサービス)を提供する場合、あなた(難読化)はそのような保護を提供しません。
製品がバイナリ実行可能ファイルとして提供されている場合でも、バイナリを理解可能な形式に逆コンパイルできるため、製品に含まれる知的財産を保護できる保証はありません。この場合、低レベルのマシンコード(逆コンパイルによって提供される)を最新のプログラミング言語で使用される高レベルのロジック構造に変換するために必要な過剰なリソース(時間/専門知識)に基づいて、ある程度のセキュリティを享受します。(これは、CP / Mを逆コンパイルして内部設計を手作業で理解した人からのものです。;)
ただし、すべてが失われるわけではありません。プログラムで知的財産を保護できると仮定すると(陪審員はまだこれに取り組んでいます)、Node.jsベースの製品を安全な方法で提供する方法がありますが、それはNode.jsソースコードの大幅なリファクタリングが必要になるため、技術的には冒険的ではありません(暗号的に安全なライブラリのサポートを追加し、プロプライエタリライブラリのオブジェクトリフレクションを削除または保護するため)。
サーバー側のJavaScriptコードは完全にクローズドソースです。誰もそれを読むことができません。
クライアント側のJavaScriptコードは完全にオープンソースです。誰でも読むことができます。
後者の場合、RoR、ASP.NET、PHPなどにも同じことが当てはまります。
実際のサーバーコードは、公開されていない限り閉じられます。
ライブラリを作成してサードパーティのソースとして販売しようとすると、オープンになり、盗まれる可能性があります。もちろん、著作権侵害で彼らを訴えることができます。
盗まれる可能性のあるライブラリを販売しているextjsのようなさまざまな大企業があります。そのため、実際に販売しているのはコードとサポートサービスです。
ノード上に構築されるほとんどの商用プロジェクトはサービスです。
JXcore(node.js 0.11.Xディストリビューション)には、ソースコードとアセットを保護する独自のJXパッケージ機能があります。その特定のパッケージを他のアプリケーションから使用できるかどうかを選択することもできます。(スタンドアロンORライブラリ)
多くのJSなどのファイルがあり、モジュールへのエントリポイントが次のようなものであるとします。
exports.doThis = function() { ...... };
以下のメソッドを呼び出してJXパッケージにコンパイルするだけで、ソースコードは安全になります。
jxcore.utils.hideMethod(exports.doThis);
これは(メソッドの非表示)であり、呼び出し元のアプリケーションから他のすべてのサブJSファイルに到達できないため、エントリファイルにのみ必要です。
JXパッケージを実行するにはJXcoreが必要です。
詳細については、JXcoreから入手できます。
コアロジックをモジュールにパッケージ化します。これらのモジュールを構築して、Googleのクロージャーを介して実行できます。ビルドプロセスの一部として、 Gruntタスクとしてこれを実行することもできます。
これは古い質問ですが、指摘する価値があります。注:コードを実際に隠すことは何もしませんが、.Net(C#)またはJavaを介して出荷されることもありません。一般に、単にuglifyのようなツールを使用するか、クロージャで十分な難読化ポイントになるはずです。モジュール式でクロージャーを使用することにより、実際には、他の方法では困難な多くの最適化を行うことができます。
EncloseJSを使用できます-node.jsプロジェクト用のコンパイラ。それは実際にJavaScriptをネイティブコードにコンパイルし、あなたのソースはバイナリに含まれていません。
あなたはあなたのスクリプトを難読化するためにnodejsのためにpackerを使うことができます...
誰もあなたのコードを読めないことを絶対に確信できる方法はありません。ただし、難読化または縮小化を使用すると、コードのデコードが非常に困難になる可能性があります。難読化/ミニファイアの一例は、JavaScript用のGoogleのClosureCompilerです。
この記事を確認してください。
Node.js(JavaScript)コードをV8バイトコードに「真に」コンパイルする方法を紹介します。これにより、難読化やその他のあまり効率的ではないトリック(アプリのバイナリに埋め込まれる秘密鍵を使用してコードを暗号化するなど)よりも優れた方法でソースコードを非表示または保護できます。そのため、私は「本当に」と言いました。その上)。
したがって、bytenodeツールを使用して、JavaScriptファイルのバイナリバージョン.jscを配布できます。Browserifyを使用してすべての.jsファイルをバンドルしてから、その単一のファイルを.jscにコンパイルすることもできます。
Githubのバイトノードリポジトリを確認してください。
Pkgが重宝します。
生成された出力ファイルにソースが含まれていないことを確認するに は、ソースを強制的に含める(など)がpackage.json
指定されていないことを確認します。詳細については、 https://github.com/vercel/pkg/issues/190を参照してください。license
"license": "ISC"
考えがある。jsの代わりにcpp
またはアプリケーションを保護します。java
utf-8
ファイルリソースとしてコンパイルします。cpp
またはアプリケーションを使用java
してファイル全体をまたはにアップロードしlinux pc
、arm computer
強力なパスワードを持っていることを確認するかssh port
、ビデオポートを閉じるか無効にして、WebのみでLinuxPCを参照します。したがって、これはブラックボックスによく似ており、クライアントはコードに対して何もできません。