Forum: PC-Programmierung Zugriff auf pagefile.sys


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte das Erstellungsdatum von pagefile.sys mit C++ (WIN32 API) 
auslesen.

Leider bekomme ich mit CreateFile(), GetFileAttributeEx() und _stat() 
keinen Zugriff darauf.

Kennt jemand noch einen weitere Möglichkeit?

Alternativ geht auch 'irgendwas anderes'. Es geht nur darum, ein 
(möglichst) aktuelles Datum auszulesen - ohne die System-Uhr zu 
benutzen.

Danke, Peter

von Jan H. (j_hansen)


Bewertung
0 lesenswert
nicht lesenswert
Temporäre Datei anlegen und davon Erstellungsdatum lesen?

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jan H. schrieb:
> Temporäre Datei anlegen und davon Erstellungsdatum lesen?

Es müsste wohl was sein, was von Windows beim Start selber generiert 
wird, um Uhrzeit-Manipulationen (größtenteils) auszuschließen.

Wenn ich sowas anlege, dann bekomm ich vermutlich auch nur die 
System-Uhr.

von Jan H. (j_hansen)


Bewertung
0 lesenswert
nicht lesenswert
Am besten beschreibst du erst einmal, was du bezweckst.

Windows kann ich auch mit einer geänderten Zeit neustarten, damit 
schließt du schon einmal keine Manipulationen aus.

Ein Webservice kann dir die echte Zeit geben, wenn du Internetzugriff 
voraussetzen kannst.

Du könntest auch das Systemlog durchforsten, oder folgendes Dokument für 
Tipps: 
https://digital-forensics.sans.org/community/papers/gcfe/detection-backdating-system-clock-windows_2870

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ganz primitiv:

"dir c:\pagefile.sys" aufrufen und Ausgabe parsen.

Anderer Ansatz:

System-Eventlog parsen und Eintrag für Systemstart extrahieren.

Noch ein Ansatz:

Wmic os get lastbootuptime

und Ausgabe parsen -- oder das API-Äquivalent davon herausfinden und 
aufrufen.

von Jens G. (jensig)


Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. (rufus) schrieb:

>Ganz primitiv:

>"dir c:\pagefile.sys" aufrufen und Ausgabe parsen.

pagefile.sys ist üblicherweise hidden. Also wenn schon, dann "dir /a 
..."

Allerdings zeigt das wohl nur die Änderungszeit an. Wenn es wirklich um 
die Zeit der Erstellung geht, dann "dir /a /tc ...".

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ja, dir /ah ist irgendwie untergegangen.

> Allerdings zeigt das wohl nur die Änderungszeit an.

Die ist die Zeit des letzten Systemstarts.

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Parsen ist nicht so meine Sache. Ich lese jetzt ein paar Systemordner 
ein und nehme das neueste Datum. Das ist genau genug.

Danke für die Tipps.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Ich lese jetzt ein paar Systemordner ein und nehme das neueste Datum.

Was möchtest Du denn damit bestimmen?

Welche Flags hast Du bei Deinem CreateFile-Aufruf für dwDesiredAccess 
verwendet?

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Was möchtest Du denn damit bestimmen?
>
> Welche Flags hast Du bei Deinem CreateFile-Aufruf für dwDesiredAccess
> verwendet?

Es geht um eine Laufzeitbegrenzung einer Software. Die Demo soll bis zum 
Tag X laufen. Wenns dann ein paar Tage mehr sind macht es auch nichts.

Ich nehme dazu FindFirstFile() und FindNextFile() und lese dann immer 
das letzte Änderungsdatum verschiedener Ordner aus. Das neueste Datum 
nehm ich dann.

Danach kann ich das gefundene Datum dann noch einmal mit der Systemzeit 
vergleichen und erneut das neuere Datum nehmen.

Danke.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Aha. Dann hilft Dir pagefile.sys nicht, das verändert nämlich seine 
Änderungszeit nur beim Booten, danach aber nicht mehr. Damit kann man 
sehr schön rausfinden, wann das System das letzte Mal gebootet wurde, 
aber das kann --je nach Uptime des Rechners-- auch schon mehrere Monate 
bis Jahre her sein.

Du willst also abfangen, daß jemand die Systemzeit zurückstellt, um Dein 
Programm für längere Zeit nutzen zu können.

Alternativ könntest Du die Aufrufe Deines Programmes und die 
(kumulierte) Laufzeit bestimmen, und nach X Aufrufen oder Y Stunden die 
Segel streichen.

Natürlich kann jemand, der es drauf anlegt, auch solche Mechanismen 
umgehen.

Du könntest natürlich auch einfach einen ntp-Zugriff auf einen 
Zeitserver im Internet machen -- und wenn der nicht möglich ist, die 
Funktion verweigern.


Andererseits: Meinst Du, daß Deine Software so interessant ist, daß 
dieser ganze Benutzergängelungsaufriss nötig ist?

von werner (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das ist doch Pfusch. Viele haben heute gar keine Auslagerungsdatei mehr. 
RAM ist billig und die SSD wird auch geschont.

von Peter (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Alternativ könntest Du die Aufrufe Deines Programmes und die
> (kumulierte) Laufzeit bestimmen, und nach X Aufrufen oder Y Stunden die
> Segel streichen.
>
> Natürlich kann jemand, der es drauf anlegt, auch solche Mechanismen
> umgehen.
>
> Du könntest natürlich auch einfach einen ntp-Zugriff auf einen
> Zeitserver im Internet machen -- und wenn der nicht möglich ist, die
> Funktion verweigern.
>
> Andererseits: Meinst Du, daß Deine Software so interessant ist, daß
> dieser ganze Benutzergängelungsaufriss nötig ist?

Nein, meine Software ist bei weitem nicht so interessant.

Deshalb spar ich mir das Alles was Du da aufzählst und lese statt dessen 
nur ein paar Ordner-Infos ein.

von MiWi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jan H. schrieb:
> Am besten beschreibst du erst einmal, was du bezweckst.
>
> Windows kann ich auch mit einer geänderten Zeit neustarten, damit
> schließt du schon einmal keine Manipulationen aus.
>

Dann starte W10 einmal mit der vorher im Bios vollkommen verstellten Uhr 
und wundere Dich über die Uhrzeit im Anmeldeschirm...

von oszi40 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> und lese statt dessen nur ein paar Ordner-Infos ein.

Wenns genauer werden soll, wäre NTP-Eintrag nützlich?
NtpServer Registry Key?

Wichtiger als Klimmzüge, die Kunden verärgern, ist ein guter Service. 
Schreib nach dem x-ten Aufruf nach x Tagen Deine Serviceadresse + 
Bestellhotline auf den Monitor. Die könnte ja jede Woche etwas größer 
werden?

von Rainer V. (rudi994)


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> pagefile.sys mit C++ (WIN32 API) auslesen... Leider bekomme ich mit
> CreateFile(), GetFileAttributeEx() und _stat() keinen Zugriff darauf.

Bei mir geht es ohne W32API in C++ einfach mit stat() aus <sys/stat.h>, 
auch dann, wenn pagefile.sys versteckt ist. Neuestes Datum/Uhrzeit in 
struct stat liefert bei mir der Member st_ctime (Datum der letzten 
Statusänderung). Dies gilt hier zumind. für das Administrator-Konto 
meines Rechners. LG

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.