Programm vor Weitergabe schützen

  • Hallo Leute,

    da ich mal wieder etwas in C programmiere und in letzter Zeit öfter gelesen habe, das Menschen ihre Programme schützen wollen,
    bin ich zu dem Entschluss gekommen dies mal in C umzusetzen.

    Nun folgenes:

    Lizenzen werden von deinem Server bereitgestellt ggf. via Mail versand.

    -> Benutzer erwirbt Lizenz
    -> Benutzer gibt diese im Programm ein
    -> Programm prüft auf gültigkeit
    -> Programm schreibt Binär gewisse Daten wie Mainboard Seriennummer an die *.dll an

    -> Programm startet am registrierten Rechner
    -> Programm prüft ob die Seriennummer übereinstimmt und startet das Programm bzw. führt es fort

    -> Programm wird an einem nicht registrierten Rechner gestartet
    -> Programm prüft ob die Seriennummer übereinstimmt -> Schlägt fehl -> Gibt Fehlermeldung aus -> Beendet das Programm

    Findet ihr den Gedankengang richtig?
    Oder habt ihr bessere Ideen?
    Lasst es mich wissen :) :D

  • Nun die Idee an sich ist ja schon nicht schlecht aber wenn man das System kennt ist es doch relativ einfach zu Umgehen. Wenn es kein Problem darstellt, dass bei jedem Programmstart eine Internetverbindung benötigt wir, könntest du die Lizenz aber auch jedes mal an einen Server schicken, welche sie dann prüft. Auch wenn die Lizenz bei jedem Start vom Rechner selber erneut geprüft wird ist das schon etwas sicherer. Aber was hat das ganze eigentlich mit AutoIt zu tun wenn du es in C machen willst? :huh:

    Gruss Shadowigor

  • Über dieses Thema kann man sich glaube ich endlos Gedanken machen.

    Ich will hier allerdings nur kurz erwähnen, das auch eine Onlineprüfung riesige Angriffsfläche bieten kann.
    Hier würde ich definitiv zu einer Verschlüsselung raten, weil man ohne Probleme eine Überprüfung umleiten/zurückleiten (Loopbackadapter, hosts Datei) und einen simpelen Plaintext ala 'success' emulieren kann.

  • Ich habe noch keine eigenen Erfahrungen damit gemacht. Auf einer Schulung zu Softwaresicherheit wurde das Thema ein mal kurz angeschnitten. Da wurde dann als Beispielverfahren folgendes genutzt:

    Du verteilst an deine Kunden einen Schlüssel. Dieser ist selbstverständlich verschlüsselt. Dieser wird an eien DB gesendet und dort geprüft. Nun war dort die Vorraussetzung, dass (hier der Part den ich nicht ganz verstanden hatte) du den Schlüssel auf der DB prüfen lässt, da sofern der Encode Teil mit im Programm für einen möglichen IT'ler ein Freifahrtsschein sein könnte. Jedenfalls müsstest du einfach so schauen, dass auch nur so viele Schlüssel auf der DB sind wie du vergeben hast.

    Selber ausprobiert oder mal damit auseinander gesetzt habe ich noch nie. Leider. Alternativ ist mir gestern Abend das Thema SAAS eingefallen, sofern es überhaupt eine Möglichkeit für dich darstellt.

    Grüße Yaerox

    Grüne Hölle

  • Ich habe das bis jetzt immer so gemacht.

    Homepage:
    >Account erstellen
    >Einloggen & "bezahlen" (Account wird für X Tage freigeschaltet.)
    -Datenbank:
    >>UserID,Benutzername,Password,HWID,IP,LastLogin,Until
    Programm:
    >Login mit Benutzernamen & Password (natürlich verschlüsselt über dein eigenen Weg)
    >Sendet die HWID an den webspace
    >Überprüft bei jedem Login die HWID, nach 24 stunden wird diese resettet damit nicht mehr als 2 Benutzer gleichzeitig einloggen können. (HWID kann sich ja beim selben benutzer ändern)
    >Last Login wird an den webspace gesendet
    >Ist der Account activ = erfolgreich eingeloggt
    >Ist der Account noch gültig für die X Tage = erfolgreich eingeloggt

    Loginphase:
    >Eigene Encrypt / Decrypt funktionen schreiben.
    >Bisschen mit den Packeten bzw. Post spielen das was an den webspace gesendet wird.
    >Notfalls noch mit einem Encrypter über das endprogramm gehen.

    Einmal editiert, zuletzt von Awesome (4. September 2013 um 13:39)

  • Du verteilst an deine Kunden einen Schlüssel. Dieser ist selbstverständlich verschlüsselt.


    :rofl: (Sorry aber das musste sein ;) )

    Und ja, ich habe damit natürlich schon gemeint, dass diese Verbindung verschlüsselt sein sollte. Auch ein verschlüsseltes "success" wäre relativ einfach zu Umgehen. Da gibts bestimt hunderte Wege, wie man das dann senden könnte. Darüber haben sich aber bestimmt schon viele andere den Kopf zerbrochen.

  • Also es ist klar dass alles irgendwo knackbar ist es geht ja um den Normal-User der Programme über eine Lizenz freischaltet und dann eben meint er könnte einfach den Programmordner kopieren und verteilen.

    Jetzt kommt nicht an mit "Dann schreibe in die Registy" :D Das wäre doch zu einfach :p

    Ist natürlich klar das wenn jemand unbedingt etwas Freischalten will, und das gewisse Know-how hat das umgehen kann.
    Aber eben die Standard-User nicht.

    • Offizieller Beitrag

    Habs mal in OT gepackt.

    Großes Problem bei einer DLL ist immer: Jeder hans und franz kann eine DLL Programmieren, wenn der Rückgabewert der DLL 1 für ist okay und 0 für ist nicht okay ist, kann man einfach eine DLL schreiben mit dem Funktionsnamen und return 1; dort reinschreiben. Selbst wenn der Rückgabewert komplexer ist, und man ihn im Script noch verarbeiten muss - solange es AutoIt ist kann man es immer herausfinden.

    Aber wie hier schon erwähnt wurde: Nichts ist unknackbar, selbst SimCity mit always-online wurde vor kurzem geknackt. Ist zwar Online Aktivierung, aber da hat sich einfach mal jemand gedacht, pah.. Programmiere ich halt Origin (EA-Download und Seriennummer Manager) nach und simuliere die Server ;)

    Gruß,
    Spider

  • Großes Problem bei einer DLL ist immer: Jeder hans und franz kann eine DLL Programmieren, wenn der Rückgabewert der DLL 1 für ist okay und 0 für ist nicht okay ist, kann man einfach eine DLL schreiben mit dem Funktionsnamen und return 1; dort reinschreiben.

    Ja darüber habe ich mir auch schon gedanken gemacht...
    Und ja hatte eben an einen komplexeren rückgabewert wie eine Zahlenkombo oder so gedacht.

    Ist gar nicht so leicht sich dazu etwas zu überlegen, gel?