Sicheres Lizenzsystem

  • Allgemein

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Manschula.

    Sicheres Lizenzsystem

    Hallo,
    ich arbeite gerade an einem Programm, dass ich später evtl. auch für ein bisschen Geld verkaufen würde.
    Damit das dann aber nicht jeder einfachso benutzen kann, bin ich am Überlegen, wie bzw. welchen Schutz ich da einbauen könnte.

    Bis jetzt habe ich es so:
    Kunde bekommt den Downloadlink und startet das Programm. Als erstes startet sich eine "frmCheck", welche Überprüft, ob der Nutzer Zugang zum Programm hat. Das funktioniert so: auf einem FTP-Server liegt eine Datei namens "keys.txt", in welcher pro Zeile die Keys der Kunden eingetragen werden. Beim Nutzer wird nun ein Key generiert und es wird überprüft, ob dieser Key in der Liste steht. Generiert wird der Key folgendermaßen: ProzessorID, Soundkarte, Grafikkarte etc. werden ausgelesen und in ein MD5-Hash umgewandelt. Wenn dieser Key nun nicht in der Liste steht, bleibt die "frmCheck" offen und zeigt dem Nutzer seinen generierten Key. Um das Programm nun zu aktivieren, muss er diesen Key an mich schicken, und ich trage diesen dann in die Datei ein.

    Nunja, klappen tut es ja so einigermaßen, jedoch habe ich von einem Kunden den Hinweis bekommen, dass dies sehr unsicher ist und benutzt mein Programm ohne mir überhaupt den angezeigten Key geschickt zu haben.

    Nun suche ich eben eine sicherere Methode, aber ich weiß nicht wie, da doch alle am Ende gleich aussehen (Pseudo-Code):

    VB.NET-Quellcode

    1. If Key in Liste Then
    2. frmMain.Show
    3. Else
    4. Application.Exit
    5. End If

    Und sowas kann man ja wohl leicht überspringen..

    Am besten wäre es, wenn man sich zusätzlich noch ein Konto erstellen muss (eine Form, wo man seine Daten ausfüllt, sich per Buttonklick registriert und ein WebRequest an eine register.php schickt) und beim Starten muss man sich mit ID & Passwort einloggen (und mit der Überprüfung, ob die HWID zu diesem Account passt), dazu bräuchte ich ja eine Datenbank, aber am Ende, bei der Überprüfung, wäre es doch wieder nur so eine simple If-Abfrage wie oben, oder etwa nicht?

    Freue mich auf eure Antworten!
    Einen hundertprozentigen Software-Kopierschutz gibt es nicht.
    Man kann lediglich die Hürden relativ hoch schrauben.

    Wenn dein Programm richtig wertvoll ist, kannst du einen Profischutz wie den eLicenser einbauen.
    Das Prinzip ist, einen kleinen, aber essentiellen Teil des Code auf einen Dongle auzulagern, ohne den das Programm nicht läuft.

    Überall, wo du nur eine Abfrage auf Gültigkeit drin hast, lässt sich mit genügend Eifer diese Abfrage auch modifizieren.
    Wenn du dein Programm obfuskierst und mehrere solcher Abfragen an verschiedenen Stellen implementierst, kannst du die Knack-Schwelle höher setzen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Mach so:

    1. Dein Kunde gibt eine Serial ein z. B in dem Format: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    2. Dein Programm prüft, ob der Serial gültig ist.
    3. Wenn ja wird der Serials z. B. k.A. 10 MD5-gehasht
    4. Dein Programm senden den MD5 Hash an einen Server
    5. Der Schaut ob der Hash in der Datenbank ist
    6. Wenn ja sendet der eine VERSCHLÜSSELTEN MD5-Hash zurück
    7. Wenn das Programm auf das gleiche Ergebnis kommt wie der Server ist der Key gültig.

    Sollte ziemlich Sicher sein. Man weiss aber nie...
    Es gibt eine allgemeingültige Regel die auch mal Ausnahmen zulässt:
    Gute Programmierer sind schlechte Grafiker und gute Grafiker sind schlechte Programmierer

    boomer schrieb:

    Mach so:

    1. Dein Kunde gibt eine Serial ein z. B in dem Format: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    2. Dein Programm prüft, ob der Serial gültig ist.
    3. Wenn ja wird der Serials z. B. k.A. 10 MD5-gehasht
    4. Dein Programm senden den MD5 Hash an einen Server
    5. Der Schaut ob der Hash in der Datenbank ist
    6. Wenn ja sendet der eine VERSCHLÜSSELTEN MD5-Hash zurück
    7. Wenn das Programm auf das gleiche Ergebnis kommt wie der Server ist der Key gültig.

    Sollte ziemlich Sicher sein. Man weiss aber nie...
    In der DB muss allerdings auch eingetragen werden, sobald ein Key verwendet wurde. Weil sonst kann ein und der selbe Key immer wieder verwendet werden.

    Und irgendwie muss das Programm ja dann auch noch wissen, dass es aktiviert wurde, bzw. die Aktivierung müsste im Hintergrund beim Starten immer durchgeführt werden.
    Du kannst deine Seriennummer noch so gut verschlüsseln.
    Ein Hacker geht den Weg, dass er um den ganzen Code herumspringt und an dem Punkt einsteigt, wo die Lizenzprüfung erfolgreich rauskommt.

    Deshalb helfen diese Maßnahmen nur, wenn so gut wie möglich verschleiert wird.
    -> Obfuscator

    Oder gegen Kohle .Net Reactor
    Oder eLicenser-Dongle.

    Alles andere kann jeder Hobby-Hacker cracken und ist die Mühe nicht wert.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Ist nun schon ziemlich lange her, aber hoffe das macht nichts..
    Also ich habe nun die Demo von .NET Reactor ausprobiert, jedoch habe ich da eine Frage: Der Kunde bekommt ja dann eine .license-Datei (nach dem Kauf) und kann damit mein Programm benutzen. Aber was ist, wenn der Kunde mein Programm doch nicht so gut findet und sein Geld zurück will? Die .license-Datei bleibt ja trotzdem auf seinem Computer, das Geld bekommt er aber zurück..kann man da irgendwas machen?