Daten schützen ?



  • Ich habe jetzt schon lange mit SFML gearbeitet und frage mich langsam, wie ich die Daten, die mein Programm nutzt, von außen zu schützen.
    (Bilder zum Beispiel)
    Gibt es einen Weg, wie man die Daten von anderen schützen kann, aber das Programm es immer noch mit den Standard befehlen wie,
    Bildöffnen("DATA\\IMAGES\\PICTURE01.bmp");
    öffnen kann?



  • Was genau willst du wovor schützen?
    Du kannst Daten hashen und mit einer Liste auf einem Server vergleichen und sie bei Bedarf neu herunter laden.
    Außerdem kannst du Daten verschlüsseln, sodass es für andere Programme deutlich schwieriger wird die Daten zu verstehen. Oder du benutzt redundante Daten, eine Hashliste zum Beispiel, sodass du Änderungen erkennst. Verhindern kannst du es damit natürlich nicht.

    Daten vor Zugriff schützen die auf der Festplatte liegen ist Aufgabe des Betriebssystems, es gibt nur leider kein brauchbares Betriebssystem dass auf Sicherheit Wert legt.



  • nwp2 schrieb:

    Was genau willst du wovor schützen?
    Du kannst Daten hashen und mit einer Liste auf einem Server vergleichen und sie bei Bedarf neu herunter laden.
    Außerdem kannst du Daten verschlüsseln, sodass es für andere Programme deutlich schwieriger wird die Daten zu verstehen. Oder du benutzt redundante Daten, eine Hashliste zum Beispiel, sodass du Änderungen erkennst. Verhindern kannst du es damit natürlich nicht.

    Daten vor Zugriff schützen die auf der Festplatte liegen ist Aufgabe des Betriebssystems, es gibt nur leider kein brauchbares Betriebssystem dass auf Sicherheit Wert legt.

    Ich will das man als Benutzer nicht auf die Daten kommt und darauf kein Zugriff hat.
    Das Programm an sich sollte aber die Daten finden können und selber benutzen können.
    Wenn ich zum Beispiel, wie jetzt mit Bildern arbeite sind die Daten manipulierbar und somit wird das Aussehen des Programms geändert.
    Das will ich aber verhindern.



  • Das Manipulieren lässt sich auf oben genannte Arten überprüfen.
    Du kannst einen neuen Nutzer anlegen und dich dann als dieser Nutzer anmelden, aber du hast keine Garantie dass sich nicht wer als Administrator/root anmeldet und trotzdem Daten manipuliert.
    Das Problem ist, dass alle gängigen Betriebssystem nach dem Prinzip Programmrechte = Nutzerrechte funktionieren. Alles was dein Programm darf, darf auch der Nutzer und andersrum. Deine einzige Chance ist es, die Daten in einem Format abzulegen die dein Programm, aber nicht der Nutzer versteht.

    Edit: Mit genug Aufwand versteht er sie schon, zumal er ein Programm gegeben hat was das kann. Man kann aber den Aufwand so hoch machen dass es sich nicht lohnt.



  • Danke : D



  • könnte man die daten nicht während der laufzeit erstellen und vor beenden wieder löschen?
    dann könnte man aber immernoch WÄHREND der laufzeit auf die daten zugreifen



  • Jain, funktioniert, hilft aber nicht. Um die Daten zu erstellen muss man sie erstmal haben oder erzeugen können. Wenn man sie erstellen oder erzeugen kann, braucht man nicht den Umweg über die Festplatte gehen. sondern sie direkt benutzen. Damit wären wir wieder bei verschlüsselten Daten.


  • Mod

    leg dir fuer alle dateien eine checksumme im programm ab (z.b. mittels eines tools das ueber alle dateien in einem verzeichnis geht und eine md5s generiert und als eine .h abspeichert).
    Also MD5 ueber den dateinamen+dateiinhalt.

    beim laden der dateien kannst du dann immer erst die md5 errechnen und gegen die tabelle vergleichen, findest du die MD5 nicht, weiss dein programm dass was veraendert wurde und du kannst entsprechend reagieren.



  • Ich würde ein Container-Format programmieren, welches seinen Inhalt mit Metadaten beschreibt (z.B. Bild, Text, oder Sound) und darin die wirklichen Files verschlüsselt abspeichern, nachdem du eine Checksumme generiert und auf andere Weise verschlüsselt im Header abgelegt hast. Den Key dazu legst du irgendwo im Programmquellcode als Resultat eines komplizierten Algorithmus fest (nicht als Konstante).

    Beim Laden kannst du dann ersteinmal die Verschlüsselungen rückgängig machen und im Anschluss daran die Dateien entpacken. Dann die Checksummen prüfen 😃

    MfG



  • /rant/ schrieb:

    Ich würde ein Container-Format programmieren, welches seinen Inhalt mit Metadaten beschreibt (z.B. Bild, Text, oder Sound) und darin die wirklichen Files verschlüsselt abspeichern, nachdem du eine Checksumme generiert und auf andere Weise verschlüsselt im Header abgelegt hast. Den Key dazu legst du irgendwo im Programmquellcode als Resultat eines komplizierten Algorithmus fest (nicht als Konstante).

    Beim Laden kannst du dann ersteinmal die Verschlüsselungen rückgängig machen und im Anschluss daran die Dateien entpacken. Dann die Checksummen prüfen 😃

    MfG

    Und was sollte einen Hacker daran hindern, einfach den "komplizierte" Algorithmus zum Erzeugen des Schlüssels zu kopieren und selbst zu verwenden?
    Er muß diesen dazu nicht einmal verstehen.



  • Kurz gesagt:
    Daten die auf der Festplatte des Users liegen sind nicht vor Zugriff sicher.
    Du kannst es nur erschweren.
    Ich würde einen einfachen aber effektiven Weg wählen:
    Programmiere ein eigenes Archivformat. Das ist weniger kompliziert als man denkt. Es ist natürlich nicht so effektiv wie zips, aber die erkennt man sehr leicht.
    Hier mal ein Beispiel für so ein Format wie ich das mal gelöst hatte:

    ------ Header -----------
    MAGICNUMBER; sizeof(int) // Eine zufällige Zahl wie 42 um das eigene Format zu erkennen 
    NUMFILES; sizeof(int) // Anzahl der Dateien
    ------ Header -----------
    ------ Dateiblock (wiederholt sich, siehe numfiles) ---------
    OFFSET; sizeof(int) // Position des ersten Bytes der Datei
    DATEINAME; sizeof(char)*255 // Name der Datei
    LÄNGE; sizeof(int) //  Länge in Bytes
    ------ Dateiblock ---------
    ------ Datenblock (wiederholt sich, siehe numfiles --------
    DATEN; 
    ------ Datenblock --------
    

    Ich habe die Daten einfach durch die CryptoAPI gejagt und ne einfache Verschlüsselung gewählt. Ist nicht schwer zu knacken sowas, hält aber das normale Script-Kiddie mit seinem automatisierten Zip-Password-Knacker davon ab an die Daten zu kommen. Gepaart mit einer MD5-Liste kann das schon ziemlich stark sein.
    Aber 100% Schutz gibts nicht. Viele Archive von professionellen Games werden "geknackt" um zu modden... von daher nicht so viel Energie da reinstecken.
    lg


Log in to reply