14

アプリに「ロック」システムを実装して、アプリがコピーされて違法に使用されるのを防ぎます。システムはハードウェアベースのコードの署名をチェックし、それが私の会社だけが所有する秘密鍵で署名されていることを期待します。(アプリには、署名を検証するための公開鍵があります。)

アプリのロックメカニズムを誰も変更しないようにしたいので、アプリのアセンブリに署名したいと思います。それは理にかなっていると思います。

  1. CLRがアセンブリの署名が無効であると話しているのを見たことがないので、このシステムが実際に機能することを確認したいと思います。しますか?それを機能させるにはどうすればよいですか?
  2. 攻撃者はCLRに集中して、私の署名を気にしないようにすることができますか?つまり、私が署名したために彼が私のコードを改ざんできない場合、彼はCLRを改ざんできますか?
  3. 一般的に、私はそのようなセーフガードと保護技術についてのあなたの経験を知りたいです。誰かが他に何か提案できますか?
4

4 に答える 4

12

アセンブリ署名は、アプリケーション/アセンブリがアセンブリを参照できるようにし、最初に参照したアセンブリを確実に取得できるように設計されています。誰かがそうしたければ、理論的にはアプリ全体を逆コンパイルし、署名なしで再コンパイルすることができます。(つまり、参照アセンブリを再コンパイルして、参照アセンブリの署名されていないバージョンを参照することができます)。

クライアント (exe) は署名されていない (または「再署名された」) dll を参照するため、必要に応じてコードを変更できます。

逆コンパイルと再コンパイルのプロセスをより困難にするために、マネージ コードとネイティブ コードの両方を含む混合モードの C++/CLI アセンブリを作成してみることができます。しかし、ええ...最終的には、人々はあなたのバイナリをすべて手に入れ、十分な努力をすれば、おそらくあなたが考えたライセンスシステムを回避することができます.

于 2008-12-18T12:02:44.300 に答える
6

署名されたアセンブリについては、ある程度の誤解があります。mackenir が指摘したように、アセンブリ署名は、アセンブリが改ざんされるのを防ぐために使用される安全なメカニズムではありません。codeproject に関する次の記事では、この件についてかなり適切に扱っています。

http://www.codeproject.com/KB/security/StrongNameExplained.aspx

于 2008-12-18T12:29:26.367 に答える
5

コードに署名すると、改ざんの検出が可能になるだけで、防止することはできません。彼らが何をしているかを知っている誰かがあなたの署名を削除し、必要に応じて自分の署名を追加することができます.

実際、ほとんどのコピー防止スキームは時間の無駄であり、覆される可能性があります。また、お金を払っている顧客をひどく悩ませる傾向もあります. 最終的に、誰かが制御するハードウェアでコードを変更して実行するのを防ぐことはできません。購入部門に行って小切手を書いてもらうのが簡単になり、ライセンスされたコピーを持っていないことを忘れにくくなるように、十分に難しくしてください. 気にする人は最終的に支払いますが、気にしない人は支払いません。

また、ほとんどの人があなたの計画をわざわざ解読しない、またはそれを行うスキルがないと思っていても、それは問題ではないことに注意してください。ある人があなたのコピープロテクトスキームを覆すと、トレントサイトでそれを行うスキルのない人が利用できるようになり、ゲームオーバーになります.

于 2008-12-18T12:00:51.057 に答える
2

改ざんを防ぐために使用できる手法の 1 つは、アセンブリの公開キーを使用して、アプリケーション/アルゴリズム パラメーターなどのソフトウェアの重要な部分を暗号化することです。公開鍵が変更されていると、復号化が機能せず、アプリがクラッシュします。

Crypto Obfuscatorなどの一部の難読化ツールは、この手法を文字列暗号化機能と共に使用します。アセンブリの公開キーを使用して、すべての文字列を暗号化します。公開鍵が変更または削除されている場合、復号化は失敗し、アプリは起動しません。

于 2009-11-04T09:44:35.547 に答える