3

私の .net アプリケーションでは、リフレクションを特定のアセンブリに制限したいと考えています。つまり、特定のアセンブリが、それ以外のアセンブリではなく、いくつかの事前定義されたアセンブリのみに反映されるようにしたいということです。どうやってやるの?

編集:

このツールは、アセンブリの .NET 逆アセンブリと逆コンパイルを完全にシャットダウンします。一部の定義済みアセンブリがこのアセンブリを反映できるようにしたいが、これを行う他のアセンブリを制限したい。AssemblyOne が AssemblyTwo に、あなたが私を反映できる許可を与えているなど、アセンブリに関して宣言する必要があるものが欲しいので、AssemblyTwo だけがそれを完全に信頼して反映できるはずです。

4

4 に答える 4

9

リンク先のツールは、基本的にアプリケーション全体をネイティブ コードにコンパイルします。これは、Reflection などを実際に「シャットダウン」するのではなく、アプリケーションをまったく別のものに変えるだけであり、もはやバイトコードではなく、技術的には .NET アセンブリでもありません。

完全に信頼された呼び出し元は、常に.NET アセンブリとその内部のすべてに対してリフレクションを使用できます。(a) 十分な忍耐力と決意があれば誰でも難読化を解除できる難読化、または (b)あらゆる種類のリフレクション (および他の多くの便利な機能) を防ぐネイティブ コードにコンパイルすることを除けば、これを防ぐことはできません。特定のアセンブリに制限することはできません。

ReflectionPermissionAttribute、他の回答の1つとは反対に、発信者がコードを反映するのを妨げません。むしろ、そのコードからReflection API へのアクセスを制御します。ここでは何の役にも立ちません。

とにかく、コードやクラス構造を非表示にすることがなぜそれほど重要なのですか? NSA で働いている場合を除き、ほとんどのコードはそれほど価値がなく、秘密でもありません。ほとんどのアプリケーションは、十分な時間とリソースがあれば、簡単にリバース エンジニアリングできます。現実的には、攻撃者または剽窃者は、Reflector からコードをコピーしたり、Reflection を使用して API を発見したりしても、ほとんど得られません。

私は自分自身のことしか話せないと思いますが、クールな機能を実装するか、内部コードを保護するために投資するために 1 日自由に使えるとすれば、実際に価値を付加する新しい機能に常に取り組みます。

于 2010-04-09T18:54:45.117 に答える
5

その人がアセンブリを完全に信頼している場合、アセンブリのどの部分にもアクセスできないようにすることはできません。

http://www.pcreview.co.uk/forums/thread-2196297.php

于 2010-04-09T18:10:26.837 に答える
4

反省がたまりません!:-)

ネイティブコードを書く以外にリフレクションを防ぐことはできないと思います。それでいて分解可能。一部のコードを許可されていない人の手に渡らないようにする必要がある場合は、管理しているサーバーにコードを保管し、リモート アクセスを許可します。

于 2010-04-09T18:10:34.763 に答える
2

反射を制限したいというあなたのシナリオは何だろうと思っています。コードベースに組み込まれた極秘データを公開することを心配していますか? 信じられないほどスマートなコードの塊で、それを使って何らかの利点を得ることができますか?

私が尋ねる理由は、私たちがソフトウェア開発で行っていることはすべて、コード ライブラリ レベルでそれ自体が非常にユニークであり、人々がそれを見ないことを要求するものであるとは信じていないということです。 . リフレクションをブロックしたい理由について言及していないので、アクセスを制限するためにシナリオが(少なくとも私のPOVから)理にかなっているのかどうかはわかりません。

アクセスを制限することでどこにでも行けるような現実世界のシナリオは考えられません。今日のシステムを構成するのは、特定のコードの塊の素晴らしさではなく、完全なパッケージ (UX、顧客サービス、急速な進化を維持すること) です。使用ペースなど)。あなたのコードが良いものであれば、それは時間の経過とともに変化するので、誰かがそれを「クラック」すると、現在の反復から 2 ステップ遅れます (少なくとも)。あなたの価値はあなたの頭脳であって、集合体ではありません。

また、セキュリティ上の理由でそれを行っている場合は、リフレクションをブロックして「保護」しようとするべきではありません。

繰り返しになりますが、私が思いもよらなかったリフレクションをブロックする正当な理由があるかもしれませんが、努力する価値があるとは思えず、そのエネルギーを他の場所に費やすほうがよいと私は信じがちです...そのコードを作成するときのようにもっと上手にブロックしたい。

于 2010-04-09T18:57:31.983 に答える