Nen Abend, war gerade dabei die lena-Reversingtutorials durchzumachen, da habe ich Lust bekommen so eine Codecave zu verwenden, nachdem ich jetzt weiß was das ist ^.^
Habe dabei aber einige Probleme, und hoffe ihr könnt bzw. wollt mir dabei helfen :)
Habe eine Konsolen-Anwendung mit VS11 in C++ erstellt, die einen String einlist, denn dann mit einem Passwort vergleicht und eben eine Ausgabe macht ob die Eingabe übereinstimmt.
Mein Ziel ist es, falls das Passwort falsch war, eine MessageBox anzuzeigen.
Der Vergleich Eingabe mit Passwort sieht jetzt so aus (circa natürlich):
Da hatte ich vor das MOV durch ein JMP zu meiner Codecave zu ersetzen.
Da habe ich schon das Problem, wohin jmpen?
Hatte einfach runtergescrollt bis zu freiem Speicher, das geht aber leider nicht da der freie Speicher ja bei jedem Neustart wo anderst anfängt, wie ich nach einem Crash von Olly bemerkt habe ;/
Ok, hätte ich mir denken können.
Die Idee die mir gerade eingefallen ist, wäre Speicher per VirtualAllocEx zu reservieren, sieht aber nach Arbeit aus.
Gibt's da einen einfacheren Weg? In C gebe es ja auch noch die Alloc Funktion, die sieht einfacher aus ^^
Um dann die MessageBox anzuzeigen muss ich wohl zuerst per LoadLibrary User32.dll laden, dann per GetModuleHandle und GetProcAdress die Adresse irgendwo speichern, danach mit CALL EAX oder so ähnlich ausführen, davor die Parameter in der umgekehrten Reihenfolge wie in der ApiHelp-Datei angegeben pushen. Die Konstanten wie MB_OK sind zum Glück eh auf msdn zu finden :)
Die ganzen Strings die daür notwendig werden, wollte ich auch in meinem dann reservierten Speicher unterbringen.
Die Frage ist jetzt, ist wie ich den reservieren soll, und ob mein Ansatz so auch stimmt.
Wobei mir gerade einfällt das ich da komplett falsch gedacht habe, wie soll ich den beim Erstellen dann wissen wohin mit dem Code? xD
Wird ja logischerweiße zur Laufzeit reserviert. *self-facepalm*
Danke schonmal im Voraus :)
mfg, 2n0w
Habe dabei aber einige Probleme, und hoffe ihr könnt bzw. wollt mir dabei helfen :)
Habe eine Konsolen-Anwendung mit VS11 in C++ erstellt, die einen String einlist, denn dann mit einem Passwort vergleicht und eben eine Ausgabe macht ob die Eingabe übereinstimmt.
Mein Ziel ist es, falls das Passwort falsch war, eine MessageBox anzuzeigen.
Der Vergleich Eingabe mit Passwort sieht jetzt so aus (circa natürlich):
Code:
MOV EDX, xxxx ;ASCII "Richtiges Passwort" TEST EAX, EAX JE Ausgabe MOV EDX, xxxxx ;ASCII "Falsches Passwort" Ausgabe
Da habe ich schon das Problem, wohin jmpen?
Hatte einfach runtergescrollt bis zu freiem Speicher, das geht aber leider nicht da der freie Speicher ja bei jedem Neustart wo anderst anfängt, wie ich nach einem Crash von Olly bemerkt habe ;/
Ok, hätte ich mir denken können.
Die Idee die mir gerade eingefallen ist, wäre Speicher per VirtualAllocEx zu reservieren, sieht aber nach Arbeit aus.
Gibt's da einen einfacheren Weg? In C gebe es ja auch noch die Alloc Funktion, die sieht einfacher aus ^^
Um dann die MessageBox anzuzeigen muss ich wohl zuerst per LoadLibrary User32.dll laden, dann per GetModuleHandle und GetProcAdress die Adresse irgendwo speichern, danach mit CALL EAX oder so ähnlich ausführen, davor die Parameter in der umgekehrten Reihenfolge wie in der ApiHelp-Datei angegeben pushen. Die Konstanten wie MB_OK sind zum Glück eh auf msdn zu finden :)
Die ganzen Strings die daür notwendig werden, wollte ich auch in meinem dann reservierten Speicher unterbringen.
Die Frage ist jetzt, ist wie ich den reservieren soll, und ob mein Ansatz so auch stimmt.
Wobei mir gerade einfällt das ich da komplett falsch gedacht habe, wie soll ich den beim Erstellen dann wissen wohin mit dem Code? xD
Wird ja logischerweiße zur Laufzeit reserviert. *self-facepalm*
Danke schonmal im Voraus :)
mfg, 2n0w