Elderan
0
Hallo,
in einem CrackMe soll man zu der folgenden Adresse springen: 00 22 FF 24
In dem CrackMe ist dann ein Buffer Overflow, sprich das Programm speichert per strcpy() das 1. Konsolen-Argument in einem (zu kleinem) Char-Array ab. Die oben angegeben Adresse soll dann die Rücksprungadresse der Funktiom mit dem Overflow überschreiben, so dass das Programm nicht mehr im Hauptthread weiterläuft, sondern zu der Adresse springt und die dort hinterlegte Funktion ausführt.
Eigentlich gar nicht so schwer, dachte ich, allerdings habe ich ein Problem mit der 22 in der Adresse, denn dies stellt das Zeichen " dar und es per \ zu maskieren klappt irgendwie nicht.
Ich habe dazu folgendes C Programm geschrieben:
So wenn ich das Programm jetzt starte, bekomme ich die Meldung, dass zu der Adresse "0002d961" nicht gesprungen werden kann.
Ändere ich die 22 in der Adresse in z.B. eine 28, so erhalte ich die Meldung, dass die Adresse "0028ff24" nicht vorhanden ist, ist ja auch logisch, da diese nicht in der Exe definiert ist, aber wie man sieht, möchte er zu der angegeben Adresse springen.
So, jetzt dachte ich mir, ich maskiere die 22 in der Adresse mittels Backslash (Nr. 5c), und habe dann folgende Adresse
char *adresse = "\x24\xff\x5c\x22";
Allerdings erhalte ich dann weiterhin, dass "0002d961" nicht vorhanden ist.
Kann mir evt. jmd. helfen, wie ich per Konsole die \x22 übergebe, so dass diese in die Rücksprungadresse übernommen wird, oder ist mein vorhaben vergebens?
in einem CrackMe soll man zu der folgenden Adresse springen: 00 22 FF 24
In dem CrackMe ist dann ein Buffer Overflow, sprich das Programm speichert per strcpy() das 1. Konsolen-Argument in einem (zu kleinem) Char-Array ab. Die oben angegeben Adresse soll dann die Rücksprungadresse der Funktiom mit dem Overflow überschreiben, so dass das Programm nicht mehr im Hauptthread weiterläuft, sondern zu der Adresse springt und die dort hinterlegte Funktion ausführt.
Eigentlich gar nicht so schwer, dachte ich, allerdings habe ich ein Problem mit der 22 in der Adresse, denn dies stellt das Zeichen " dar und es per \ zu maskieren klappt irgendwie nicht.
Ich habe dazu folgendes C Programm geschrieben:
Code:
int main() {
char cmd[255];
char *ziel = "crackme.exe";
char *buffer = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"; //Ein paar NOPs zum füllen
char *adresse = "\x24\xff\x22";
strcpy(cmd, ziel);
strcat(cmd, " \""); //1. Agrument steht zwischen "..."
strcat(cmd, buffer); //Zeichen damit der Speicher überläuft
strcat(cmd, adresse); //Jetzt die Adresse wohin gesprungen werden soll
strcat(cmd "\""); //Das Abschließende "
system(cmd);
}
So wenn ich das Programm jetzt starte, bekomme ich die Meldung, dass zu der Adresse "0002d961" nicht gesprungen werden kann.
Ändere ich die 22 in der Adresse in z.B. eine 28, so erhalte ich die Meldung, dass die Adresse "0028ff24" nicht vorhanden ist, ist ja auch logisch, da diese nicht in der Exe definiert ist, aber wie man sieht, möchte er zu der angegeben Adresse springen.
So, jetzt dachte ich mir, ich maskiere die 22 in der Adresse mittels Backslash (Nr. 5c), und habe dann folgende Adresse
char *adresse = "\x24\xff\x5c\x22";
Allerdings erhalte ich dann weiterhin, dass "0002d961" nicht vorhanden ist.
Kann mir evt. jmd. helfen, wie ich per Konsole die \x22 übergebe, so dass diese in die Rücksprungadresse übernommen wird, oder ist mein vorhaben vergebens?