steganography problem



  • bei der steganographie haben doch normalerweise beide personen das gleiche bild, in welchem die bytes verglichen werden, oder?

    wenn beide personen das gleiche bild haben, warum sollte man sie dann miteinander vergleichen?



  • www.codeproject.com/cpp/HideIt.asp+hide+text+in+pictures+bit+byte&hl=de

    das hilft dir sicherlich weiter, bin da nicht so ganz durchgestiegen 🙂



  • Googelt mal nach Romana Machado, der Extropianerin, die hat die Steganographie erfunden, vor etlichen Jahren, glaube es war '95 oder '96, in den "Anfaengen des Web", die hat das sogar mit einer Skriptsprache hingekriegt! 😉

    Das Prinzip ist genauso einfach, wie es sich anhoert: Man nehme einen Text, zerlege ihn in Bits, und ueberschreibe die Bits eines Images, jeweils bloss ein Bit pro Farbwert pro Pixel, weil das praktisch nicht auffaellt. Man muss natuerlich bei der Komprimierung solcher Bilder dafuer sorgen, dass nach der Entkomprimierung wieder dieselben Bilddaten vorliegen.

    Zum Herauslesen macht man es einfach umgekehrt: Man liest die jeweils unteren Bits pro Farbwert pro Pixel wieder aus und schreibt sie in eine Datei. Voila!!

    Marker zu setzen ist daher kaum notwendig. Man koennte natuerlich z.B. SOT am Anfang und EOT am Ende kodieren (Steuercodes siehe ASCII Steuerzeichen-Tabelle). Oder nur am Ende ein paar Nullbytes. Am besten ist es natuerlich, wenn man die Daten vor dem steganographischen Verfahren verschluesselt, damit die Daten nicht von Fremden ausgelesen werden koennen. Bei der Verschluesselung kann man dann z.B. irgendwo ein Laengenfeld unterbringen.

    Steganographie ermoeglicht es, beliebige Daten sogar vor Geheimdiensten zu verstecken. In Chatrooms oder auf Webforen kann man dann Bilder einstellen, die Steganographische Daten enthalten, waehrend man z.B. uebers Essen oder den Hund plaudert. 😃

    Wollte mich auch mal damit beschaeftigen, bin aber noch nicht dazu gekommen.



  • habs mir mal genauer angeschaut, also du änderst ja von jedem byte des bildes, das letzte bit mit einem bit vom text, also du erhöhst oder setzt es eins runter somit wird das bild minimal in der farbgebung je nach dem was man für eine farbtiefe hat verändert. raussuchen machst du es genau so wie du es rein gemacht hast, nur musst du wissen wann schluss ist, drum schreibst du in den header, oder besser gesagt in die really bilddata, die size von dem text, und somit weißt du wann es zu ende ist, gegebenenfalls noch ein passwort und den datein namen.



  • Hier ist uebrigens noch ein lustiges Textverschluesselungsprogramm, das vielleicht jemandem gute Dienste leisten kann:

    http://www.ekkehardmorgenstern.de/projects.html
    http://www.ekkehardmorgenstern.de/projekte.html



  • danke pradox u. power off fuer die hilfe. pradox leider geht dein link oben nicht, hasst du einen gueltigen?

    habs mir mal genauer angeschaut, also du änderst ja von jedem byte des bildes, das letzte bit mit einem bit vom text, also du erhöhst oder setzt es eins runter somit wird das bild minimal in der farbgebung je nach dem was man für eine farbtiefe hat verändert. raussuchen machst du es genau so wie du es rein gemacht hast, nur musst du wissen wann schluss ist, drum schreibst du in den header, oder besser gesagt in die really bilddata, die size von dem text, und somit weißt du wann es zu ende ist, gegebenenfalls noch ein passwort und den datein namen.

    hm, kann ich normalerweise nicht, das original bild bekommt keiner zu gesicht, muesste ich also in das neue image packen. also koennt ich ja nach den 54 bytes an bitmap header, die text size angeben und danach den zu crypteten text. da ich den header gern im rohzustand, wie er war, behalten wollte.

    ok



  • xoko schrieb:

    hm, kann ich normalerweise nicht, das original bild bekommt keiner zu gesicht, muesste ich also in das neue image packen. also koennt ich ja nach den 54 bytes an bitmap header, die text size angeben und danach den zu crypteten text. da ich den header gern im rohzustand, wie er war, behalten wollte.

    ok

    haeh?? Pack die Textlaenge doch mit in den Textstrom, denn Du in das Bild unterbringen willst:

    #include <stddef.h>    /* fuer size_t */
    #include <stdio.h>     /* fuer printf() */
    
    typedef unsigned char Byte;
    
    #pragma pack(1)
    typedef struct Text {
      Byte text[65536];
    };
    #pragma pack()
    
    void setText( Text* target, const char* source ) {
       const Byte* s  = (const Byte*) source;
       Byte*       d0 = target->text;
       Byte*       d  = target->text;
       Byte*       e  = d + 65536;
       size_t      size;
       d += 2; /* Header ueberspringen */
       while ( *s != (Byte) '\0' ) {
          if ( d < e ) *d++ = *s++; else break;
       } 
       size = (size_t) ( d - d0 );
       d[0] = (Byte)( size >> 8 );  /* hi byte der Laenge */
       d[1] = (Byte) size;          /* lo byte der Laenge */
    }
    
    void getText( char* target, size_t tgt_sz, const Text* source ) {
       Byte* s = source->text;
       char* d = target;
       char* e = target + ( tgt_sz - 1U );
       size_t size = ( (size_t) s[0] << 8 ) | ( (size_t) s[1] );
       s += 2;  /* Header ueberspringen */
       while ( size != 0U ) {
          if ( d < e ) *d++ = (char) *s++; else break;
       }
       *d = '\0';
    }
    
    void test( void ) {
       Text txt;
       char buf[100];
       setText( &txt, "Hallo" );
       printf( "txt.text[0..7] = %02X %02X %02X %02X %02X %02X %02X %02X\n",
          txt.text[0], txt.text[1], txt.text[2], txt.text[3],
          txt.text[4], txt.text[5], txt.text[6], txt.text[7] );
       getText( buf, sizeof(buf), &txt );
    }
    


  • nix haeh?!

    haeh?? Pack die Textlaenge doch mit in den Textstrom, denn Du in das Bild unterbringen willst:

    lieszt du pfeife auch den text den du quotest?!

    also koennt ich ja nach den 54 bytes an bitmap header, die text size angeben und danach den zu crypteten text.



  • xoko schrieb:

    lieszt du pfeife auch den text den du quotest?!

    also koennt ich ja nach den 54 bytes an bitmap header, die text size angeben und danach den zu crypteten text.

    Hab ich nicht kapiert, was Du damit sagen wolltest -- wozu einen Bitmap-Header?? Die Bitmap hat doch einen Header.

    Ausserdem ... um die Uhrzeit ... 😉




Anmelden zum Antworten