.NET アセンブリへの署名:これは本当にアセンブリを改ざんから保護しますか?
-
22-08-2019 - |
質問
アプリに「ロック」システムを実装し、アプリが違法にコピーされたり使用されたりしないようにしています。システムはハードウェアベースのコードの署名をチェックし、私の会社だけが所有する秘密キーで署名されることを期待します。(アプリは署名を検証するための公開キーを取得しています。)
アプリ内のロック機構を誰も変更しないようにしたいので、アプリのアセンブリに署名したいのですが、それは理にかなっていると思います。
- CLR がアセンブリの署名が無効であることについて話しているのを見たことがなかったので、このシステムが実際に機能することを確認したいと思います。そうですか?機能させるにはどうすればよいですか?
- 攻撃者は CLR に集中して、私の署名を無視できるでしょうか?つまり、私が署名したために彼が私のコードを改ざんできない場合、彼は CLR を改ざんできるでしょうか?
- 一般的に、そのような安全策と保護技術についてのあなたの経験を知りたいと思います。他に何か提案できる人はいますか?
解決
アセンブリの署名は、アプリケーション/アセンブリはアセンブリを参照し、彼らは元々参照アセンブリを得ることを確認することができるように設計されています。誰かがしたい場合、彼らは理論的にはあなたの全体のアプリを逆コンパイルしていない署名で再コンパイルできます。ます。
:(すなわち、それはのの参照アセンブリの符号なしのバージョンを参照するように、彼らはの参照アセンブリのを再コンパイルすることができ) クライアント(EXE)は今、符号なし(または「再署名」)DLLを参照しますので、そして、彼らは、彼らが望んでいたとして、コードを変更することができるだろう。
逆コンパイルおよび再コンパイルの過程をより困難にするには、管理対象とネイティブコードの両方を含む混合モードのC ++ / CLIのアセンブリを作成してみてください。しかし、ええ...最終的には人々が手にすべてのバイナリを持っており、十分な努力で、おそらくあなたがアップだと思う任意のライセンスシステムラウンドを取得することができます。
他のヒント
署名アセンブリに関する誤解のcertaining量があります。アセンブリの署名はmackenirが指摘したように、安全なメカニズムが改ざんされてからアセンブリを防ぐために使用されるように、ではありません。 CodeProjectの上の次の記事では、被写体のかなり良い治療を提供します:
http://www.codeproject.com/KB/security/StrongNameExplained.aspx >
あなたのコードに署名するだけで、それを防ぐことはできません、改ざん検出を可能にします。彼らが何をしているかを知っている誰かがあなたの署名を削除し、必要な場合は、独自に追加することができます。
本当にほとんどのコピー保護スキームは、時間の無駄であり、堕落することができ、彼らはまた、あなたの有料顧客の地獄を困らせるために傾向があります。最終的に、あなたは彼らがコントロールするハードウェア上でのコードを変更し、実行しているから誰かを防ぐことはできません。ただ、購買部門に移動して書かれた小切手を取得することが容易であり、あなたがライセンスコピーを持っていないことを忘れることは困難であるということは十分に困難になります。最終的に支払うことになります気にする人、およびそれらの誰行いません。
また、あなたはほとんどの人があなたのスキームを割れ気にしない、またはそれを行うためのスキルを持っていないだろうと思っても、それは問題ではないことに注意してください。 1人は、あなたのコピー保護スキームを覆した後、彼らはそれを行うには、スキルのない人のためのTorrentサイト上でそれを利用可能にすることができ、それはゲームオーバーですので。