Egal, was Sie tun, Sie müssen irgendwo einen Verschlüsselungsschlüssel speichern, der dann wiederhergestellt werden kann. Wenn Sie einen Lizenzserver benötigen, kann dies durch Einhängen oder Patchen der Anwendung umgangen werden. Sie können solche Dinge tun, um einen Gegner zu verlangsamen, aber es wird kein vollständiger Schutz sein. Wenn Sie Ihre Software wirklich nicht herausgeben möchten, verwenden Sie eine Client-Server-Architektur mit dem Großteil der Logik auf der Serverseite und verlangen Sie die Authentifizierung von einem bezahlten/autorisierten Benutzer (obwohl Sie dann die Client-Software nicht daran hindern können kopiert oder modifiziert werden, aber das ist normalerweise ein akzeptiertes Risiko).
Angenommen, ich möchte jemandem einen Computer geben, der eine Anwendung ausführt. Ich möchte verhindern, dass das Programm auf einen anderen Computer kopiert oder manipuliert wird.
Es gibt im Handel erhältliche Tools, die dies für Sie erledigen. Wie Sie vermutet haben, gibt es keine kugelsichere Lösung, die nicht von einem engagierten Gegner gebrochen werden kann. Aber in der Praxis gibt es im Handel erhältliche Verschleierer, die für Ihre Zwecke "gut genug" sein können.
Die im Handel erhältlichen Tools können die Software auch an eine bestimmte Hardware binden, indem sie einen "Fingerabdruck" der Hardware nehmen. Auch dies ist wahrscheinlich mit genügend Arbeit spoofbar, könnte aber für Ihre Zwecke "gut genug" sein.
Ein Beispiel für ein im Handel erhältliches Tool ist „.NET Reactor“ (https://www.eziriz.com/dotnet_reactor.htm), das für die Verwendung mit Windows .NET-Software vorgesehen ist. Es kann die Software verschleiern, um Reverse Engineering zu verhindern, und es kann die Software mithilfe einer Hardware-Fingerprinting-Methode an bestimmte Hardware binden.
Eine Strategie, die ich gesehen habe, ist nicht narrensicher, aber wenn Sie eindeutige Hardware-IDs einlesen und diese als Schlüssel zum Entschlüsseln der Software verwenden, würde sie nicht entschlüsselt, wenn sie auf einen anderen Computer verschoben wird.
Das einzige Problem dabei ist, dass die meisten dieser Werte überschrieben werden können, und wenn der Angreifer weiß, von welcher Hardware diese Werte abgeleitet werden, kann er sie reproduzieren, um die Software effektiv zu „entsperren“/entschlüsseln.
Außerdem haben Sie ein Problem, wenn eine dieser Hardware ausfällt und ersetzt wird, müssen Sie jetzt neue Software schneiden – verschlüsselt mit der neuen Kombination von Hardware-IDs für die ersetzte/neue Hardware.