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
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
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.
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.
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
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.
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.