Motherboard Time / Schutz vor Manipulation von Zeit und Datum



  • Okay. Das ist ja schonmal eine klare Aussage.

    Das mit dem Internet ist kein Problem, das Programm interagiert mit einer anderen Software die wiederum eine Internet-Verbindung braucht. Kurzum, auch mein Programm wird nur laufen wenn Internet vorhanden ist.

    Das mit dem Features hört sich auch sehr gut an, allerdings habe ich keine Ahnung was du damit meinst.

    Was wird leichter zu implementieren sein?

    Danke!



  • Leichter zu implementieren ist die Zeitabfrage zu einem Server. Wenn du eh schon eine Internetverbindung mit einer anderen Software hast kannst du doch die fragen wie spät es ist.
    Features rausnehmen ist eigentlich auch leicht. Kommt natürlich auf dein Programm an. Versuche Funktionen zu finden die nicht allzu wichtig aber nett sind. Zum Beispiel ein Komprimierprogramm was Dateien verkleinert könnte man so machen, dass man zwar Dateien normal komprimieren kann, aber immer nur einzeln. Irgendwann hat der Nutzer keine Lust mehr jede Datei einzeln anzuklicken und bezahlt oder sucht sich was anderes.
    Implementationstechnisch ist das einfach, man braucht ja nur eine Funktion aus dem Quelltext durch eine Ausgabe "Feature nur in der Vollversion" ersetzen, aber man muss sich sehr genau überlegen was man für Funktionen rausnimmt. Dafür ist es natürlich auch extrem sicher. Bei der Zeitabfrage kann man per Debugger einen jump über die Zeitabfrage machen und fertig, bei fehlenden Features geht sowas nicht.



  • Okay, das mit den Features geht dann wohl leider nicht. Das Programm soll bis zum Laufzeitende zu 100% funktionieren, das geht leider nicht anders.

    Ich werde dann also wohl die Abfrage der Zeit aus dem Netz nehmen müssen.

    Gibt es da schon vorgefertigte Skripte? Kann ich mir das irgendwo anschauen wie das funktioniert, das habe ich so noch nicht programmiert.

    Danke!



  • Die aktuelle Zeit ist leider nur die eine Hälfte. Wie oder wo speicherst Du die Zeit, ab der die 40 Tage zählen?



  • Hier gibts ein Beispiel das fast tut was du willst: http://curl.haxx.se/libcurl/c/sendrecv.html
    Du musst nur statt "GET /" ein "GET /date/" verwenden und "curl.haxx.se" durch "isotropic.org" ersetzen und statt die Bytes der Rückgabe zu zählen kannst du per strstr nach "Julian day:</strong></td><td>" suchen und die folgenden Zahlen bis zum nächsten '<' als Zeit nehmen. Ist nur auf den Tag genau, sollte aber für deine Zwecke reichen.
    Wenn sich der Server verabschiedet oder sich die Formatierung ändert klappts natürlich nicht mehr.



  • so wie ich es zur Zeit auch mache.
    an dem Zeitpunkt an dem ich die DLL rausgebe, mache ich eine Abfrage rein, in der ich die Systemzeit mit einer in der DLL gespeicherten Lizenz-Ablauf-Zeit vergleiche. das funktioniert dann halt so lange, wie die (manuell zu ändernde) Systemzeit < als die gespeicherte Zeit

    time_t seconds;
    int dayDiff;
    seconds = time (NULL);
    
    // hier trage ich dann die in Tagen umgerechnete Gültigkeit ein
    dayDiff = 14735 - seconds/3600/24;
    
    //if (dayDiff > 0) sprintf(s, "das Programm läuft noch %u Tage >>> \n", dayDiff);
    //else sprintf(s, "Lizenz ist abgelaufen");
    //WriteConsole(cons,s,strlen(s),&written,NULL);
    

    ich würde also wenn ich alles richtig verstehe einfach die Abfrage von time durch die "richtige" Zeit ersetzen



  • Yup. Wobei es recht aufwändig ist die "richtige" Zeit zu kriegen, aber das steht ja auf der Seite wie es geht.



  • nun muss ich doch nochmal fragen:

    wie lese ich die Motherboard Time aus? weiter oben steht das wäre einfacher als das Abfragen der Webseite.

    Danke!



  • Magic-Champ schrieb:

    ich würde also wenn ich alles richtig verstehe einfach die Abfrage von time durch die "richtige" Zeit ersetzen

    die kriegste z.b. von da: http://support.ntp.org/bin/view/Servers/WebHome
    caesium-atomuhr-genau, sozusagen. *fg*
    🙂





  • Das hier? http://www.cplusplus.com/reference/clibrary/ctime/time/

    Nein. das ist ja nur die Systemuhrzeit vom Betriebssystem.

    man muss noch irgendwie die Zeit von verschiedenen Hardware Komponenten auslesen, können, die haben wohl auch einen Timestamp



  • Magic-Champ schrieb:

    wie lese ich die Motherboard Time aus?

    meinste die RTC auf'm mainboard? die kann man doch verstellen, d.h. die hilft nicht viel (ausser du machst sowas wie 'FlexLM', das zwug erkennt verstellen der zeit und disabled dann die ganze lizenz).
    🙂



  • Es gibt da noch http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx
    Das ist die Zeit der Hardwareuhr was identisch zur Systemzeit ist wenn MSDN nicht lügt. Und mehr Uhren gibts im Rechner nicht soweit ich weiß.



  • Magic-Champ schrieb:

    man muss noch irgendwie die Zeit von verschiedenen Hardware Komponenten auslesen, können, die haben wohl auch einen Timestamp

    ja, dolche timer starten aber jedesmal neu, wenn der PC eingeschaltet wird.
    🙂



  • Es gibt da noch http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx
    Das ist die Zeit der Hardwareuhr was identisch zur Systemzeit ist wenn MSDN nicht lügt. Und mehr Uhren gibts im Rechner nicht soweit ich weiß.

    das hier habe ich gerade gefunden, das sieht doch sehr danach aus. oder?

    http://msdn.microsoft.com/en-us/library/ms725475(VS.85).aspx



  • Hatte ich auch gesehen, aber keine Ahnung wie man es benutzt und was genau es tut. Mehrere Uhren im Rechner zu haben ist eigentlich Quatsch, aber wer weiß, vielleicht gibt es mehrere. Jedenfalls weiß ich auch nicht mehr als da steht. Viel Glück.



  • Magic-Champ schrieb:

    das hier habe ich gerade gefunden, das sieht doch sehr danach aus. oder?
    http://msdn.microsoft.com/en-us/library/ms725475(VS.85).aspx

    sieht aber ziemlich komplex aus, musste extra 'ne dll schreiben und so. ich schätze, 'ping-pong kommunikation' mit 'nem NTP-server über UDP dürfte einfacher sein.
    🙂



  • Magic-Champ schrieb:

    Nein. das ist ja nur die Systemuhrzeit vom Betriebssystem.

    Eigentlich egal. Wenn die Laufzeit, wie weiter oben geschrieben, am Tag der Auslieferung "hardgecoded" wird, dann sollte time () völlig ausreichen.



  • Eigentlich egal. Wenn die Laufzeit, wie weiter oben geschrieben, am Tag der Auslieferung "hardgecoded" wird, dann sollte time () völlig ausreichen.

    mit ein paar Klicks hat der User einfach die Windoofs Systemuhrzeit geändert und schon läuft das Programm bis in alle Ewigkeiten... das ist nicht so richtig das was ich will



  • also wenn du schon an sowas denkst, solltest auch dein compilat protecten sonst ist das kein wirklicher schutz;) weiß nicht ob ich da noch auf dem aktuellsten stand bin aber armadillo war mal nicht schlecht ist auch nicht so billig:) findest hier http://www.siliconrealms.com/ aber 100%ige sicherheit gitbts nicht.


Anmelden zum Antworten