何をするにしても、暗号化キーをどこかに保存する必要があります。これは回復可能です。ライセンス サーバーが必要な場合は、アプリケーションをフックまたはパッチすることで回避できます。敵の動きを遅くするためにこのようなことを行うことはできますが、完全な保護にはなりません。本当にソフトウェアを配布したくない場合は、サーバー側に大部分のロジックを備えたクライアント/サーバー アーキテクチャを使用し、有料/許可されたユーザーからの認証を要求します (ただし、クライアント ソフトウェアの配布を防ぐことはできません)。コピーまたは変更される可能性がありますが、通常は許容されるリスクです)。
<ブロック引用>
アプリケーションを実行している誰かにコンピュータを渡したいとします。プログラムが別のコンピュータにコピーされたり、改ざんされたりすることを避けたいと考えています。
これを行う市販のツールがあります。ご想像のとおり、熱心な敵によって破られない防弾ソリューションはありません。ただし、実際には、目的に「十分」な市販の難読化ツールがあります。
市販のツールは、ハードウェアの「フィンガープリント」を取得することで、ソフトウェアを特定のハードウェアに関連付けることもできます。繰り返しますが、これはおそらく十分な作業でスプーフィング可能ですが、目的には「十分」である可能性があります。
市販のツールの一例は、Windows .NET ソフトウェアで使用する「.NET Reactor」(https://www.eziriz.com/dotnet_reactor.htm) です。ソフトウェアを難読化してリバース エンジニアリングを妨害し、ハードウェア フィンガープリンティング法を使用してソフトウェアを特定のハードウェアに関連付けることができます。
私が見た 1 つの戦略は絶対確実ではありませんが、一意のハードウェア ID を読み取り、それをソフトウェアを復号化するためのキーとして使用すると、ソフトウェアが別のマシンに移動された場合、復号化されません。
これに関する唯一の問題は、これらの値のほとんどが上書きされる可能性があり、攻撃者がこれらの値がどのハードウェアから導出されているかを知っている場合、それらを再現してソフトウェアを効果的に「ロック解除」/復号化することです。
さらに、そのハードウェアのいずれかが故障して交換された場合、新しいソフトウェアをカットする必要があります。交換された/新しいハードウェアのハードウェア ID の新しい組み合わせで暗号化されます。