AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kopierschutz einer Anwendung

Offene Frage von "Martin W"
Ein Thema von Martin W · begonnen am 21. Nov 2006 · letzter Beitrag vom 10. Feb 2007
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#1

Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 14:13
Hi;

Ich habe mir ein Kopierschutz / Passwortschutz ausgedacht, welchen ich euch kurz erklären möchte. Bitte nennt mir Schwachstellen und Verbesserungsvorschläge.

Folgendes soll der Schutz können
  • (a) Eine Programmlizenz darf nur einmal verwendet werden
  • (b) Eine Programmlizenz muss einer Firma zugeordnet werden können

Gegenbenheiten
  • Ex existiert ein einmaliger PC Key (Hardware, Windows Produkt ID, etc...) der nicht veränderbar und einmalig ist
  • Jede Firma bekommt eine (!) Seriennummer
  • Jede Firma bekommt einen Installationskey
  • Für jede Lizenz die erstellt wird wir eine einmalige Nummer angelegt

Beispiel: Kunde Müller bestellt 10 Lizenzen unseres Programmes
Also bekommt er von uns:
  • Eine (!) Seriennummer, z.B. Beispiel 001-SER-IEN-N00-000
  • 10 Lizenzdateien

Die Lizenzdateien haben den Inhalt
Zitat:
Lizenzdatei
Seriennummer=001-SER-IEN-N00-000
ClientID=000-000-000-001
HashSum=<<<Prüfsumme der oberen Werte zum Schutz vor Veränderungen>>>
Die CLientID wird je Lizenz vorlaufend hochgezählt, also:

Zitat:
Lizenz 1 :: ClientID=000-000-000-001
Lizenz 2 :: ClientID=000-000-000-002
Lizenz 3 :: ClientID=000-000-000-003
Lizenz 4 :: ClientID=000-000-000-004
Anschließend verkaufen wir das ganze und Tragen in unser Webdatenbank folgendes ein:

Delphi-Quellcode:
Tabelle HardwareKeys

Client ID Hardwarekey
----------------------- -----------------------
ClientID=000-000-000-001 <Liste> (noch leer)
ClientID=000-000-000-002 <Liste> (noch leer)
{...}
ClientID=000-000-000-010 <Liste> (noch leer)


Tabelle Installkeys

Seriennummer Installkey
----------------------- -----------------------
001-SER-IEN-N00-000 INS-TAL-L02-302

Wir schicken dem Kunden das Packet zu, und legen eine CD mit rein (Das Programm), sowie eine weitere CD mit den 10 Lizenzdateien. Auf einen Zettel schreiben wir den Installationskey (INS-TAL-L02-302). Auf dem Zettel mit dem Installationskey schreiben wir außerdem drauf, das der Installationskey VERTRAULICH zu behandelt ist.

... die post verschickt das Packet ...

... am Nächsten Morgen kommt es beim Kunden an, er packt es aus und Installiert auf PC1 die Software. Für die Installation ist kein Code erfoderlich. Beim ersten Start des Programmes erstellt das Programm den einmaligen PC Hardware Key.

Das Programm fragt nach einiger gültigen Lizenzdatei, welcher wir ihm geben. Er verbindet sich mit unserem Webserver und schaut, in der Tabelle "Installkeys" ob die Seriennummer aus der Lizenzdatei vorhanden ist.

Wenn die Seriennummer vorhanden ist, fragt er uns nach dem Installationskey. Wir geben ihn also ein (INS-TAL-L02-302). Er prüft ob mit Hilfe unserer Webdatenbank mit der Tabelle Installkeys, ob die Seriennummer + Installkey zusammengehören. Wenn ja, registriert sich das Programm in der Tabelle HardwareKeys mit seinem PC Hardwarekey. Wenn der Hardwarekey (1234-Hard-ware) lauten würde, würde unsere Webdatenbank danach so aussehen:

Delphi-Quellcode:
Tabelle HardwareKeys

Client ID Hardwarekey
----------------------- -----------------------
ClientID=000-000-000-001 1234-Hard-ware
ClientID=000-000-000-002 <Liste> (noch leer)
{...}
ClientID=000-000-000-010 <Liste> (noch leer)


Tabelle Installkeys

Seriennummer Installkey
----------------------- -----------------------
001-SER-IEN-N00-000 INS-TAL-L02-302
Eine ClientID ist also jetzt einem PC Hardware Key in unserer Datenbank zugeordnet.

Was passiert nun wenn wenn ein anderer PC (mit einem anderen Hardwarekey) ebenfalls versuchen würde, mit einer ClientID welche bereits auf einen andern PC registriert ist, das Programm zu starten?

Wenn er merken würde, das die ID bereits vergeben ist und den Start verweigern würden hätten wir ein Problem: Wenn die Hardware geändert wird, könnte der Kunde das Programm nicht mehr starten.

ALso registriert sich der PC ebenfalls mit seinem Hardwarekey (4567-Hard-ware) in der Liste. Dafür fragt er zuerst nach dem geheimen, zur Seriennummer gehörenden Installkey, erst dann lässt sich das Programm registrieren. Dann sieht unsere Webdatenbank so aus:

Delphi-Quellcode:
Tabelle HardwareKeys

Client ID Hardwarekey
----------------------- -----------------------
ClientID=000-000-000-001 1234-Hard-ware
                               4567-Hard-ware

ClientID=000-000-000-002 <Liste> (noch leer)
{...}
ClientID=000-000-000-010 <Liste> (noch leer)


Tabelle Installkeys

Seriennummer Installkey
----------------------- -----------------------
001-SER-IEN-N00-000 INS-TAL-L02-302

Oben in der Liste der HardwareKeys einer ClientID steht immer der zu letzt hinzugefügte / überprüfte Key!

Dieser Vorgang passiert nun bei jedem programmstart und zusätzlich noch mal alle 24 Stunden wenn das Programm dauerthaft läuft. Er prüft jedesmal, ob die Kombination von ClientID + seinem HardwareKey vorhanden ist. Des weiteren Überprüft er, ob Sein Hardwarekey auf Platz 1 der Liste steht. Wenn dies nicht der Fall ist, wird sein Key auf Platz 1 gesetzt.


--------------

Zusammenfassung der ganz oben genannten Punkte

(a) Eine Programmlizenz darf nur einmal verwendet werden

Bei jeder Änderung wird auf der Logdatei unseres Webservers ein Eintrag erstellt. Normalerweise sieht diese im Zeitraum vom 01 Januar bis 07 Januar so aus:

Zitat:
01-Jan-07 10:00 Uhr :: HardwareKey (1234-Hard-ware) wurde ClientID (000-000-000-001) hinzugefügt
Würden 2 Computer ein und die selbe Lizenz verwenden sieht die Log so aus:

Zitat:
01-Jan-07 10:00 Uhr :: HardwareKey (1234-Hard-ware) wurde ClientID (000-000-000-001) hinzugefügt
01-Jan-07 10:00 Uhr :: HardwareKey (5678-Hard-ware) wurde ClientID (000-000-000-001) hinzugefügt
01-Jan-07 10:23 Uhr :: HardwareKey (1234-Hard-ware) wurde ClientID (000-000-000-001) als Default Wert festgelegt
01-Jan-07 10:33 Uhr :: HardwareKey (5678-Hard-ware) wurde ClientID (000-000-000-001) als Default Wert festgelegt
01-Jan-07 10:55 Uhr :: HardwareKey (1234-Hard-ware) wurde ClientID (000-000-000-001) als Default Wert festgelegt
01-Jan-07 11:03 Uhr :: HardwareKey (5678-Hard-ware) wurde ClientID (000-000-000-001) als Default Wert festgelegt
01-Jan-07 11:04 Uhr :: HardwareKey (1234-Hard-ware) wurde ClientID (000-000-000-001) als Default Wert festgelegt
01-Jan-07 18:04 Uhr :: HardwareKey (5678-Hard-ware) wurde ClientID (000-000-000-001) als Default Wert festgelegt
Diese Log wäre für uns In der Form ein Idiz dafür, das eine Lizenz doppelt verwendet wird.


(b) Eine Programmlizenz muss einer Firma zugeordnet werden können

Ist dank der einmaligen Seriennummer je Firma ohne Probleme möglich. So kann geschaut werden, welche Firma illegalerweise eine Lizenz weitergegeben hat.


Gibt es in der denkweise Schwachstellen ? Was bitte erst mal außen vorbleibt, sind die Möglichkeit das Programm zu patchen und die Abfrage zu überbrücken.


Eine Frage bleibt offen: Wie erstelle ich einen einmaligen, unfälschbaren Hardwarekey... ?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 14:20
Hallo,

eine kleine Bemerkung:
Dein Verfahren setzt voraus, das alle Client PCs Internetzugang haben.
Ist es immer sichergestellt, dass dem so ist?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 14:24
Bei der Installation kann folgendes ausgewählt werden:

a) Ein Rechner hat direkten Internetzugriff
b) Ein Rechner verbindet sich über ein "Connectionprogramm", welches auf einem Server im Netzwerk liegt, der immer I- Net Zugang hat. Das Connectingprogramm schleift die Packete einfach weiter zwischen CLient und Webdatenbank.

Aber ein Computer im Netzwerk der immer INternetzugang hat, so etwas setze ich voraus.
  Mit Zitat antworten Zitat
pap80b

Registriert seit: 21. Nov 2006
Ort: Berlin
4 Beiträge
 
#4

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:32
Gehen wir mal davon aus, die Daten werden verschlüsselt übermittelt, damit niemand einfach etwas nachprogrammiert, was anstatt des Servers eine Lizenzbestätigung rausschickt.

Wenn die Software auf einer virtuellen Maschine installiert wird, kann man diese dann auf mehrere Arbeitsplätze kopieren und das Programm kriegt es nicht mit.

Man könnte die Software auf einen Server installieren und über Remote Desktop mit der arbeiten.
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:36
Zitat:
Wenn die Software auf einer virtuellen Maschine installiert wird, kann man diese dann auf mehrere Arbeitsplätze kopieren und das Programm kriegt es nicht mit.
OK, das ist nicht ganz einfach zu lösen...


Zitat:
Man könnte die Software auf einen Server installieren und über Remote Desktop mit der arbeiten.
Programm darf nur einmal gestartet werden, und da eine Lizenz vorhanden ist passt des... Merhmals starten auf einem Server geht net, kopieren ja eh net...
  Mit Zitat antworten Zitat
pap80b

Registriert seit: 21. Nov 2006
Ort: Berlin
4 Beiträge
 
#6

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:42
Habe es selbst nicht getestet, ist aber eventuell einen Versuch wert.

function VMware: LongBool; stdcall;
begin
Result := False;
{$IFDEF CPU386}
try
asm
mov eax, 564D5868h
mov ebx, 00000000h
mov ecx, 0000000Ah
mov edx, 00005658h
in eax, dx
cmp ebx, 564D5868h
jne @@exit
mov Result, True
@@exit:
end;
except
Result := False;
end;
{$ENDIF}
end;

Quelle: http://www.buha.info/board/showthread.php?p=301232
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:45
Joa danke, des kommt auf jeden Fall nach dem ausgibigen Test mit rein..

Siehst du noch schwachstellen soweit? Wie kann man einen Hardwarekey erstellen?
  Mit Zitat antworten Zitat
pap80b

Registriert seit: 21. Nov 2006
Ort: Berlin
4 Beiträge
 
#8

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:52
Man könnte z.B. die MAC Adresse der Netzwerkkarte in die Harwarekennung mit reinnehmen.
Es gibt zwar auch hierfür Programme, mit denen man diese fälschen kann, aber schließlich wird das Patchen ja auch außen vor gelassen.
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:55
Das Patchen MEINER Anwendung wird ausgeschlossen... PAckete zum Server sniffen, etc... all das ist möglich...
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Kopierschutz einer Anwendung

  Alt 21. Nov 2006, 15:59
Zitat von pap80b:
Habe es selbst nicht getestet, ist aber eventuell einen Versuch wert.

function VMware: LongBool; stdcall;
begin
Result := False;
{$IFDEF CPU386}
try
asm
mov eax, 564D5868h
mov ebx, 00000000h
mov ecx, 0000000Ah
mov edx, 00005658h
in eax, dx
cmp ebx, 564D5868h
jne @@exit
mov Result, True
@@exit:
end;
except
Result := False;
end;
{$ENDIF}
end;

Quelle: http://www.buha.info/board/showthread.php?p=301232
Delphi-Quellcode:
{
  Orginal code by Gobo
}

function IsVirtualMachine: Boolean;
var
  Temp: Array[0..5] of Byte;
  TempB: Byte;
begin
  asm
    sidt Temp
    mov bh, byte ptr [Temp + 5]
    mov TempB, bh
  end;
  case TempB of
    $ff, $e8:
      Result := True;
    else
      Result := False;
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz