Hi,
dafür zu sorgen, dass keiner die Datei ändern oder löschen kann dürfte so ziemlich unmöglich sein.
Solange die Datei im Dateisystem zu finden ist, wird es möglich sein hier zuzugreifen. Spätestens ein Admin hat alle dazu nötigen Rechte.
Richtig schwer würdest du es ihm wohl erst machen, wenn du die Datei vor ihm versteckst, dazu einfach mal hier und da einen Hook umbiegen und ruck-zuck hast du ein Rootkit und deine Software gilt als hochgefährlich und sollte nie verwendet werden!
Nein, ganz ehrlich, du kannst dich nicht vor Veränderung schützen, schließlich möchtest du auch in die Datei schreiben. Was du tun kannst ist, Veränderung feststellen. Hier gibt es das Schlüsselwort Hash, diese sind relativ eindeutig für jede Datei. Natürlich gibt es für jede Größe des Hashes nur endlich viele verschiedene Dateien, aber es ist trotzdem so ziemlich unmöglich den gleichen Hash für unterschiedliche Dateien zu bekommen. Diesen kannst du an einer bestimmten Stelle (z.B. Anfang oder Ende des Logs) mit abspeichern und verschlüsseln.
Wenn du die Datei das nächste mal veränderst, kannst du hier leicht feststellen ob der Hash noch stimmt oder nicht (jede Änderung an der Datei würde zu einem nicht führen!).
Letztlich ändert es aber nichts daran, dass du nie garantieren kannst, dass die Datei nicht verändert wird. Du kannst es nur (leichter) feststellen. Knackt jmd. deine Verschlüsselung und erkennt wie du den Hash berechnest, ist es wieder egal was du hier machst.
Spätestens das Formatieren einer Festplatte führt auch wieder zum Löschen deiner Datei.
Sicher gehen kannst du also nicht. Du kannst aber ein paar Dinge versuchen um dich bestmöglich zu schützen. Es erhöht alles nur den Aufwand, der getrieben werden muss! Die eine Sache ist, bette die Datei ein. Hierfür kommen zum Beispiel Archive in Frage! Redundanz ist auch noch eine Möglichkeit, mehr als eine kopie der Datei (wobei sich dann Kompression mit anbietet). Hier solltest du aber auch schauen, dass du die vor dem Verschlüsseln ausführst, Verschlüsselung führt zu einer sehr zufälligen Verteilung von Zeichen, da würde die Kompression nicht mehr viel bringen.
Und zu guter Letzt, verwende einfach Honeypots. Schreib einfach ein Log-File mit bedeutungslosen Dingen. Dieses sollte ruhig unverschlüsselt sichtbar sein. Hier kannst du ja nur Programmstart und Ende eintragen, ist eigentlich egal. Einfache Benutzer können dieses File dann mit dem echten Log verwechseln, verändern und löschen und es hätte keine Auswirkungen auf dein Programm.
Spätestens wenn sich jmd. die Mühe macht und dein Code dissassembliert, hilft dir das alles auch nicht mehr, aber jmd. der darin gut genug ist und diese Arbeit auch auf sich nimmt wird sicherlich auch deine anderen Schutzmechanismen knacken. Da wäre dann mein Lösungsvorschlag ein eigener USB-Stick für das Programm, mit einem eigenen Properitären Treiber, der sicherstellt dass nur dein Programm schreibend zugreifen kann :wink:
Gruß Der Anmeldeboykottierer