Forum: PC-Programmierung DLL zeitlich begrenzen


von Pit (Gast)


Lesenswert?

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

von D. I. (Gast)


Lesenswert?

Kommt darauf an wieviel Aufwand du dahingehend investieren willst, dass 
es nicht zu leicht wird die Zeitprüfung zu überlisten.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

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

von Pit (Gast)


Lesenswert?

Danke für die Antworten. Aber die Uhrzeit prüfen wollte ich nicht. Es 
ist zu einfach, diese zu verstellen.

von akaDem (Gast)


Lesenswert?

Wenn das Programm auf Internet angewiesen ist, kannst du eine NTP-Zeit 
holen. Schwerer abzufangen und zu fälschen.

von Rolf Magnus (Gast)


Lesenswert?

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.

von Pit (Gast)


Lesenswert?

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

von Konrad S. (maybee)


Lesenswert?

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.

von Konrad S. (maybee)


Lesenswert?

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.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Pit (Gast)


Lesenswert?

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

von Pit (Gast)


Lesenswert?

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

von Pit (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Pit (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Jörg E. (jackfritt)


Lesenswert?

Karl Heinz Buchegger schrieb:

> 'man' und 'kann'.

Frau auch? ;)

von Pit (Gast)


Lesenswert?

>In die Registry kommt das Installationsdatum und das Datum der letzten
>Benutzung. Mehr brauchst du nicht.
Stimmt, das ist noch einfacher - Danke.

von Malte S. (maltest)


Lesenswert?

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.

von heinz (Gast)


Lesenswert?

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

von Ingenieur (Gast)


Lesenswert?

einfach auf die aktuelle Windows-Version loggen! Die läuft von alleine 
ab :-)

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

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.

von Sven P. (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

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.

von Alex W. (Gast)


Lesenswert?

Bei uns laufen Software von " Fremden" aus Sicherheitsgründen in einer 
VM die alle Systemänderungen beim Beenden verwirft.

von Konrad S. (maybee)


Lesenswert?

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

von Malte S. (maltest)


Lesenswert?

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
Noch kein Account? Hier anmelden.