Stream verstecken



  • Unter Windows kannst du die Datei nicht verstecken. Ein Benutzer mit ausreichenden Rechten und passenden Tools kann zu jedem Prozess auflisten, welche Ressourcen der Prozess benutzt, und dazu gehören nun auch einmal Dateien.
    Wenn der Dateiname (inkl. Pfad) frei wählbar ist kannst du ihn in dem Windows Ordnergewühl "verstecken". Mit genügend vielen kryptischen Unterverzeichnissen unter "c:\Dokumente und Einstellungen" kann man selbst hart gesottene Schnüffler abschrecken :D.
    Für unversierte Benutzer reicht es wahrscheinlich schon, das "Hidden" Flag der Datei zu setzen und die Windows Explorer Optionen so einstellen, dass er keine versteckte Dateien mehr anzeigt. Das Verstecken einer Datei funktioniert mit der SetFileAttributes und dem Flag FILE_ATTRIBUTE_HIDDEN .



  • mike4 schrieb:

    Es sollte cross platform für den Anwender nicht auffindbar sein. Hmm ich habe es mit Klassen noch nicht so gut:

    class file_ostream : ofstream
    {
    ...

    Damit bekomme ich folgende Fehler:
    Multiple markers at this line
    - ‘std::basic_ostream<char>’ is not an accessible base of
    ‘file_ostream’

    class file_ostream : public std::ofstream
    {
    


  • Es gibt ja auch noch das gute alte tmpfile: http://en.cppreference.com/w/cpp/io/c/tmpfile :xmas1:



  • Danke besonders out und publicer.

    class file_ofstream : public std::ofstream
    {
    //private:
    std::ofstream ttfs;
    public:
    file_ofstream(const string& TmpFile) : ttfs::open(TmpFile, std::ios::out | std::ios::binary) {}
    };

    Damit bekomme ich:
    Multiple markers at this line
    - Symbol 'open' could not be resolved
    - ‘ttfs’ is not a class or namespace
    - expected ‘{’ before ‘open’

    Wenn ich open weglasse, rsp. in main:
    file_ofstream ttfs(TmpFile);
    // tfs.open(TmpFile, std::ios::out | std::ios::binary);

    habe ich ja dasselbe, der Clou liegt darin die Datei in der Klasse zu öffnen?
    Nochmals vielen Dank für die Klassengestaltung.

    Danke auch cooky451, wenn Obiges nichts wird versuche ich deinen link.



  • Hallo,
    nochmal zum mitschreiben. 😋

    1. Leite nie von ofstream und ifstream ab. Das führt zu nichts. Bevorzuge immer has-a statt is-a Beziehung.
    2. Verwende die Funktionen open und close nicht. Nutze RAII aus!
    3. Das o in ofstream steht für output. Was solltest du anderes mit einem ofstream machen, als etwas auszugeben? Was ich sagen will, std::ios::out ist total überflüssig, es heist nicht umsonst ofstream. Analoges gilt für ifstream .



  • Jetzt bin ich völlig konfus...

    class file_ifstream : public std::ifstream
    {
    //private:
    std::ifstream codedfs;
    public:
    file_ifstream(const string& InFile1) : codedfs(InFile1.c_str(), std::ios::binary) {}
    };

    file_ifstream codedfs(InFile1);
    while(!codedfs.eof())
    {

    Die while schlaufe bricht gleich ab da die Datei nicht richtig eingelesen wurde.
    Ich möchte InFile1 ins memory einlesen, verändern(tmp unsichtbar) und mit einer anderen normalen ifstream Datei vergleichen.
    Danke



  • Wieso zur Hölle willst du von den Streams erben? Was ist dein Ziel? Du verwirrst hier alle.



  • Na weil ich sowas wie unten brauche. Es funktioniert ja wenn ich ofstream tmp auf die Hd schreibe und wieder als ifstream öffne aber genau das will ich ja nicht.

    while(!codedfs.eof())
    Byte = codedfs.get();
    tfs.close();
    etc.
    Danke



  • Nur hat das was du da machst rein garnichts damit zu tun.

    Sag doch mal WAS du erreichen möchtest und nicht wie du es erreichen möchtest.

    Eimne Datei kannst du jedenfalls nicht für den Nutzer unsichtbar anlegen, das geht nicht, höchstens oberflächlich verstecken.





  • Ethon schrieb:

    Nur hat das was du da machst rein garnichts damit zu tun.

    Du meinst du hast keine Ahnung?
    Na ich werde dann halt mal cooky451s Vorschlag probieren.



  • mike4 schrieb:

    Ethon schrieb:

    Nur hat das was du da machst rein garnichts damit zu tun.

    Du meinst du hast keine Ahnung?
    Na ich werde dann halt mal cooky451s Vorschlag probieren.

    Nein, du hast keine Ahnung.
    Du versteckst hier den Stream vor anderen Nutzern des Codes (den Tipp hast du bekommen, da du einige Poster verwirrt hast) und keine Datei vor Nutzern des Programms.

    Bei cookys Vorschlag wird die Datei unter Linux unter /tmp mit nem Schrottnamen angelegt, unter Windows in den Pfad für temporäre Dateien.
    Wenn du ganz viel Glück hast wird bei kleinen Daten nie eine Datei angelegt und alles im RAM angelegt, aber darauf darfst du dich unter keinen Umständen verlassen, weiß nicht ob da irgendein OS eine entsprechende API anbietet.

    Die einzige Möglichkeit eine Datei richtig zu verstecken ist das Schreiben eines modifizierten Festplatten-/Dateisystemtreibers oder eines Rootkits. Da Beides nicht in Frage kommt, schreib die Datei einfach nie auf die Platte und gut.



  • Juhu damit scheint es zu klappen: stringstream



  • DocShoe schrieb:

    Unter Windows kannst du die Datei nicht verstecken. Ein Benutzer mit ausreichenden Rechten und passenden Tools kann zu jedem Prozess auflisten, welche Ressourcen der Prozess benutzt, und dazu gehören nun auch einmal Dateien.
    Wenn der Dateiname (inkl. Pfad) frei wählbar ist kannst du ihn in dem Windows Ordnergewühl "verstecken". Mit genügend vielen kryptischen Unterverzeichnissen unter "c:\Dokumente und Einstellungen" kann man selbst hart gesottene Schnüffler abschrecken :D.
    Für unversierte Benutzer reicht es wahrscheinlich schon, das "Hidden" Flag der Datei zu setzen und die Windows Explorer Optionen so einstellen, dass er keine versteckte Dateien mehr anzeigt. Das Verstecken einer Datei funktioniert mit der SetFileAttributes und dem Flag FILE_ATTRIBUTE_HIDDEN .

    Du bist wohl einer von denen die Adminrechte für ihr Programm brauchen weil sie alles im Installationsordner spoeichern?


Anmelden zum Antworten