Serial Key

  • Hi all,

    habe eben einen Auftrag von meinem Chef erhalten:

    Er hat ein Programm (natürlich von mir geschrieben!) entdeckt, das er gerne anderen Personen zur Verfügung stellen möchte, allerdings sollen diese Personen das Prog nicht mehrfach kopieren und an anderer Stelle nutzen können.

    Mir schwebt da sowas wie ein Registrierungsschlüssel vor, den man 1x eingibt und das Programm voll nutzen kann, bei weiterem kopieren und eingeben soll der aber nicht mehr funktionieren und die Programmfunktion nicht mehr gegeben sein. Natürlich ist der Schlüssel nach einmaligem Gebrauch dann nutzlos.

    Wisst ihr, was ich meine?

    Für Alternativen bin ich offen :)

    Grüße,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (29. August 2013 um 12:56)

  • Ist es in autoit geschrieben ? Wenn ja konnten die Personen die es benutzen decompilien.

    Andere Möglichkeiten wie man es gut machen konnte.
    Entweder mit Login und hwid,ip und anderen Daten.
    Diese dann in einer Datenbank schreiben und vergleichen, dies konnte man mit dem serial Key verwenden.
    Wenn der serial Key auf einer anderen hwid eingetragen wird kommt ein Fehler

  • Noch eine Möglichkeit, wie man auch ein in AutoIt geschriebenes Programm sicherer machen kann:

    Ich weiß ja nicht, was dein Programm macht, aber gewisse Sachen könnte man an einen Server binden. Z.B. ein Programm, was ein anderes deinstallieren soll. Die Registry-Pfade stehen aber nicht im Programm, sondern werden dynamisch von einem Server abgefragt, der (natürlich) eine eindeutige ID erwartet.^^

    lg

  • Ich persönlich würde es wie in Andys Thread machen...
    Einfach das Passwort unten an die *.exe hängen und dann das Passwort bei erstmaligen start der *.exe irgendwo in der Registery ablegen.
    Wäre zmd. Mein vorschlag... Natürich sollte das Passwort verschlüsselt sein.

    Achja, und vor dem kompillieren einfach einmal den Obfuscator drüber laufen lassen.

    LG. Make :)

  • sind ja schon ein paar nette Möglichkeiten, mir sind noch Folgende eingefallen:

    Auf die Schnelle: Mit der genannten HWID, ich lass mir von der Person ein paar PC-Daten geben, bzw soll er ein Programm ausführen und mir die Daten zukommen lassen, daraus generiere ich einen String, den die Person in eine TXT schreiben soll. Der wird natürlich schon vorher vom Programm (beim Start) generiert und jedesmal abgefragt.

    MySQL-Server: Ne Datenbank+Tabelle online gestellt, auf die bei jedem Start zugegriffen wird und ein von mir eingegebener Aktivierungsschlüssel bei erfolgreicher Prüfung gelöscht wird und somit nicht mehr verwendet werden kann.

    Und die wohl suboptimalste: Ich verschick einen günstigen USB-Stick mit einem Aktivierungstool, das sich dann bei Benutzung selbst löscht und vorher natürlich die Aktivierungsdaten in die Registry schreibt :D

    €dit: In der EXE abgelegte Passwörter sind suboptimal, da die Person das Prog ja nicht weitergeben soll/darf.

    In AutoIt kompiliert ist kein Problem, die Person ist ein "DAU" (PC An/Aus & Progs starten, mehr nicht :D)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • schätze ich hab ne Möglichkeit gefunden :D

    Bedingung ist natürlich, dass die Person keinen Plan von proggen, AutoIt bzw decompilen hat:

    [autoit]

    #include <crypt.au3>

    [/autoit][autoit][/autoit][autoit]

    if _Crypt_EncryptData(@UserProfileDir, "mein_key", $CALG_AES_256) <> FileReadLine(@ScriptDir & "\serial.txt",1) Then
    MsgBox(64,"fehler","key nicht richtig!")
    Exit
    Else
    MsgBox(64,"korrekt","key ist richtig!")
    EndIf

    [/autoit]

    Denke einfacher gehts nicht :D

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ich glaube sofern der Kunde Plan vom proggen besonders AutoIt hat wird er es umgehen können...vielleicht neben den genannten Lösungen noch ein wenig Angst machen mit AGS von wegen Weitergabe/Mehrfachnutzung wird strafrechtlich verfolgt. Weiß aber auf der rechtlichen Seite nicht genau was man wie ausreizen darf.

    Grüße Yaerox

    Grüne Hölle

  • Registry variante würd ich allerdings nicht den klaren Text als Serial nehmen, sondern verschlüsseln, sonst könntest dir das auch sparen :P

    Grüße Yaerox

    Grüne Hölle

  • nene, ich verwende die eben genannte Möglichkeit, einfach einen Key aus dem @UserProfileDir basteln und in ne txt rein, funktioniert ganz gut :D

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Also grundsätzlich ist die Diskussion immer die gleiche. Jemand der Autoit gut kennt weiß, dass man sowas immer relativ leicht umgehen kann.

    Ich hab auch ein paar kleinere Tools geschrieben und da hab ich immer irgendetwas leichtes verwendet (MAC Adresse prüfen oder sowas).
    Außerdem hab ich etwas versucht zu vertuschen dass es in Autoit geschrieben ist (Standard Icon ändern, Tray Menü abändern/ausblenden, Programminformationen ändern, ...)

    @UserProfileDir solltest du nur verwenden wenn nur ein bestimmter User auf einem bestimmten Rechner arbeiten darf.
    Wenn alle User am Rechner das Programm verwenden dürfen dann kannst du @ComputerName oder sowas nehmen.
    Wenn ein User an verschiedenen Rechnern das Program verwenden darf dann brauchst irgendwo eine Zentrale Ablage (FTP, HTML, CIFS oder sonstwas)

    Und Vergleichen würde ich nicht mit einer Datei im Scriptpfad sondern irgendwo, wo man seine Settings normalerweise speichert (Registry, @Appdata, ...)
    Im Scriptpfad finde ich immer sehr unsauber bzw. fehleranfällig und in dem Fall auch etwas "durchschaubar"

  • Hi,
    generiere pro Script einen Aktivierungsschlüssel anhand der vorhandenen Rechnerdaten/Emailadresse.
    Diesen Schlüssel hängst du hinten an die EXE.
    Wenn dein Script "merkt", dass es nicht auf dem richtigen Rechner läuft, mach ein Fensterchen auf, in dem du den User darüber informierst, dass das Programm bei dir per Email ( ! ) einen neuen Schlüssel aufgrund geänderter Rechner- bzw. Hardwaredaten anzufordert. Per Email schickst du dir nun vom Rechner des Nutzers eine Mail (ggf. versteckt) mit den Rechnerdaten anhand deren du wieder einen neuen Aktivierungsschlüssel erstellst. Diesen schickst du an die Emailadresse des "regulären" Nutzers!

    Sollten die Emailadressen nicht übereinstimmen, würde ich den User bitten, eine Email "von Hand" an dich zu schreiben (mit dem Absender, der für die Aktivierung verwendet wurde), und das Programm einfach löschen!
    Wenn der User rechtmäßiger Verwender des Programms ist, bekommt er von dir eine email mit dem neuen Freischaltcode, der daraufhin wieder an die EXE angehängt wird. Falls die EXE beim User gelöscht wurde, ist irgendetwas megafaul...dann hat dieser nämlich nicht die Emailadresse vom regulären User, bzw. dieser hat das Programm weitergegeben.
    Ergo würde ich dem regulären Nutzer auf die Füsse treten und bei der nächsten "Aktivierung" bzw. Programmstart die Datei auch einfach löschen....
    Keine Angst, wenn jemand beim bescheissen erwischt worden ist, wird er den Ball SEHR flach halten!
    Denn du hast als "Beweis" sogar die Emailadresse desjenigen, dem dein Programm unrechtmäßig weitergegeben wurde!

  • Oder nimm sowas:

    [autoit]


    Func hwid()
    Local $PcId = ""
    $var = DriveGetDrive( "all" )
    If Not @error Then
    For $i = 1 to $var[0]
    $PcId &= DriveGetSerial($var[$i]&"")
    Next
    $PcId &= @HomeDrive & @CPUArch & @OSBuild & @OSVersion
    $mem = MemGetStats()
    If Not @error Then
    $PcId &= $mem[1]
    Return $PcId
    Else
    Return -1
    EndIf
    Else
    Return -1
    endif
    endfunc

    [/autoit]

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • Schnitzel: Danke für dein Feedback.

    Aber wie bereits erwähnt, hat die Person absolut 0 Peilung von PC's und vom Programmieren bzw AutoIt schon gleich 2^64 mal nicht :D

    Durchschaubar is nich so wild, um den String in meiner "serial.txt" zu decrypten, muss man auch erstmal den Schlüssel kennen, den ich verwendet habe. Der steht zwar im Klartext im Source, aber an den kommt von denen sowieso keiner ran :)

    Grüße,
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • PuReIroNie:
    Und was ist wenn man mal ein USB-Stick einsteckt oder ein neues Netzlaufwerk verbindet? ^^

    x0r:
    Ja hast schon recht, dass es gecrackt wird musst du nicht wirklich befürchten nur weil du im Scriptdir speicherst.
    Aber bei solchen kleinen Tools gehen die meisten davon aus sie können sie in einen anderen Order verschieben. Nur blöd wenn dann die serial.txt nicht mitverschoben wird...
    Deswegen lieber dort speichern, wo der User nicht mit in Berührung kommt

  • Schnitzel
    Das ding ist schon älter, aber daran hab ich nicht gedacht ;D

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • Schnitzel
    Das ding ist schon älter, aber daran hab ich nicht gedacht ;D

    Festplatten sind ohnehin denkbar schlecht um eine HardwareID zu generieren. Festplatten werden häufig wegen defekt oder Platzmangel ersetzt. Wesentlich unproblematischer dürfte da die Seriennummer des Mainboards oder die MAC der Netzwerkkarte sein, ggf. auch die Seriennummer des Betriebssystems, die Bezeichnung des Prozessors usw.

  • im Prinzip is es wurscht, wo ich den Key speichere.. ich baus morgen mal auf Registry um.

    Das Prog braucht sowieso immer einen Ordner mit im ScriptDir, evtl leg ich die txt auch einfach dort ab und bau im Prog noch einen Button ein mit "Serial ändern" oder sowas :)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.