Hallo, ich habe hier eine DLL, die ich in der kostenlosen Version mit einer zeitlichen Begrenzung herausgeben will - z.B. Laufzeit 30 Tage. Wie läßt sich sowas am Besten implementieren (Visual C++)? Gruß Pit
Kommt darauf an wieviel Aufwand du dahingehend investieren willst, dass es nicht zu leicht wird die Zeitprüfung zu überlisten.
Eine DLL hat auch Zugriff auf die Rechneruhr. In einer Standard-DLL gibt es ja die DllMain BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { bei case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: kannste dich ja einhaken
Danke für die Antworten. Aber die Uhrzeit prüfen wollte ich nicht. Es ist zu einfach, diese zu verstellen.
Wenn das Programm auf Internet angewiesen ist, kannst du eine NTP-Zeit holen. Schwerer abzufangen und zu fälschen.
Pit schrieb: > Danke für die Antworten. Aber die Uhrzeit prüfen wollte ich nicht. Es > ist zu einfach, diese zu verstellen. Nunja, wenn du eine Zeit messen willst, brauchst du eine Uhr. Du kannst natürlich noch ein paar Checks einbauen, wie z.B. ob die Uhrzeit stetig steigend ist, und wenn die immer wieder zurückgesetzt wird, manipuliert wohl jemand die Uhr, um deine Zeitbeschränkung zu umgehen. Natürlich muß man auch daran denken, daß Uhren auch mal regulär korrigiert werden können und daß es Sommer- und Winterzeit gibt. Hellhörig kann dein Programm aber z.B. werden, wenn es schon insgesamt eine Laufzeit von 50 Stunden zusammen hat, aber das Datum sich immer noch nicht geändert hat.
>Nunja, wenn du eine Zeit messen willst, brauchst du eine Uhr. >Du kannst natürlich noch ein paar Checks einbauen, wie z.B. ob die >Uhrzeit stetig steigend ist, und wenn die immer wieder zurückgesetzt >wird, manipuliert wohl jemand die Uhr, um deine Zeitbeschränkung zu >umgehen. Ohne Uhr geht es nicht, da hast Du Recht! Und natürlich muss ich Checks einbauen. Die Frage lautet: Wie macht man das am einfachsten? Ich möchte keine Datei irgendwo auf der Festplatte anlegen, um die Daten mitzuloggen. Ich kann auch keine Variable setzen, die beim Entladen der DLL wieder gelöscht wird. Bleibt vlt. die Registry?
Nimm eine einfache Lösung, also sowas wie oben skizziert. Das reicht für weit über 99% aller Anwender. Da du die Frage gestellt hast und gute Antworten erhalten hast, darfst du davon ausgehen, dass es genügend Leute gibt, die sich hinreichend gut mit dem Thema auskennen und in der Lage wären, den von dir eingebauten Schutz zu erkennen und auszuhebeln. Ich verwende für die Demo-Version einer kommerziellen Software auch nur eine Zeit-Abfrage und bisher gibt es keine Auffälligkeiten, die auf ausgehebelten Schutz hindeuten.
Pit schrieb: > Ich möchte keine Datei irgendwo auf der Festplatte anlegen, um die Daten > mitzuloggen. Ich kann auch keine Variable setzen, die beim Entladen der > DLL wieder gelöscht wird. Bleibt vlt. die Registry? Dateien und Registry-Einträge kann man löschen. Das ist kein Hexenwerk.
Der Aufwand ist proprtional zum KnohHow Deiner Kundschaft. Je nach Aufwand und Preisklasse der DLL würde ich mehrgleisig fahren. Bei Industriekunden unkritisch, wenn es an die Kiddies geht schon etwas pingeliger. Etwas in der registry verstecken dürfte am wenigsten Aufwand sein. Die Namen in der DLL zu finden dürfte mit einem Hexdump kein Problem sein - dann haben die Jungs für ihr Geld aber auch etwas getan. Was ich mir NIE leisten würde: * heimlich nach hause funken * dem potentiellen Kunden den Rechner lahmlegen oder manipulieren * dem potentiellen Kunden den Zugriff auf SEINE Daten sperren Mach einen sauberen Nutzungsvertrag und biete dem Kunden eine saubere Gegenleistung - dann sind solche Mätzchen unnötig. Bisher sind alle Verfahren geknackt worden.
Konrad S. schrieb: > Dateien und Registry-Einträge kann man löschen. Das ist kein Hexenwerk. Der springende Punkt ist: man kann jeden Schutz aushebeln, wenn man weiß wie er funktioniert. Und wenn es jemand darauf anlegt, findet er raus wie der Schutz funktioniert und hebelt ihn aus. Die Frage ist eine andere: Kann das auch Lieschen Müller? 99% aller Anwender können eben nicht einen einfachen Schutz aushebeln. Und gegen den Rest kannst du nichts machen. Man kann dieses 1% mit immer noch höherem Aufwand auch noch teilweise aussperren und die Latte immer höher legen. Aber irgendwann steht der Aufwand einfach nicht mehr dafür. Oft ist es dann auch noch so, dass sich sowieso kein SChwein für die Software interessiert und man aus einer Paranoia heraus unendlich viel Zeit in einen Schutz investiert hat, denn eh keiner braucht.
>Nimm eine einfache Lösung, also sowas wie oben skizziert. Das reicht für >weit über 99% aller Anwender. Nein, wie ich oben schon sagte. >Dateien und Registry-Einträge kann man löschen. Das ist weit schwieriger als mal kurz die Uhrzeit zurück zu stellen.
>Die Frage ist eine andere: >Kann das auch Lieschen Müller? Genau. >Aber irgendwann steht der Aufwand einfach nicht mehr dafür. Ist das so aufwendig etwas in die Registry reinzuschreiben? Das wusste ich nicht. >Oft ist es dann auch noch so, dass sich sowieso kein SChwein für die >Software interessiert Das kann man z.B. an den täglichen Downloadzahlen ablesen.
Im übrigen red ich nicht von einem Schutz der Hacker abhält. Aber der Normalkunde traut sich nicht an die Registry würd ich mal behaupten.
Pit schrieb: > Im übrigen red ich nicht von einem Schutz der Hacker abhält. Aber der > Normalkunde traut sich nicht an die Registry würd ich mal behaupten. In der heutigen Zeit hat der Durchschnittsbenutzer schon Schwierigkeiten seine Files wiederzufinden, wenn vom Programm nicht der 'Dokumente' Ordner als Default vorgegeben wird :-) Traurig, aber ist so. >> Aber irgendwann steht der Aufwand einfach nicht mehr dafür. > Ist das so aufwendig etwas in die Registry reinzuschreiben? > Das wusste ich nicht. Nein, natürlich nicht. Das war auch gar nicht gemeint. Irgendwo muss man schliesslich Information hinterlassen. Aber es gibt ja auch noch Systeme, die aus der Festplattennummer und der MAC-Adresse, gepaart mit einer Kennzahl aus einem USB-Stick sich eine 48-stellige Prüfziffer ermitteln, die man im Handbuch über 3 Tabellen nachschlagen muss, woraus sich ein Codewort ergibt, welches dann mit einem im Splash-Screen eingebetteten Wasserzeichen verrechnet wird und dem bei der Installation des Systems ermitteltem und linear transformiertem Stromverbrauchswert, gepaart mit der Anzahl und Position von Bad-Sectors auf der Festplatte entsprechen muss. Uhrzeit der letzten Benutzung in die Registry reinschreiben. Meinetwegen als UNIX-Zeit und als Hex-Ziffern in einem String, bei dem die Character ein wenig durcheinander gewürfelt sind. Ist die aktuelle Uhrzeit kleiner als diese letzte Zeit, dann hat wer manipuliert (oder Sommer/Winterzeit). Bei 3 derartigen Verletzungen gibt es eine Warnung, bei 5 wird die Arbeit verweigert. Der R$egistry-Key wird im Programm aus 3 oder 4 Strings zusammengesetzt, meinetwegen noch mit einem 0xFF ver-xort. Ja, ich weiß. Man kann Registry-Zugriffe tracken. Die Betonung liegt auf 'man' und 'kann'.
>Nein, natürlich nicht. >Das war auch gar nicht gemeint. Irgendwo muss man schliesslich >Information hinterlassen. Gut dann werd ich die Registry verwenden. Ich lege eine String-Liste an und lese die bei DLL Start aus. Sind weniger als 30 Einträge vorhanden, wird die DLL weiter ausgeführt. Ist das heutige Datum nicht in der Liste vorhanden, wird es eingefügt. Fragt sich nur, ob ich da auch Listen anlegen kann?
Pit schrieb: >>Nein, natürlich nicht. >>Das war auch gar nicht gemeint. Irgendwo muss man schliesslich >>Information hinterlassen. > Gut dann werd ich die Registry verwenden. > Ich lege eine String-Liste an und lese die bei DLL Start aus. > Sind weniger als 30 Einträge vorhanden, wird die DLL weiter ausgeführt. > Ist das heutige Datum nicht in der Liste vorhanden, wird es eingefügt. > Fragt sich nur, ob ich da auch Listen anlegen kann? Zu kompliziert. In die Registry kommt das Installationsdatum und das Datum der letzten Benutzung. Mehr brauchst du nicht. Das ganze kommt unter LOCAL_USER - Software - Microsoft - Irgendwas Dann traut sich da sowieso keiner mehr ran.
>In die Registry kommt das Installationsdatum und das Datum der letzten >Benutzung. Mehr brauchst du nicht. Stimmt, das ist noch einfacher - Danke.
Karl Heinz Buchegger schrieb: > Uhrzeit der letzten Benutzung in die Registry reinschreiben. Meinetwegen > als UNIX-Zeit und als Hex-Ziffern in einem String, bei dem die Character > ein wenig durcheinander gewürfelt sind. Ist die aktuelle Uhrzeit kleiner > als diese letzte Zeit, dann hat wer manipuliert (oder > Sommer/Winterzeit). Nimm für so was UTC, das blendet Sommer-/Winterzeit und Zeitzonen (Reisen!) aus. Alles andere ist grober Pfusch.
und lass am besten die Debug Info in der DLL :) Mal im Ernst, das muß nicht Lieschen Müller knacken sondern irgend jemand und stellst als Crack ins inet. Ich "liebe" Software mit Kopierschutz die macht dem ehrlichen Anwender nur Ärger und wird eh geknackt. Bsp. ich verwende eine Software für SPSse (gekauft) - Rechner defekt -> neu aktivieren Server für Aktivierung down -> Crack suchen. Etwa 20 Minuten war einfach ein Sprung raus geNOPt Ich hab mir später mal angeschaut wieviel Arbeit sich der (die) Programmierer mit dem Schutz gemacht haben, Die Zeit hätten sie besser für Bugfix genutzt Nur meine Meinung Gruss Heinz
einfach auf die aktuelle Windows-Version loggen! Die läuft von alleine ab :-)
Eine andere Lösung wäre noch, einen Teil des Schutzes auf einen Dongle auszulagern (z.B. USB-Dongle mit Batterie und Echtzeituhr). Das wird aber von den Kosten her wohl zu groß werden für eine zeitlich begrenzte Version.
Pit schrieb: > Wie läßt sich sowas am Besten implementieren (Visual C++)? Garnicht. Und das ist auch gut so. Die Alternativen sind eigentlich immer dieselben: (1) Wenn deine Bibliothek so sehr speziell ist, dass es nichts Anderes am Markt gibt, dann ist dein Klientel auch sehr speziell und klein. Das kann man sich natürlich jetzt mit solchen Schikanen noch vergraulen oder man formuliert eine (menschenwürdige!) Lizenz und bleibt mit dem Klientel in Kontakt. (2) Wenn in der Bibliothek wertvolles Know-How steckt, dann findet sich in jedem Fall jemand, der alle Schutzmechanismen umgeht, denn es lohnt sich für ihn/sie. (3) Wenn die Bibliothek Massenware ist, dann ist dein Schutz schlicht und ergreifend ein KO-Kriterium. > Gruß Pit Rechner waren mal offene Strukturen, die in erster Linie rechnen sollten. Aber heute muss als allererstes mal der Kopierschutz passen, bevor die Software entwickelt wird... Kopierschutz hat noch nie funktioniert und wird nie funktionieren. Für ehrliche Leute ist es nervtötender Ballast und für unehrliche Leute eine kleine Morgengymnastik.
Wenn es wirklich wichtig ist, ein HASP Dongle mit Batterie für die interne Uhr. Das ist dann schon mehr als eine Morgenübung. Aber natürlich auch umgehbar.
Es gibt Software, deren Einsatz nur im Zusammenspiel mit tonnenschweren Maschinen einen Sinn ergibt. Das hält manche Hersteller aber nicht davon ab, zusätzlich zu dem tonnenschweren Grossdongle noch weitere kleine USB-Dongles dran zu hängen. Wodurch Verfügbarkeit und Virtualisierung leiden. Freunde schafft man sich so nicht.
Sven P. schrieb: > Kopierschutz hat noch nie funktioniert und wird nie funktionieren. Für > ehrliche Leute ist es nervtötender Ballast und für unehrliche Leute eine > kleine Morgengymnastik. So ist es. Nebenbei verdächtigst Du gleich einmal Deinen (potentiellen) Kunden der Raubkopiererei - das erzeugt kein gutes Vetrauensverhältnis.
Bei uns laufen Software von " Fremden" aus Sicherheitsgründen in einer VM die alle Systemänderungen beim Beenden verwirft.
Alex W. schrieb: > VM die alle Systemänderungen beim Beenden verwirft. ... und schon sind die schönen Registryeinträge wieder weg und die Zeit läuft wieder von vorn und alle bis auf einen sind glücklich und zufrieden. ;-)
Sven P. schrieb: > Rechner waren mal offene Strukturen, die in erster Linie rechnen > sollten. > Aber heute muss als allererstes mal der Kopierschutz passen, bevor die > Software entwickelt wird... Und der Kopierschutz ist am Ende das, was als erstes ausfällt. Entweder wird er umgangen und hat nichts gebracht, und/oder er ist sowieso schon immer total buggy gewesen und hat die teure Software vom funktionieren beim ehrlichen Kunden abgehalten. Dann kann sich auch der ehrliche Kunde glücklich schätzen, wenn jemand aus welchen Beweggründen auch immer einen Bypass für den Müll zur Verfügung gestellt hat. Joachim Drechsel schrieb: > So ist es. Nebenbei verdächtigst Du gleich einmal Deinen (potentiellen) > Kunden der Raubkopiererei - das erzeugt kein gutes Vetrauensverhältnis. Leider Standard. Warum muss ich mir als Käufer einer Kinokarte oder DVD/BL immer ansehen, wie böse es ist, Filme zu kopieren, aber wenn ich mir eine Kopie besorge bleibe ich von dieser Generalverdächtigung verschont? Warum funktioniert Software allzu oft erst nach Entfernung des meist dilletantischen Kopierschutzes korrekt, selbst wenn man dafür bezahlt hat? Wenn die Software ihren Preis wert ist, werden auch genug Leute dafür bezahlen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.