Lizenzverwaltung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
pascalts
Beiträge: 61
Registriert: Fr 10. Okt 2014, 13:16

Lizenzverwaltung

Beitrag von pascalts »

Nun habe ich mein Programm fast fertig und möchte natürlich etwas Kontrollieren, wer es nutzen darf. Dazu habe ich mir folgende Gedanken gemacht:

  • Es soll vom Programm die MAC-Adresse des PC's ausgelesen werden (wenn mehrere vorhanden alle)
  • Diese wird mit einem Server (Debian Wheezy) abgestimmt (--> ist die / eine der MAC verfügbar?)
  • MAC in Liste vorhanden --> Programm schreibt eine Information (in eine versteckte config Datei / die Registry) und ist somit "Lizensiert"
  • Die Abfrage wird erst 1 Jahr später wieder durchgeführt

Im simpelsten Fall könnte ich jetzt eine txt Datei auf meinen Server klatschen und die auslesen lassen... das könnte aber auch jeder der die IP (fest) des Servers kennt... Gibt es vielleicht eine galante Lösung, die von außen nicht so leicht zu durchschauen ist?

Es geht mir hier nicht um ein bombensicheres System... nun Ottonormaluser soll das Programm nicht auf 10000000 Rechnern nutzen können.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Lizenzverwaltung

Beitrag von mschnell »

Wenn Du den Server nicht mehr betreibst, ist das Programm nicht mehr nutzbar ?!?!?!?!

Das muss dann jedenfalls deutlich erkennbar in den Nutzungs-Bedingungen stehen. Möglicherweise ist es aber auch schlicht illegal.

Ich verwende Programme mit einem solchen "Challenge-Rresponse" Kopierschutz von "Native Instruments". Die haben bei einem Notar einen Code hinterlegt, den man in das (und alle anderen NI-) Programm eingeben kann und es dadurch unbeschränkt nutzbar macht. Wenn NI nicht mehr existiert wird der Notar den Code veröffentlichen.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Lizenzverwaltung

Beitrag von Christian »

Gibt es vielleicht eine galante Lösung, die von außen nicht so leicht zu durchschauen ist?

Elegant ist seine Nutzer nicht zu gängeln.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lizenzverwaltung

Beitrag von Socke »

pascalts hat geschrieben:Es soll vom Programm die MAC-Adresse des PC's ausgelesen werden (wenn mehrere vorhanden alle)

Da die MAC-Adresse fest mit der Netzwerkkarte verbunden ist und nur sehr selten durch den Benutzer geändert wird, gehört sie zu den personenbezogenen Informationen. Um diese speichern zu dürfen, benötigst du eine explizite Einverständniserklärung des Nutzers (AGB/EULA reicht nicht aus). Ich würde sogar soweit gehen, dass die MAC-Adresse selbst gar nicht benötigt wird und daher gar nicht erst gespeichert werden darf. Du kannst dann eine kryptografische Hash-Funktion darauf anwenden und deren Ergebnis weiterverwenden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

pascalts
Beiträge: 61
Registriert: Fr 10. Okt 2014, 13:16

Re: Lizenzverwaltung

Beitrag von pascalts »

Okay, gut das wir darüber gesprochen haben...

Um das klar zu stellen: ich verkaufe das Programm nicht, es wird nur Firmen intern genutzt (wo auch der Server steht). Es geht einfach darum das die Funktionen nicht für jeden nutzbar sein sollen, der in der Lage ist ein Programm zu installieren, sondern nur von den wenigen ausgewählten Leuten aus, die einen speziellen (firmen-) PC besitzen... Damit ich diese Beschränkung nun nicht "hart" in das Programm coden muss, suche ich nach einer Art der Verwaltung.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Lizenzverwaltung

Beitrag von m.fuchs »

Aha, du willst also gar keine Lizenzverwaltung, sondern eine Rechteverwaltung. An dieser Stelle dürfte eine Einschränkung mit Benutzername und Passwort, die sinnvollere Lösung sein.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pascalts
Beiträge: 61
Registriert: Fr 10. Okt 2014, 13:16

Re: Lizenzverwaltung

Beitrag von pascalts »

Das klingt gut. Aber wie sorge ich dafür, das man mit einem Nutzername sich nur EINMAL "einloggen" kann... Dazu brauche ich wieder den Server, richtig?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Lizenzverwaltung

Beitrag von mschnell »

pascalts hat geschrieben:wie sorge ich dafür, das man mit einem Nutzername sich nur EINMAL "einloggen" kann.


und

pascalts hat geschrieben: Es geht einfach darum das die Funktionen nicht für jeden nutzbar sein sollen, der in der Lage ist ein Programm zu installieren, sondern nur von den wenigen ausgewählten Leuten aus,


Ist m.E. ein Widerspruch.

-Michael

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Lizenzverwaltung

Beitrag von Scotty »

Ich benutze diesen Code zum Auslesen der MAC Adresse:

Code: Alles auswählen

{---------------------------------}
//based on lazsolutions by Silvio Clecio.
//http://code.google.com/p/lazsolutions/source/browse/trunk/Core/LSUtils.pas
 
function MAC_Address: string;
 
{$IFDEF MSWINDOWS}
type
  TCreateGUIDFunction = function(AGUID: PGUID): LongInt; stdcall;
{$ENDIF}
{$IFDEF UNIX}
const
  VDevice: array[0..7] of string=('eth', 'wlan', 'ppp', 'ath', 'ra', 'msh', 'venet', 'vet');
{$ENDIF}
var
{$IFDEF UNIX}
  VPath : string;
  i,j   : byte;
{$ENDIF}
{$IFDEF MSWINDOWS}
  VLibHandle: TLibHandle;
  VCreateGUIDFunction: TCreateGUIDFunction;
  VGUID1, VGUID2: TGUID;
{$ENDIF}
begin
  Result := '';
 
  {$IFDEF UNIX}
  for i:=0 to high(VDevice) do
   for j:=0 to 9 do
   begin
     VPath := Format('/sys/class/net/%s/address', [VDevice[i]+inttostr(j)]);
     if FileExists(VPath) then
      with TFileStream.Create(VPath, fmOpenRead or fmShareDenyWrite) do
      try
        SetLength(Result, 17);
        Read(Pointer(Result)^, 17);
        exit;
      finally
        Free;
      end;
   end;
  {$ENDIF}
 
  {$IFDEF MSWINDOWS}
  VLibHandle := LoadLibrary('rpcrt4.dll');
  try
    if VLibHandle <> NilHandle then
    begin
      VCreateGUIDFunction := TCreateGUIDFunction(GetProcedureAddress(VLibHandle,
        'UuidCreateSequential'));
      if Assigned(VCreateGUIDFunction) then
        if (VCreateGUIDFunction(@VGUID1) = 0) and
          (VCreateGUIDFunction(@VGUID2) = 0) and (VGUID1.D4[2] = VGUID2.D4[2]) and
          (VGUID1.D4[3] = VGUID2.D4[3]) and (VGUID1.D4[4] = VGUID2.D4[4]) and
          (VGUID1.D4[5] = VGUID2.D4[5]) and (VGUID1.D4[6] = VGUID2.D4[6]) and
          (VGUID1.D4[7] = VGUID2.D4[7]) then
            Result := Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x', [VGUID1.D4[2], VGUID1.D4[3],
                        VGUID1.D4[4], VGUID1.D4[5], VGUID1.D4[6], VGUID1.D4[7]]);
    end;
  finally
    UnloadLibrary(VLibHandle);
  end;
  {$ENDIF}
end;
 


Ob du den MAC-String oder einen Benutzernamen in der DB speicherst und auf Duplikate prüfst, ist ja egal. Und je nach OS gibt es auch standardisierte Verfahren.

pascalts
Beiträge: 61
Registriert: Fr 10. Okt 2014, 13:16

Re: Lizenzverwaltung

Beitrag von pascalts »

Das sieht ja schon mal vielversprechend aus.

Scotty hat geschrieben:Und je nach OS gibt es auch standardisierte Verfahren.


Wie sieht es für Windows aus? Hast du da einen Tipp? - das Programm muss nur auf Win7 laufen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Lizenzverwaltung

Beitrag von Christian »

Der Code für Windows steht doch über deinem Post
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pascalts
Beiträge: 61
Registriert: Fr 10. Okt 2014, 13:16

Re: Lizenzverwaltung

Beitrag von pascalts »

Christian hat geschrieben:Der Code für Windows steht doch über deinem Post


blind... :roll:

Antworten