オープンソースではないJavaScriptアプリケーションを作成したいので、JSコードを難読化する方法を学びたいですか?これは可能ですか?
22 に答える
難読化:
YUI Compressorを試してみてください。これは非常に人気のあるツールであり、Yahoo UI チームによって構築、強化、保守されています。
以下も使用できます。
UPDATE: This question was originally asked on 2008, and The mentioned technologies are deprecated. you can use:
プライベート文字列データ:
文字列値をプライベートに保つことは別の問題であり、難読化はあまり役に立ちません。もちろん、ソースを文字化けして縮小された混乱にパッケージ化することで、あいまいさによる軽いバージョンのセキュリティが得られます. ほとんどの場合、ソースを表示しているのはユーザーであり、クライアントの文字列値はユーザーが使用することを目的としているため、そのようなプライベート文字列値は多くの場合必要ありません。
ユーザーに絶対に見せたくない値が本当にある場合は、いくつかのオプションがあります。まず、ページの読み込み時に復号化される何らかの暗号化を行うことができます。これはおそらく最も安全なオプションの 1 つですが、不要な作業も多くなります。おそらくいくつかの文字列値を base64 でエンコードできますが、その方が簡単です..しかし、それらの文字列値が本当に必要な人は、簡単にデコードできます. 暗号化は、誰かがあなたのデータにアクセスするのを真に防ぐ唯一の方法であり、ほとんどの人はそれが必要以上のセキュリティであると感じています.
サイドノート:
Javascript の難読化は、いくつかのバグを引き起こすことが知られています。難読化ツールはそれについて少しずつ良くなっていますが、多くのアウトフィットは、縮小化とgzipで十分な利点があると判断しており、難読化による追加の節約は常に問題に値するとは限りません. ソースを保護しようとしている場合は、コードを読みにくくするためだけに、時間をかける価値があると判断するかもしれません。JSMinは良い代替手段です。
Google のClosure Compilerについて誰も言及していないことに驚いています。縮小/圧縮するだけでなく、分析して未使用のコードを見つけて削除し、最大限の縮小のために書き直します。また、型チェックを行うこともでき、構文エラーについて警告します。
JQuery は最近、YUI Compresser から Closure Compiler に切り替え、「確実な改善」が見られました。
難読化は実際には機能しません。あなたのコードを本当に理解したいと思っている人にとっては、それはただのスピード バンプです。さらに悪いことに、ユーザーがバグを修正する (そして修正をあなたに送り返す) ことを妨げ、現場で問題を診断するのが難しくなります。時間とお金の無駄です。
知的財産法および法的選択肢について弁護士に相談してください。「オープンソース」とは「人々がソースを読むことができる」という意味ではありません。代わりに、オープン ソースは、コードを自由に使用および変更する許可を与える特定のライセンス モデルです。そのようなライセンスを付与しない場合、コードをコピーする人は違反しており、(世界のほとんどの場合) それらを停止する法的オプションがあります。
コードを本当に保護できる唯一の方法は、コードを出荷しないことです。重要なコードをサーバー側に移動し、パブリック Javascript コードに Ajax 呼び出しを実行させます。
必要に応じて JavaScript ソースを難読化できますが、すべてのソース コードをクライアント マシンで実際に実行する必要があるという理由だけで、常にリバース エンジニアリングが可能になります。サーバー側のコードを使用し、JavaScript が行うすべてのクライアント コードは、サーバー自体に処理要求を送信するだけです。そうしないと、誰でもコードが実行しているすべての操作を常に追跡できてしまいます。
文字列を安全に保つために、誰かが base64 について言及しました。これはひどい考えです。Base64 は、コードをリバース エンジニアリングしたいと考えるタイプの人々によってすぐに認識されます。彼らが最初に行うことは、エンコードを解除して、それが何であるかを確認することです。
自由に利用できる JavaScript 難読化ツールが多数あります。ただし、JavaScript をリバース エンジニアリングできないところまで難読化するのは難しいことに注意することが重要だと思います。
そのために、私がある程度の残業で使用したいくつかのオプションがあります。
ゆいコンプレッサー。Yahoo! の JavaScript コンプレッサーは、コードをうまく圧縮して読み込み時間を短縮します。比較的うまく機能する小さなレベルの難読化があります。基本的に、Compressor は関数名を変更し、空白を削除し、ローカル変数を変更します。これは私が最も頻繁に使用するものです。これは、オープンソースの Java ベースのツールです。
JSMinは Douglas Crockford によって作成されたツールで、JavaScript ソースを圧縮することを目的としています。Crockford 自身の言葉を借りれば、「JSMin は難読化はしませんが、見栄えを悪くします」。これの主な目的は、ブラウザーでの読み込みを高速化するためにソースのサイズを縮小することです。
無料の JavaScript 難読化ツール。これは、コードを実際にエンコードして難読化しようとする Web ベースのツールです。その形式のエンコーディング (または難読化) のトレードオフは、ファイルサイズを犠牲にする可能性があると思います。ただし、それは個人的な好みの問題です。
インタープリター言語の問題は、ソースを送信して動作させることです (バイトコードへのコンパイラーがない限り、逆コンパイルするのは非常に簡単です)。
したがって、パフォーマンスを犠牲にしたくない場合は、変数名と関数名のみを操作できます。それらをa、b ... aa、ab ...またはa101、a102などに置き換えます。もちろん、できるだけ多くのスペース/改行を削除します(いわゆるJSコンプレッサーが行うことです)。
文字列を難読化すると、リアルタイムで暗号化および復号化する必要がある場合、パフォーマンスが低下します。さらに、JS デバッガーは最終的な値を表示できます...
JScramblerをお試しください。最近スピンしてみて感動しました。これは、詳細をあまり気にせず、すぐに実行したい人のために、事前定義された設定を備えた難読化用のテンプレートのセットを提供します。必要な変換/手法を選択して、カスタムの難読化を作成することもできます。
YUI Compressor に対して私が提案する他のほとんどの回答とは対照的です。Google Closureを使用する必要があります。
より圧縮されるため、それほど多くはありませんが、ほとんどの場合、a = [1,2,3,];
IEを混乱させるなどのjavascriptエラーをキャッチするためです.
Patrick J. O'Neil によるJavaScript Utilityをお勧めします。難読化/圧縮および圧縮が可能で、これらはかなり得意なようです。そうは言っても、私はそれをいかなる種類のビルドスクリプトにも統合しようとはしませんでした.
難読化と縮小化については、私は前者の大ファンではありません。デバッグが不可能になり (行 1 のエラー...「待って、行が 1 つしかありません」)、常に解凍に時間がかかります。しかし、もし必要なら...まあ。
非オープンソースのJavascriptベースのアプリケーションはかなりばかげています。Javascriptはクライアント側のインタプリタ言語です。難読化はあまり保護されていません。
JSの難読化は通常、スクリプトを「保護」するのではなく、スクリプトのサイズを縮小するために行われます。コードを公開したくない状況にある場合、Javascriptは適切な言語ではありません。
周りにはたくさんのツールがありますが、ほとんどの場合、理由からその名前に「コンプレッサー」(または「ミニファイア」)という単語が含まれています。
クライアント側のコードを保護することはできません。Google Chrome で F12 を押し、javascript の実行を一時停止するだけで、暗号化されたものも含めてすべての文字列を取得できます。それを美化し、変数の名前を変更すると、ほとんど元のコードが得られます。
サーバー側の JavaScript (つまり NodeJS) を作成していて、誰かがサーバーにハッキングするのを恐れていて、ハッカーの作業をより困難にして、アクセスを取り戻すための時間を増やしたい場合は、javacript コンパイラを使用します。
複数のファイル/モジュールで使用されている場合でも、すべての変数の名前を変更する唯一のツールであるため、Advanced Compilation で Closure Compiler を使用する必要があります。しかし、それには問題があります。コーディング スタイルで記述した場合にのみ機能します。
Dean Edward's Packer は優れた難読化ツールですが、主にコードを難読化し、コード内の文字列要素を難読化するわけではありません。
参照: Online Javascript Compression Tool を選択し、ドロップダウンから Packer (Dean Edwards) を選択します。
最初に YUI Compressor などで圧縮し、次にhttp://www.javascriptobfuscator.com/などを使用してすべての文字列と数値を HEX 値に変換することをお勧めします。
これにより、コードはほとんど理解できなくなります。この段階では、ハッカーがコードを再作成するのに、実際にゼロから書き直すよりも時間がかかると思います。書き換えとクローン作成は、実際に止めることはできません。結局のところ、私たちは自由人です!
このツールを試してくださいJavascriptObfuscator
HTML5ゲームで使用したところ、サイズが950KBから150に減少しただけでなく、ソースコードが読み取れないクロージャーコンパイラーとミニファイアーが元に戻せるようになりました。個人的には、この難読化を元に戻す方法がわかりません。
一部の企業 (JackBe など) は、難読化の追加手段として、暗号化された JavaScript コードを JS ファイルではなく *.gif ファイル内に配置しているように思われます。
バナナスクリプトを試しましたか?高度に圧縮された完全に判読不能なコードを生成します。
私はJasobを何年も使用してきましたが、間違いなく最高の難読化ツールです。
高度な UI を備えていますが、直感的で使いやすいです。
また、HTML および CSS ファイルも処理します。
これを使用する最善の方法は、すべてのプライベート変数の前にアンダースコアなどを付けてから、このsort
機能を使用してそれらをすべてグループ化し、難読化のターゲットとして チェックオフすることです。
ユーザーは引き続きソースを表示できますが、プライベート変数が から に変換されると、解読がはるかに難しくなり_sUserPreferredNickName
ますa
。
エンジンは、ターゲット変数の数を自動的に集計し、それらに優先順位を付けて最大の圧縮を取得します。
私は Jasob で働いていないので、彼らを宣伝しても何の得にもなりません。友好的なアドバイスを提供するだけです。
欠点は、無料ではなく、少し高価なことですが、代替案と比較すると、それでも価値があります.
Javaスクリプトの難読化にClosure-Compilerユーティリティを使用しています。コードを縮小し、難読化のオプションを増やします。このユーティリティは、以下の URL の Google コードで入手できます:
Closure Tools
しかし、今では UglifyJS のことをよく耳にします。Closure Compiler と UglifyJS のさまざまな比較を見つけることができますが、Uglify が勝者と思われます。
UglifyJS: Closure と同等の高速な Node.js 用の新しい JavaScript コンプレッサー
すぐに、UglifyJS にチャンスを与えます。
JavaScript/HTML/CSS 難読化ツール/圧縮ツールとして、Patu Diguaを試すこともできます。
私は過去にこれを使用しましたが、それは良い仕事をします。無料ではありませんが、ぜひご覧ください。
JavaScript難読化ツールとエンコーダー
Obfuscriptorを確認することを検討する必要があります。
私は、 YUI CompressorやGoogle Closureなどの他のツールで見られる典型的な Javascript の圧縮トリックを超えています。
難読化されたコードは、暗号化されたように見えます。私が前に見たものとは異なります。