4

ほとんどすべての .net アセンブリは、Reflectionを使用して逆コンパイルできます。これは、他の開発者がコードを簡単に使用できるため、すべての .net 製品がオープン ソースであることを意味します。簡単にクラックされたり悪用されたりしないように、コードを暗号化する方法はありませんか (少なくとも一部のセキュリティ ロジックでは)。

編集

古い質問winforms .net は本当にオープン ソースと同等ですか? オープンソース という言葉の適切な使用に関するコメントを考慮して編集されました

4

6 に答える 6

10

.NET アセンブリを暗号化して、Reflector や同様のツールによる逆コンパイルを防止できるツールがあります。また、難読化、埋め込みリソースの保護など、多くの関連サービスも実行します。私が知っているのは次の 2 つです。

RemoteSoft サラマンダー スイート
XHEO DeployLX

于 2010-01-21T05:07:52.780 に答える
9

いいえ

すべてのコードは、リバース エンジニアリング、コピー、クローン、再利用、再リンクなどを行うことができます。オープンソースとは、法的な意味で制限がなく、人々がコードから学ぶことができるということです。これはまた、テクノロジーが成長し、短期主義ではなく、より強力な長期的なテクノロジー経済を生み出すことができることを意味します。「大聖堂とバザール」を読んで、偏った、しかし関連のある視点を見つけてください。

高度な難読化ではなく、あいまいさによるセキュリティのみである、十分に強力なコード保護方法を私は知りません。あなたの質問だけでも、質問の意図の 技術的、論理的、そしておそらく哲学的な性質を読んで調査することにより、あなたが尋ねているトピックについてもっと知る必要があると言っています.

編集:「オープンソース」という用語の使用が撤回されたとしても、私は自分の原則を支持します。

于 2010-01-21T05:06:56.997 に答える
6

コードを暗号化して(少なくとも一部のセキュリティロジックでは)、簡単に解読されたり誤用されたりしないようにする方法はありません。

他の人々はコード難読化ツールに触れましたが、あなたが本当に達成しようとしていることを自問してください:

  • コードをより「安全」にしようとしていますか?隠すことによるセキュリティは比較的弱い戦略であるだけでなく、とにかく機密データをソースコードに入れてはいけません!パスワード、接続文字列などをコードから構成ファイルに移動します。

    おそらく、物理マシンに誰もアクセスできない限り、アプリケーションは安全です。攻撃者が物理マシンを持っている場合、とにかくすべての希望がなくなったと推測できます。

  • プロプライエタリアルゴリズムを保護しようとしていますか?特許を取得するためにお金を払いたくない場合は、最もよく試された真の戦略は、制御するサーバー上のWebサービスを介してAPIを公開することです。アプリはWebサービスを呼び出します。つまり、パフォーマンスが低下し、インターネットに接続しているユーザーに依存しますが、少なくともコードは完全に安全です。

  • ユーザーがソフトウェアを著作権侵害するのを防ごうとしていますか?キーシステムのライセンスに関するSOに関する投稿はたくさんあります。

于 2010-01-21T05:21:43.073 に答える
1

何でもリバースエンジニアリングできます。.NET アセンブリはより簡単に逆コンパイルできますが、コードを理解しにくくするために利用できる多くの難読化ツールがあります。

顧客に出荷するコードを暗号化する良い方法はありません。ある時点で、コードを実行するために復号化する必要があります。つまり、クライアント マシンにはこれを実行できる機能が必要です。クライアント マシンにコードを復号化する機能がある場合、そのマシンにアクセスできる他のユーザーも復号化できます。

この問題は .NET アセンブリに固有のものではありません。どのアプリケーションも逆コンパイルの影響を受けます。元のソースのセキュリティが主な関心事である場合は、アセンブリを外部から分離できるため、おそらく Web ベースのアプリケーション (Web サイトや Web サービスなど) の方が適しています。

于 2010-01-21T05:06:37.030 に答える
0

オープンソースが必要な場合は、モノフレームワークを試してください。その一部には、共通言語インフラストラクチャCLIの一部としてMicrosoftによって公開されていない部分があります。「いいえ」と答えた場合、どこでも全体の一部を使用または再利用/公開することはできません。また、オープンソースでマイクロソフトによって管理されているローター共有ソース共通言語インフラストラクチャ2.0を確認することもできますが、 CLIだけのウィンドウフォーム名前空間は含まれていません。それは学習と研究の目的のためだけです。Microsoftは、codeplexのMPLでコードを公開しています。。オープンソースであっても、GPLとLGPLには違いがあるので、ライセンスを注意深く読んでください。学習目的のリバースエンジニアリングは、たとえば、コードに含まれていない問題が発生した場合に備えて、デバッグしたい場合は問題ないと思います。その目的のために、マイクロソフトは、シンボルサーバーから直接フレームワークソースを使用することを許可しています。Visual Studioを構成して、任意の.NET Frameworkのソースとsymbol:tをダウンロードし、それをデバッグして、フレームワークコードでどのように何が発生するかを確認します。これは、 shawnburkeブログでそれを行う方法についての非常に良い記事です。

于 2010-01-21T05:24:27.937 に答える
0

あいまいさは永遠にあなたを助けることはできません...

逆コンパイルされたコードには、有用な変数/クラス名がある場合とない場合があり、コメントがないことは間違いありません。もちろん、著作権は引き続きあなたに属します。

したがって、法的には逆コンパイルされたプログラムを使用することはできません(または逆コンパイルすることさえできません)。変数として var1...9999 を使用するなど、基本的なあいまいさのために使用できるいくつかのオプション(デフォルトでオンになっていない場合)があると確信しています名前とクラス名。

于 2010-01-21T05:14:15.233 に答える