JavaScriptを難読化(保護)するにはどうすればよいですか?[閉まっている]


714

オープンソースではないJavaScriptアプリケーションを作成したいので、JSコードを難読化する方法を学びたいのですが?これは可能ですか?


15
あなたがコードを難読化しようとしている理由を聞いてみたいと思います。それは有用な答えを与えるために必要なコンテキストを提供するかもしれません。
JohnFx 2009年

45
何かを本当に秘密に保つ唯一の方法は、それをクライアントに送信ないことです。持っていないと読めません。暗号化して送信することは、実際に気にかける少数の人々の手にトラブルを求めるだけであり、平文で送信しても他の誰もがぶらぶらすることはありません(DRMを参照)。
ドナルフェロー


8
コードを難読化することは良い考えではありません。正当なユーザーに不便をかけるだけで(たとえば、バグを修正する必要がある場合)、リバースエンジニアリングを行う(金銭的な)インセンティブを持っているユーザーからは何も「保護」しません。Javascriptコードのリバースエンジニアリングを防ぐことは基本的に不可能です。
Sven Slootweg、2015年

14
難読化しないという主張は私には欠陥があるようです。ユーザーがバグを修正または報告する可能性があると本当に思わない限り、そうすべきです。縮小することで読み込み時間を短縮できます。それは本当に熱心なハッカーを決して止めません、しかしそれは彼/彼女を遅くし、半ば攻撃されたハッキン​​グの試みを止めます。それは非常に簡単で、多くのツールがあります(他の回答を参照してください)。ほとんどの場合、利点があるだけなので、確かにそれを行うと思いますが、実際のセキュリティをもたらすことや、コードのコピーを誰かが停止することを期待しないでください。彼らが本当にしたい場合。これを行う唯一の方法は、コードをサーバー側に保持し、ajaxを使用することです。
ベンジャミン

回答:


405

難読化:

YUI Compressorをお試しください。これは非常に人気のあるツールであり、Yahoo UIチームによって構築、拡張、保守されています。

次のものも使用できます。

更新:この質問は元々10年以上前に尋ねられたものであり、YUIはもはや維持されていません。Google Closure Compilerは現在も使用されており、UglifyJSはノードパッケージマネージャーを介してローカルで実行できます。npm install -g uglify-js

プライベート文字列データ:

文字列値をプライベートに保つことは別の問題であり、難読化は実際にはあまりメリットがありません。もちろん、ソースを文字化けした縮小化された混乱にパッケージ化することにより、あいまいさによる軽いバージョンのセキュリティが得られます。ほとんどの場合、ソースを表示しているのはユーザーであり、クライアントの文字列値はその使用を目的としているため、多くの場合、プライベート文字列値は必要ありません。

ユーザーに見てほしくない値が本当にある場合は、いくつかのオプションがあります。まず、ページの読み込み時に復号化されるある種の暗号化を行うことができます。これはおそらく最も安全なオプションの1つですが、不要な作業もたくさんあります。おそらく、いくつかの文字列値をbase64エンコードできますが、それは簡単です。しかし、それらの文字列値を本当に望んでいる人なら、簡単にデコードできます。暗号化は、誰もがデータにアクセスすることを完全に防ぐ唯一の方法であり、ほとんどの人は、必要以上のセキュリティを確保できると考えています。

サイドノート:

JavaScriptの難読化は、いくつかのバグを引き起こすことが知られています。難読化ツールは少し改善されていますが、多くの服装は縮小gzipによる十分なメリットがあると判断し、難読化による追加の節約が必ずしも問題に値するわけではありません。ソースを保護しようとしている場合は、コードを読みにくくするために、それだけの価値があると判断するかもしれません。JSMinは良い代替手段です。


32
base64エンコードを実行しても、簡単に元に戻せる手順であるため、セキュリティにメリットがないことを付け加えておきます。それが暗号化されていても、クライアント側で復号化されている場合は役に立ちません。文字列のセキュリティを確保する唯一の方法は、暗号化された文字列のみをクライアントに表示させることであり、それが渡される
Claudiu

16
さらなる処理のためのサーバー。
Claudiu

9
FYI、オンラインYUIのコンプレッサーは、ここで見つけることができる:refresh-sf.com/yui
mtness

7
文字列値を暗号化することは、それらを使用するためにブラウザーで復号化する必要がある場合、base64エンコードよりもわずかにメリットがあります。その理由は、ブラウザーに暗号化キーも提供する必要があることと、ブラウザーがユーザーに実行できることは何でもできることです。
Ben

9
YUI Compressorを使用して圧縮を行う場合、「安全な」圧縮方法を使用していることを確認します。つまり、セミコロンを保持し--preserve-semiます。通常、プライベート変数をa、b、cなどに書き換えることは安全です。もう1つのことは、コードの各セミコロンの後にミニファイアに改行を入れることです--line-break 0。次に、本番環境でエラーが発生した場合、有効な参照行が最低限あり、開発コピーでそのコードを見つけることができます。そうしないと、大量のコード行でエラーが発生し、エラーの場所がわからなくなります。
zuallauz 2013

136

GoogleのClosure Compilerについて誰も言及していないことに驚いています。それは単に縮小/圧縮するだけでなく、未使用のコードを見つけて削除するために分析し、最大の縮小のために書き直します。また、型チェックを行うことができ、構文エラーについて警告します。

JQueryは最近、YUI CompresserからClosure Compilerに切り替わり、「確実な改善」が見られました


60
はい、しかし最近、彼らはクロージャーコンパイラーを去り、現在UglifyJSを使用しています。jQueryのコードは、閉鎖コンパイラで圧縮した後バギーだった
Chielus

あなたが角度で作業している場合、私はそれを指摘したいと思います。このツールは、依存関係の注入と引数の名前の変更が原因で、実際には機能しません。
iConnor 2013

1
便利なツールですが、難読化は行われていないため、おそらく他の誰もそれを言及していません。
Madbreaks、2014年

1
@Madbreaks with Advanced Optimizations(developers.google.com/closure/compiler/docs/api-tutorial3)は、コードを難読化のポイントにまで縮小します。たとえば、変数は簡潔にするために名前を変更できます。
Jason Hall

Googleもセキュリティの選択肢ではない
Fillipo Sniper

121

難読化は実際には機能しません。あなたのコードを本当に使いたいと思っている人にとっては、それは単なるスピードバンプです。さらに悪いことに、ユーザーがバグを修正する(および修正をお客様に返送する)ことができなくなり、現場での問題の診断が困難になります。それはあなたの時間とお金の無駄です。

知的財産法とあなたの法的選択肢が何であるかについて弁護士に相談してください。「オープンソース」は「人々がソースを読むことができる」という意味ではありません。代わりに、オープンソースは、コードを自由に使用および変更する権限を付与する特定のライセンスモデルです。このようなライセンスを付与しないと、コードをコピーする人が違反し、(ほとんどの場合)あなたはそれらを阻止するための法的選択肢を得ることができます。

コードを本当に保護できる唯一の方法は、コードを出荷しないことです。重要なコードをサーバー側に移動し、公開されているJavaScriptコードにAjax呼び出しを実行させます。

難読化ツールについての私の完全な回答をここで参照してください。


14
弁護士に+1しますが、それは他の国/管轄では機能しない可能性があります。
jmort253

16
弁護士はおそらく、失われたコードよりも多くの費用/問題を生み出し、非常に慎重に考え、弁護士を雇うためにたくさんのお金を手配します!!
andora

11
-1:JavaScriptを理解している弁護士を見つけるのは難しいと思います...「違反者」を見つけるために必要な料金と時間は言うまでもありません。誰かが何も署名しなかった場合、誰かが本当にHTML / JavaScriptファイルに埋め込まれたライセンスに違反しているのでしょうか?AJAX呼び出しの場合は+1。
Alerty

12
@Alerty 1)基本的にライセンスは、著作権で保護された素材の使用を許可することです。ライセンスなしで使用する権利はほとんどありません。権利を取得するために署名する必要はありません。ライセンスは契約とは異なります。2a)問題は、許可なしにHTML / Javascriptをコピーして使用する人々に関するものであるため、ライセンスは「埋もれた」ものではなく、取得されたものについてはそこにあります。2b)お客様には、ライセンスなしに他人の著作物を使用する権利はほとんどありません。3)弁護士はJavascriptを理解する必要はなく、単に知的財産法を理解する必要があります。
Schwern、2011年

4
@Alertyだまされないでください。これは、許可なしに自分のサイトで使用するためにファイルをコピーした人を罰することです。あなたが話しているのは、ライセンスではなく契約です。契約は相互の同意を必要とし、ギブアンドテイクです。ライセンスはあなたに知的財産を使用する権利を与えます。ライセンスは1つの方法(所有者が許可するもの)であり、何も譲渡しないため、署名する必要はありません。多くの「ソフトウェア使用許諾契約」は実際には契約であり、それらはプロパティのライセンスを超えて、訴訟を起こす権利などのとんでもないことにまで及ぶためです。
シュヴェルン

49

あなたはあなたが望むすべてのjavascriptソースを難読化することができます、しかしそれはクライアントマシン上で実際に実行するためにすべてのソースコードを要求するという理由だけで常にリバースエンジニアリング可能でしょう...サーバー側のコードを使用し、クライアントコードのJavaScriptが行うすべての処理は、サーバー自体に処理要求を送信することです。それ以外の場合は、誰でもコードが実行しているすべての操作を常に追跡できます。

文字列を安全に保つために誰かがbase64について言及しました。これはひどい考えです。Base64は、コードをリバースエンジニアリングする必要のあるタイプの人々にすぐに認識されます。彼らが最初に行うことは、エンコードを解除して、それが何であるかを確認することです。


45
どこに行っても、「Javascriptを難読化するにはどうすればよいですか?」「誰かが難読化を解除できるので、心配する必要はありません。」これは本当に答えではありません。
Travis Wilson、

2
@Vivek:少し遅れましたが、私が本当に意味したのは「サーバー側のコード」です。ブラウザではなくサーバー上でJavaScriptを実行することは可能ですが、それがどれほど一般的であるかはわかりません。
Claudiu

8
@Travis:私は「あなたはそれについて心配するべきではない」とは言いませんでした。クローズドソースプログラムが必要な場合は、クライアント側のJavaScriptで記述したくないと言っただけです。難読化を行っても、プログラムが(かなり簡単に)リバースエンジニアリングされるのを防ぐことができないからです。
Claudiu

8
正しい。「JavaScriptを難読化するにはどうすればよいですか」と答えることはありません。難読化は抽象的な概念ではなく、技術的なものです。opは単に「どうやって?」と尋ねました。
Madbreaks 2014年

2
@Madbreaks:問題は彼のコードをオープンソースにしないという文脈にありました。即時の技術的な答えは受け入れられたものですが、コンテキスト内でのより良い答え(たとえば、実際に何をしようとしているのか)は、IMOであり、オープンソースではないクライアント側のJavaScriptを使用することはできません。難読化方法に関係なく、誰でもソースを入手できます。どちらの方法でも両方の答えがここにあり、人々は両方を読んで利益を得ることができます。
Claudiu 2014年

45

無料で利用できるJavaScript難読化ツールがいくつかあります。ただし、JavaScriptをリバースエンジニアリングできない程度に難読化することは難しいことに注意することが重要です。

そのために、私がある程度時間をかけて使用したいくつかのオプションがあります:

  • YUIコンプレッサー。Yahoo!のJavaScriptコンプレッサーは、ロード時間を改善するコードを圧縮する優れた機能を果たします。比較的うまく機能する難読化のレベルは小さいです。基本的に、Compressorは関数名の変更、空白の削除、ローカル変数の変更を行います。これは私が最も頻繁に使用するものです。これはオープンソースのJavaベースのツールです。

  • JSMinは、Douglas Crockfordによって作成されたツールで、JavaScriptソースの縮小を目指しています。Crockford自身の言葉では、「JSMinは難読化しませんが、醜くします」。主な目標は、ブラウザーでの読み込みを高速化するためにソースのサイズを小さくすることです。

  • 無料のJavaScript難読化ツール。これは、実際にコードをエンコードしてコードを難読化しようとするWebベースのツールです。エンコード(または難読化)の形式のトレードオフは、ファイルサイズを犠牲にすることになると思います。しかし、それは個人的な好みの問題です。


19
Javascriptコードはクライアントのマシンで実行する必要があるため、コードをリバースエンジニアリングできないが不可能な点まで難読化することは難しいことではありません。
Schwern、2008年

20
それは統計についてです。難読化の有無にかかわらず、誰かがあなたのコードにアクセスできるようになるしきい値は何ですか?引き続きアクセスできますが、しきい値が高いほど、人数は少なくなります。より少ない人々が何かについて知っているほど、その何かはより安全です。標準的なセキュリティ分類の実践。
Cris Stringfellow

1
テキストエディタで@PeterR検索/置換を行うと、それを読んだり、リバースエンジニアリングしたりすることがはるかに困難になります。それは完璧ではありませんが、文脈の手がかりを取り除くことにより、煩わしさや困難さをさらに追加します。ほとんどのプログラマーはあなたほど賢くないので、これがこのような大きな抑止力になります。
2017

1
@SED私は[ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]、少なくとも[var1, var2,..]1分以内にvarの束を見つけたり置き換えたりできなかった単一のプログラマを知りません。文字列の文字化け、再インデント、および検索/置換を2分以内で行うことができます。いいえ、私は平均的なジュニア開発者よりも賢いです。単純な事実は、クライアント側のJSを不明瞭にする方法はないということです。あなたは自分で5分、MAXを買うことができますが、それは無駄です。これは本当に、追加された「セキュリティ」のコードを知らない人を売るためだけのものです。JSの行を書いたことのある人は誰もそのがらくたを買うことはないでしょう。
Peter R

3
@PeterR 「文字列の文字化け、再インデント、およびvar名の検索/置換を2分以内で行うことができます」 -確かに、先に進んで、構造化された構造のマルチパスミニファイ、難読化、20MBコードベースバンドルで試してください。元のコメント付きのソースコードでも理解するのに数週間かかります。さらに難しくするために、インデントや行などが変更された場合にコードを意図的に破壊する難読化ツールが存在します。
John Weisz

23

私がすること:

A.ハッカーをトロールしてください!

これは、私の偽/難読化された秘密のJavaScriptコードLAUNCHERの2番目の部分になります。あなたがソースコードで見るもの。

このコードは何ですか?

  1. 実際のコードをロードします
  2. カスタムヘッダーを設定します
  3. カスタム変数を投稿する

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B.コードを少し難読化する

それは何ですか?

  1. それはbase64の上記と同じコードです
  2. これは秘密のJavaScriptコードではありません

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C実際のコードを含む、表示が難しいphpファイルを作成する

このphpコードは何ですか?

  1. 正しいリファラーを確認します(ランチャーのドメイン/ディレクトリ/コード)
  2. カスタムヘッダーの確認
  3. カスタムPOST変数をチェックします

すべて問題なければ、適切なコードが表示され、それ以外の場合は偽のコードまたはIPを禁止し、ページを閉じます。

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

base64リファラー= http://here.is/my/launcher.html

シークレットjavascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

偽物= window.open('', '_self', '');window.close();

ここで.. SECRET JavaScriptでイベントハンドラーを定義する場合、おそらくアクセス可能です..起動コードを使用して外部で定義し、ネストされたSECRET関数を指す必要があります。

SO ...コードを取得する簡単な方法はありますか? document.body.appendChild(document.createElement('div')).innerText='Awesome';

これが機能するかどうかはわかりませんが、クロムを使用して、要素、リソース、ネットワーク、ソース、タイムライン、プロファイル、監査をチェックしていますが、上の行は見つかりませんでした。

注1:ChromeでInspect element-> networkからTroll.phpのURLを開くと、偽のコードが表示されます。

注2:コード全体は、最新のブラウザー用に書かれています。polyfillにはさらに多くのコードが必要です。

編集する

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

1
ああ、そうです、私もJavaScriptコードを難読化します。
cocco 2013

1
これはクラッカーをトローリングしようと思っていたところです。PHPを使わずにこのようなものを見たいです:)
pgarciacamou

6
これがおかしいとしても、サイトを適切に検査できるWeb開発者は、どういうわけかソースコードを入手できます。オンラインにした時点では、どのような種類のデータも非表示にする方法はないと思います。
cocco

それは私が考えるどんな難読化でもありません。しかし、コンソールを開く方法を知っているので、非常に単純なbase64エンコード/デコードについても知っている可能性があります。
T.Todua

19

JScramblerを試してください。最近ちょっと試してみて感動しました。詳細をあまり気にせず、すぐに完成させたい人のために、事前定義された設定で難読化用のテンプレートのセットを提供します。必要な変換や手法を選択して、カスタム難読化を作成することもできます。


7
JScramblerサブスクリプションは非常に高価です...最も安いサブスクリプションは最低3か月の価格$ 145を必要とします-それはクレイジーです。
barbushin 2013

1
彼らは今無料プランを持っています。他のサブスクリプションプランはまだその高価です。
user7610 2013

2
無料プランには、最適化と縮小のみが含まれます。
Jean Hominal 2014年

1
「無料プランには最適化とミニファイが含まれています」といえ、難読化と最適化は同時には機能しません。
NiCkニューマン

2
今日のJScramblerのWebサイトともっと詳しい料金プランを見ると、無料のオプションが表示されません。無料試用版のみ
2016年

18

インタープリター型言語の問題は、ソースを送信してそれらを機能させることです(バイトコードにコンパイラーがない限り、逆に逆コンパイルするのは非常に簡単です)。

したがって、パフォーマンスを犠牲にしたくない場合は、変数名と関数名のみを操作できます。それらをa、b ... aa、ab ...、またはa101、a102などに置き換えます。もちろん、可能な限り多くのスペース/改行を削除します(これはいわゆるJSコンプレッサーが行うことです)。
文字列を難読化すると、リアルタイムで暗号化および復号化する必要がある場合、パフォーマンスが低下します。さらに、JSデバッガーは最終的な値を表示できます...


17

私がYUI Compressorに対して提案する他のほとんどの回答とは対照的です。あなたはGoogle Closureを使うべきです

それはより多くを圧縮するのでそれほどではありませんa = [1,2,3,];が、IEを不安定にするようなJavaScriptエラーをキャッチするためです。


5
難読化する前に、エラーや非互換性に対してコードをチェックしないでください。実際の難読化とは関係ありません
phil294 '29 / 11/15

13

非オープンソースのJavascriptベースのアプリケーションはかなりばかげています。Javascriptはクライアント側のインタプリタ言語です。難読化はそれほど保護されていません。

JS難読化は通常、スクリプトを「保護」するのではなく、スクリプトのサイズを縮小するために行われます。コードを公開したくない場合は、Javascriptが適切な言語ではありません。

たくさんのツールがありますが、ほとんどの場合、理由のために名前に「コンプレッサー」(または「ミニファイア」)という単語が含まれています。


11

クライアント側のコードを保護することはできません。GoogleChromeでF12 キーを押し、JavaScriptの実行一時停止すると、暗号化されたものも含め、すべての文字列を取得できます。美化し変数名を変更するすると、ほぼ元のコードが得られます。

サーバーサイドのjavascript(NodeJS)を書いているのが誰かがサーバーにハッキングするのを恐れており、ハッカーの作業をより困難にし、アクセスを取り戻すための時間をより多く与えたい場合は、javacriptコンパイラーを使用します

変数が複数のファイル/モジュールで使用されている場合でも、すべての変数の名前を変更する唯一のツールであるため、高度なコンパイルではClosure Compilerを使用する必要があります。ただし、問題があるだけです。コーディングスタイルで記述した場合にのみ機能します。


クロージャのコンパイルはコードを難読化しない:P
NiCk Newman '18

1
それはそれのために作られたわけではありませんが、うまく機能します:一部のコンパイラー(通常、私が引用したツールを元に戻すことができる)のように余分なコードを追加しませんが、それを一般的ではない方法に変更し、一部は元に戻すのが難しく、未使用を削除しますコードは、実際の難読化と比較してパフォーマンスに優れています。
グスタボロドリゲス

1
良い考えではありません。サーバー側でコードを縮小/コンパイルすると、縮小版にバグがある場合にセキュリティの問題が発生する可能性があります:zyan.scripts.mit.edu/blog/backdooring-js
mgol

引用したバグはUglifyJSにのみ適用されます。ClosureCompilerには適用されません。
グスタボロドリゲス

javascriptファイルの縮小に関心があるすべての人のために、javascript un-minifierもあります。だから私はそれがまったくセキュリティの層だとは思わない
Fillipo Sniper

11

JavaScriptユーティリティをお勧めしますPatrick J. O'Neilによる。それは難読化/圧縮および圧縮することができ、これらはかなり良いようです。とは言え、私はそれをあらゆる種類のビルドスクリプトに統合しようとしたことはありません。

難読化と縮小化については、私は前者の大ファンではありません。これによりデバッグが不可能になり(1行目のエラー... "待機、1行しかありません")、展開に常に時間がかかります。しかし、あなたがする必要があるなら...まあ。


1
しかし、難読化しても必ずしも1行に圧縮されるわけではありません。関数と変数の名前を変更したり、文字列をbase64に変換したりするのと同じくらい簡単です。縮小すると、すべてのコードが1行に配置されます。
rw-nandemo 2014年

今日ではUglifyJSが最良の選択のようです。著者もクールな男です!:)
Tsvetomir Tsonev 2016

デバッグに関しては、ほとんどの場合、テスト時に含めることができるソースマップを生成できるため、たとえ縮小されていても、エラーが発生した行を確認できます。
Luca Steeb

5

最初にYUI Compressorなどで縮小してから、次のようなものを使用してすべての文字列と数値をHEX値に変換することをお勧めします http:ます

これを使用すると、コードを理解することがほぼ不可能になり、この段階では、ハッカーがコードを再実行するのに、実際に最初から書いた場合よりも時間がかかると思います。書き換えと複製は、実際に停止できないものです。やっぱり自由人です!



4

一部の企業(例:JackBe)は、難読化の追加手段として、暗号化されたJavaScriptコードをJSファイルではなく* .gifファイル内に配置しているように見えます。


4

このツールをお試しください Javascript Obfuscator

HTML5ゲームで使用したところ、サイズが950KBから150に減少しただけでなく、ソースコードが判読不能なクロージャコンパイラとミニファイアを元に戻せるようになりました。この難読化を元に戻す方法を個人的に知りません。


4

私は長年Jasobを使用してきましたが、これは最高の難読化ツールです。
高度なUIを備えていますが、直感的で使いやすいです。
HTMLおよびCSSファイルも処理します。

これを使用する最良の方法は、すべてのプライベート変数の前にアンダースコアのようなものを付け、次にこのsort機能を使用してそれらをすべてグループ化し、難読化のターゲットとしてチェックすることです。

ユーザーは、自分のソースを表示することができますが、あなたのプライベート変数は、のようなものから変換されたときには、解読にはるかに困難だ_sUserPreferredNickNamea

エンジンは、ターゲット変数の数を自動的に集計し、最大の圧縮を得るためにそれらに優先順位を付けます。

私はJasobで働いていません。彼らを宣伝しても何も得られません。フレンドリーなアドバイスを提供するだけです。
不利な点は、無料ではなく、少し値段が高いですが、他の選択肢と比較すると価値があります。「無料」のオプションも近づきません。


ジェイソンは、難読化ツールというよりは縮小版のようです。何か不足していますか?
アランマクビー-MSFT 2013年


4

Javaスクリプトの難読化にClosure-Compilerユーティリティを使用しています。それはコードを最小化し、難読化のためのより多くのオプションがあります。このユーティリティは、次のURLのGoogleコードで入手できます:
クロージャーツール

しかし、今日私はUglifyJSの多くを聞いています。Closure CompilerとUglifyJSの間には、Uglifyが勝者と思われるさまざまな比較があります。
UglifyJS:クロージャーに匹敵するNode.js用の高速な新しいJavaScriptコンプレッサー

すぐに私はUglifyJSにチャンスを与えるでしょう。




2

間違いなくObfuscriptorを検討することを検討してください

私は、YUI CompressorGoogle Closureなどの他のツールから見た典型的なJavascriptの縮小テクニックを超えています。

難読化されたコードは暗号化されたように見えます。私が以前に見たものとは異なり。


リンクをありがとう!実際に暗号化された難読化コードとコードを試してみました(キーなし???)。スクリプトを211から36 KBに圧縮しました。

ObfuscriptorはIEでは機能しないことを警告することに注意してください。それは、一部にとって取引ブレーカーです。
アランマクビー-MSFT 2013年

1
答えのリンクはもはやツールを指していません。別のライブ参照は見つかりませんでした。
buzoherbert 2016

最初のリンクは死んでいます。「難読化」
Alp Altunel

2

JavaScriptライブラリーを使用する場合は、クロージャー・コンパイラーの拡張モードのコンパイルと互換性のある(マイナーな変更後)Dojo Toolkitを検討してください。

Dojo – Closure Compilerと互換性のある唯一のJavaScriptライブラリ

Closure Advancedモードでコンパイルされたコードはコードベース全体(ライブラリを含む)が難読化されているため、美化機能を通過してもリバースエンジニアリングすることはほとんど不可能です。また、平均で25%小さくなります。

単純化されたJavaScriptコード(YUI Compressor、Uglifyなど)は、美化機能を通過した後のリバースエンジニアリングが簡単です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.