-2

もしそうなら、コードが逆コンパイルされないようにするにはどうすればよいですか?
それとも反射から?実際には、2つは互いに非常に異なっています。
.Net フレームワーク用の Dotfuscator などのツールは、コードが逆コンパイルされるのを防ぎますか? ということは、まだ反省して中身が見えるということでしょうか??

4

2 に答える 2

4

まず、2つの用語の違いを見てみましょう。

リフレクションは、実行時にアセンブリ内の型情報を検出する機能を提供します。これはフレームワークの一部であり、IDEでのコード補完、アセンブリ間の参照などの機能を可能にします。ASP.NETなどのフレームワークでも使用されます(基本的に、マークアップでクラスまたはWebコントロールを参照できます)。インスタンスは、リフレクションを使用して実行時に動的に作成されます)。これは、Webサービス、WCF、Webパーツフレームワーク、セッション状態、AJAXなどのコアであるシリアル化でも使用されます。

逆コンパイルは、マシンコードをより高レベルの人間が読めるコードに変換するための用語です。.NET Frameworkは、アセンブリにいくぶん似ているマシンに依存しない低レベル言語である中間言語(IL)を使用しますが、レジスターなどのCPU固有のものはありません。ランタイム自体は、実際にこのILを取得し、JITと呼ばれるプロセスを介してローカルマシンに実際に固有のコードにコンパイルします。明らかに、ランタイムがコードを理解するには、コードがILに含まれている必要があります(ただし、ILコードをプリコンパイルまたはプリJITするプロセスがあります)。

2つの間に重複はありません。リフレクションは、アセンブリのマニフェストに格納されているメタデータのみを使用し、コンパイラが生成した実際のILコードは調べません。リフレクションを使用して、メソッドが実際にどのように実装されたかを推測することはできません。

そうは言っても、ILコードを難読化するためのさまざまなツールがあり、理解しにくくなっています。1つの人気のある1つのツールDotfuscator

于 2012-12-07T17:12:46.470 に答える
4

どちらも止めることはできません。プログラムを逆コンパイルすると、理解不能で紛らわしいコードが返されるようにすることはできますが、それは依然として有効なコードであり、結果として自分のプログラムと同じように機能するプログラムになります。微妙な変更は難しくなりますが、不可能ではありません。それを行うことは難読化と呼ばれ、これらのツールが何であるかです。

難読化ツールは、すべての変数名を意味のない英数字の値に変更したり、コードの動作を変更しないあらゆる種類のコード リファクタリングを実行したりしますが、同じことを別の方法で実行するだけです (そして、人間は理解する必要がありますが、コンピューターは理解できません)。また、人々を混乱させるためだけに、何もしないコードを追加することもできます。さまざまな難読化ツールがあらゆる種類のさまざまなことを行い、誤ってバグを導入したかどうか、その影響など、いくつかの違いがあります。コンパイルされたプログラムのサイズと、コンパイルされたプログラムが元のソースにどれだけ近いか (確かに、これはやや主観的です) に関するものです。

リフレクションと逆コンパイルは完全に異なりますが、リフレクションに対して同じ効果があります。

于 2012-12-07T17:04:39.453 に答える