Schutz von Softwarepaketen

3

3,14159265

Gast
Hallo zusammen,

meine Frage betrifft den Schutz von Software, die mit Java erstellt worden ist. Ich habe ein Programm erstellt, welches in dem Ordner "PlugIns" Jar Dateien enthält. Jede dieser Jar Dateien bietet unterschiedliche Funktionalität für die Software. Wenn der User z.B. PlugIn A besitzt, dann besitzt er im Menü auch die Funktion A, wenn nicht dann nicht.
Jetzt besteht natürlich die Möglichkeit, dass ein User, der Funktion A besitzt, diese aus dem PlugIn Ordner raus kopiert und sie einem anderen User gibt - dieser besitzt dann mehr Funktionalität, als er eigentlich sollte.

Wie könnte man dies unterbinden?

Meine Überlegung war: Eine Lizenzklasse anlegen, die über einen Algorithmus eine Seriennummer annimmt, die der User eingeben muss. Jedes PlugIn muss bei Initialisierung schauen, ob es für die Seriennummer gemacht/erlaubt worden ist, oder nicht.

Was haltet ihr davon, auch im Sinne von Performance? Gibt es andere Möglichkeiten, vielleicht auch schon etwas fertiges?

Jeweils unterschiedliche Versionen der Software, mit der jeweiligen Funktionalität, kann ich leider nicht umsetzen, da es zu viele und zu unterschiedliche sind..
 

Atze

Top Contributor
das ganze ohne onlineanbindung? dann kann ein user doch auch die seriennummer weitergeben. es kann ja auch nicht überprüft werden, ob diese weitergegeben wurde. "völlige" sicherheit bekommst du wohl nur über eine authentifizierung übers web, einen dongle oder eine kopiergeschütze cd-bindung.
 
T

Tomate_Salat

Gast
Naja, die Seriennummer könnte man schon so generieren, dass sie durch einfaches copy+paste nicht bei dem anderen Benutzer funktionieren wird. Er könnte auf System.properties zurückgreifen die unterschiede aufweisen können:
- java.vm.version
- java.runtime.version
(wobei hier zu beachten ist: bei einem Java-update gilt die Lizens nicht mehr!)

- java.endorsed.dirs
(Wenn man eine Installation anbietet, welche eine JRE mitliefert)

- os.arch
- os.name
- user.home (OS-Benutzerspezfilisch)
- user.name (OS-Benutzerspezfilisch)

oder eine weitere Möglichkeit:
schreib die Berechtigungen/Seriennummer in die Registry
 
M

Marcinek

Gast
Nach dem Kerkhoffschen Prinzip sollte eine Verschlüsselung nicht auf der Geihmhaltung des Verfahrens basieren. Erfahre Benutzer können immer den code dekompilieren.

Bei sysmetischen Verschlüsselungen bleibt das problem des privaten Schlüssels..

Was würde wohl passieren, wenn man diesen in einer dll Dateiablegt, die in binärcode vorliegt?
 
3

3,14159265

Gast
Es muss ja nicht unbedingt mit einer Seriennummer realisiert werden, ich bin da schon offen, was die Umsetzung angeht. Vor allem würde es mich interessieren, wie ihr das machen würdet..
Habe auch schon daran gedacht, eine ID zu verwenden, die je nach Nutzer generiert und mit der Software ausgeliefert wird - ist dann ähnlich wie eine SN..

Mir geht es bei der Umsetzung auch um das Optimale Verhältnis zwischen Kopierschutz Sicherheit und Performance..
 
T

Tomate_Salat

Gast
@Marcinek: dll schön und gut...nur bindest du dich damit an eine Plattform, außer du schreibst eine für jede P.

@3,1415...: Der Knackpunkt ist immer das Decompilieren. Mit verschlüsselungen habe ich bisher wenig gemacht, es gibt aber glaube ich Techniken, mit 2 keys(privater und öffentlicher schlüssel) und zum auslesen der Daten reicht dir einer, zum verschlüsseln brauchste beide. Da könnteste eine Webseite anbieten, die den Key berechnet und der Benutzer kann nur entschlüsseln, genauere infos: google. Ich habe bisher nur gelesen, dass es soetwas gibt

Stichwort ist glaube ich: asymethrische Verschlüsselung

Edit:

Java:
KeyPairGenerator gen	= KeyPairGenerator.getInstance("RSA");
gen.initialize(512);
KeyPair			keyPair	= gen.genKeyPair();	
			
Cipher c				= Cipher.getInstance("RSA");
c.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] str				= c.doFinal("hallo".getBytes());
			
c.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] decrypt			= c.doFinal(str);
			
System.out.println(new String(decrypt));

nur leider braucht man zum entschlüsseln den Privaten key und wenn du den übergibst, könnte man damit denke ich sicher den öffentlichen(benötigt zum verschlüsseln) generieren :-/
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Java Themen

Neue Themen


Oben