Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prinzipfrage Lizensierungs-Mechanismus (https://www.delphipraxis.net/121639-prinzipfrage-lizensierungs-mechanismus.html)

steffen_d 1. Okt 2008 17:37


Prinzipfrage Lizensierungs-Mechanismus
 
Hallo,

ich mache mir gerade Gedanken über einen Lizensierungs-Mechanismus für mein Programm.

Ich habe da an Folgendes gedacht:

In mein Programm baue ich eine Signatur, sprich einen langen String-Schlüssel fest ein.
Aus diesem und dem Namen des Kunden generiere ich einen Hash, z.B. mit MD5.
Namen und Hash packe ich in eine Lizenzdatei, die ich dann an den Kunden schicke.

Mein Programm liest dann aus der Lizenzdatei den Namen des Kunden, generiert daraus und aus dem fest eingebauten Schlüssel wieder den Hash und vergleicht ihn mit dem Hash in der Datei.

Stimmen die Hashs überein, dann ist die Lizenz gültig.

So ähnlich müsste es doch bei anderen Programmen, die man lizensieren muss, auch funktionieren?
Sollte ich das so umsetzen?

Danke und Gruß
Steffen

Alter Mann 1. Okt 2008 17:49

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Hi,

vom Prinzip her ja. Ich würde jedoch dieses Verfahren benutzen.

Wobei der 'öffentliche Schlüssel' im Programm enthalten ist. Weiterhin verwenden einige Systeme die MAC-Adresse der
vorhandenen Netzwerkkarte und kodieren die Freischaltung von Zusatzmodulen.

Gruß

Phoenix 1. Okt 2008 17:55

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Zitat:

Stimmen die Hashs überein
Das wird wohl eine If-Abfrage sein. Sowas kann man in der Regel umgehen, indem man ein einzelnes Byte der Anwendung ändert. Also würde ich lassen. Der Aufwand lohnt sich nicht, denn der damit erreichte Schutz ist viel zu gering.

Florian H 1. Okt 2008 18:59

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Phoenix hat Recht.
Die Schwierigkeit ist es nicht, irgendwelche Lizenzsachen zu entwickeln, die möglichst schwer fälschbar sind - für Produkte die nicht einer breiten Masse von potentiellen Angreifern ausgesetzt sind, ist das ziemlich einfach machbar.
Es ist einfach reltiv sinnlos, weil sich die -Abfrage- ansich schon sehr leicht umgehen lässt, ganz unabhängig davon, wie komplex das Lizensierungssystem ist.

Wenn du wirklich auf einen Kopierschutz Wert legst, auch wenn der Aufwand das kaum rechtfertigt, solltest du ihn weitaus tiefer in das Programm verzahnen als ein "darf ich mit diesen daten laufen? -> (ja/nein)"

Mr_G 1. Okt 2008 19:02

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Zitat:

Zitat von Phoenix
Das wird wohl eine If-Abfrage sein. Sowas kann man in der Regel umgehen, indem man ein einzelnes Byte der Anwendung ändert. Also würde ich lassen. Der Aufwand lohnt sich nicht, denn der damit erreichte Schutz ist viel zu gering.

Bei Luckie habe ich letzens gelesen wie man so eine Abfrage verschleiern kann: Artikel Das würde das ganze noch etwas schwerer machen.
Natürlich gibt es keinen vollkommen Schutz, aber ich denke ein bisschen Sicher ist besser als ganz ohne Schutz.

steffen_d 2. Okt 2008 09:58

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Hallo und erstmal Danke für die Antworten.

Ich probiere gerade den Debugger-Schutz von
der empfohlenen Seite
aus, aber leider funktioniert er nicht so wie er soll.

BeeingDebugged ist immer True. Ich habe die letzten 3 Varianten getestet, im FormCreate:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  BeingDebugged: Boolean;
begin
  asm
   mov eax, fs:[0];
   mov eax, [eax+$30];
   mov eax, [eax+2];
   mov [BeingDebugged], al
  end;
  if BeingDebugged then
    ShowMessage('Beeing Debugged');
end;
Natürlich starte ich meine EXE ausserhalb der Delphi-Umgebung.
Auch wenn das Delphi komplett zu ist, ist BeeingDebugged True.
Ich bin leider nicht der ASM-Guru.

Ich arbeite mit Delphi 7 und Win XP Professional SP3.

Oder mache ich im Aufruf irgendwas falsch?

Danke und Gruß
Steffen

steffen_d 2. Okt 2008 10:38

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Hallo,
nach etwas wühlen in der DP und nochmal nachlesen habe ich
Delphi-Quellcode:
fs:[0]
durch
Delphi-Quellcode:
fs:[$18]
ersetzt:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  BeingDebugged: Boolean;
begin
  asm
//   mov eax, fs:[0];
   mov eax, fs:[$18];
   mov eax, [eax+$30];
   mov eax, [eax+2];
   mov [BeingDebugged], al
  end;
  if BeingDebugged then
    ShowMessage('Beeing Debugged');
end;
So scheint es zu funktionieren.

Da bin ich dann gleich auf das nächste Problem gestoßen:
Die Absicherung bei Win95/98.
Im Prinzie steht ja hier wie es geht, doch hätte ich es auch gern ohne Funktionsaufruf so wie im obigen Beispiel.
Aber wie gesagt, ich weiss nicht wie ich das in ASM hinbekomme:

Danke und Gruß
Steffen

Luckie 2. Okt 2008 10:47

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Ist korrigiert.

Tyrael Y. 2. Okt 2008 10:56

Re: Prinzipfrage Lizensierungs-Mechanismus
 
...also...nur mal kurz meine allgemeine Meinung

1. Ist das Produkt für die breite Masse gedacht?
Wenn ja, dann wird dein Lizenschlüssel eh nicht lange halten und in kurzer
Zeit wird es Generatoren geben. Man kann sich die Mühe machen, aber es lohnt sich aus vielerlei Gründen nicht.
Hier in der DP gibt es genaug Threads dafür

2. Ist das Produkt nur für eine speziellen Marktsegment?
zB. nur für Administratoren, nur für Ärzte, nur für Rechtsanwälte usw.

Wenn ja, dann reicht dein erstes Verfahren völlig aus.
Diese professionellen Nutzer werden dein Produkt eh kaufen, wenn sie es wirklich benutzen wollen.
Solch spezielle Software wird in 99% der Fälle eh nicht geknackt auch wenn es möglcih wäre, der Grund dafür ist simpel.
Derjenige, der einen Generator schreibt ist auf "Ruhm" aus. Wenn das Programm nur von einer speziellen professionellen Klientel benutzt wird, wird sich die Suche nach solchen Generatoren gegen Null einpendeln.

just my 2 cents

p80286 2. Okt 2008 11:14

Re: Prinzipfrage Lizensierungs-Mechanismus
 
Hallo Steffen,

hast Du Brechis Beitrag übersehen?
Zitat:

Code:
function IsDebuggerPresent: boolean; stdcall;
asm
  MOV    EAX, DWORD PTR FS:[$30]  
  TEST   EAX, EAX
  JS     @@W9X
@@WNT:
  MOV    EAX, FS:[$18]
  MOV    EAX, [EAX+$30]
  MOVZX  EAX, [EAX+2]
  RET
@@W9X:
  MOV    EAX, [$BFFC9CE4]
  MOV    ECX, [EAX]
  CMP    DWORD PTR [ECX+$54], 1 
  SBB    EAX, EAX
  INC    EAX
  RET
end;

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Seite 1 von 2  1 2      

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