2011-01-06 14 views
0

最近、コードの難読化について学びました。そのすてきなこと、余裕がある時は、私は別の質問があります。なぜそれをするのですか?さまざまな言語での難読化コードの使用

まずは、PHP、JavaScriptなどのように解釈される言語があります。そこには良い、より安全なもののように見えます。

第2に、これは私にとって本当の効果がないように見える言語です。すべてのネイティブコードがコンパイルされた言語です。例えば、Cとする。コンパイルすると、すべての変数名、関数名、ほとんどの難読化技法がなくなります。いくつかのコードをネイティブコードにすることができれば、サイクルの代わりに再帰のようなものになるでしょうが、逆アセンブルされたコードは名前の代わりに逆アセンブラで生成された識別子を持つでしょう。

最後のカテゴリは、私があまりよく知らない言語です。それが私が求める主な理由です。これらの言語はJava、C#(.NET)、WP7で最後に使用されたSilverlightです。私は、WP7アプリケーションでは、コードの難読化がコードのハッキングを防ぐのに役立つという記事を読んでいるので尋ねます。しかし、私はいつもバイトコードを標準のアセンブラコードとよく似ていると考えていたため、実際のコンパイル前の変数名や関数名などについての情報はもうありませんでした。

+4

あなたが退屈でこのような娯楽に苦しんでいない限り、あるいは世界全体が彼らのすばらしい革新的なアイデアを盗もうとしていると思う編集者でなければ、真実はあなたがそれをしないということです。それがもたらす「セキュリティ」は存在しません。「不明瞭さによるセキュリティ」と同様のセキュリティの誤った感覚です。 – delnan

答えて

2

あなたが望むのであればそれをやりますが、決まった人がそれを怖がっているとは思わないでください。難読化されていないコードが存在していても、難読化されたコードを読むことができます(最適化されたアセンブリを読み込んで元のCコードを再構築できる人がいるように)。コードの難読化はセキュリティの誤った感覚を与え、(コードを盗むことについて真剣に取り組んでいる人を抑止するのではなく)好奇心を持った人を抑止する可能性があります。それがあなたに与えるのは、セキュリティの誤った感覚ですが、本当の意味はありません。 Schneierはこの「セキュリティ・シアター」の名前を適切に指定します。

はい、ソースに関する詳細情報を保持する現代の言語の多くは、コードをコンパイルするためにコンパイルされた言語よりも難読化することができます。後者の場合、コンパイラーはすでに最適化でかなり良い仕事をしています。しかし、従来のアセンブラに似たバイトコードの考え方は、ここでもやや間違っています。特に.NETバイトコードは、元のソースをほぼ正確に再構成するのに十分なメタデータを保持します(Reflectorを参照)。保持されないものには、ローカル変数の名前とメソッドの引数があります。しかし、あなたは依然としてメソッドとクラス名を必要とし、保持しています。

もう1つ注意すべき点:顧客に難読化された実行可能ファイルを与え、プログラムがクラッシュする場合は、難読化されたものではなく、実際のスタックトレースを取得する方法があることを確認してください。 「申し訳ありませんが、わたしのプログラムがあなたの仕事の何時間を殺したのかの根本的な理由は、私が難読化したので断りません」と言いました:-)

+0

まず、ありがとう。私は開発者よりも「学生」の方が多いです。私は主にSWよりもHWに興味があり、大部分は高精度MCUタイミングからCまたはアセンブラで記述します。私は主に、バイトコード化されたコンパイルされたプラットフォームでこれを行うことの本当のメリットがあるかどうかを知る必要がありました。そして、私はあなたの答えに非常に驚いています.Netはメタデータを保存して、元のソースをほぼ再構築しています。どうして?私は常に物事の論理的な目的を探す傾向があります。ご存じのように、アセンブリを読むことは一つのことですが、コード全体をほとんど再構成することはできません。 –

+0

@ B.Gen:バイトコードは実行されたコードの第一歩に過ぎないことに注意してください。その後、ネイティブコードを生成するジャストインタイムコンパイラがあります。なぜそんなに多くのメタデータが保持されるのか、私は正確にはわかりません。しかし、他の.NET言語との相互運用性のためのものもあれば、デバッグサポート(コンパイラやツール生成コードのマーキングなど)のものもあります。バイトコードは静的メソッド呼び出しとラムダ関数のみが残っています。 – Joey

0

難読化はモバイルの一般的なテクニックですハードウェアの制限があるアプリケーション。難読化されたコードは、識別子が小さく、したがってバイナリが小さくなる傾向があります。

+0

Wait、wat?既に問題になっているように、ネイティブコンパイルはとにかにすべての識別子を削除します。さらに、質問に答えることさえできません。 – delnan

+0

Javaは母国語ではありません! – Navi

関連する問題