Hallo Alex!
Wenn Du solche Merkmale heranziehen willst, um Deine SW zu schützen, dann musst Du aber auch bedenken, dass bei den rechtmäßigen Benutzern praktisch jedes Teil der Hardware ausgetauscht werden kann. Wenn man dann für die Software bezahlt hat und sie plötzlich nicht mehr nutzen kann, dann würde ich zumindest zu Recht stinkesauer werden.
Wie wär’s z.B., wenn Du den Rechnernamen zur Identifikation verwendest?
Dann kann der Anwender beliebige Komponenten austauschen, solange der Rechner nach wie vor so heisst, läuft Dein Programm. Klar, man kann den Rechner umbenennen, aber sobald schon zwei gleichnamige Rechner im selben Netz hängen, bekommt man Probleme, die Mißbrauchsmöglichkeiten durch Manipulation der Umgebung sind also relativ gering.
Unabhängig davon musst Du Dir bewusst sein, dass alles, was Du Dir als Lizenzierung überlegst, mit mehr oder weniger (bei .NET weniger) Aufwand umgangen werden kann, wenn es jemand wirklich darauf anlegt.
Daher würde ich nicht wochen- oder monatelang an einer Lizenzierung programmieren, sondern die Zeit lieber in das eigentliche Programm stecken.
Rechne Dir nur mal aus, welcher finanzielle Verlust Dir durch eine Kopie entsteht. Und dann überleg’ Dir, wieviele Kopien zu erwarten sind. Und daraus rechnest Du mal aus, wie lange Du an so einem Kopierschutz arbeiten dürftest, um auf +/- 0 zu kommen (Entwicklungszeit, die Du da reinsteckst, ist letztlich verloren - kein Kunde zahlt für einen Kopierschutz!).
Wenn Du die Installation jeweils rechnerspezifisch schützen willst, dann musst Du irgendwelche Eigenschaften des Systems hernehmen, auf dem installiert wird.
Diese Info hat man ja normalerweise vor der Installation nicht.
Wenn man dann ins Programm (oder in den Installer) eine Routine einbaut, die diese Information irgendwo auf dem Rechner speichert (Registry, versteckte Dateien, …), dann hast Du einerseits in Deinem Programm den Algorithmus, nach dem Du lizensierst, enthalten und damit offengelegt (die Decompiler sind wirklich gut…) und andererseits ist es ein Leichtes, Änderungen an der Registry oder am Dateisystem zu überwachen und herauszubekommen, wo was geändert wurde.
Ein anderer Weg (den auch wir in der Firma gewählt haben), ist, dass der Kunde den oder die Rechnernamen angeben muss, auf denen die SW betrieben werden soll und wir dann eine Lizenzdatei erstellen, die die zulässigen Rechner enthält und die nach der Installation eingespielt werden muss. Diese Lizenzdatei ist mit einem asymmetrischen Schlüssel signiert, kann also nicht ohne weiteres geändert werden.
In der SW ist der public key enthalten, um die Gültigkeit der Signatur überprüfen zu können, den private key zum Erstellen der Signatur haben nur wir.
Funktioniert gut und war mit vertretbarem Aufwand zu realisieren.
Natürlich kann man immer noch hergehen, die Anwendungen decompilieren, die Aufrufe an die Lizenzüberprüfung rausnehmen und wieder compilieren, aber für die allermeisten Kunden reicht diese Art der Lizenzierung dicke…
Gruß,
Martin