08.07.2011, 20:44
Ja ne is schon klar. CE handiert ja nunmal mit "Allocated Memory" um seine Scripts auszuführen. Dieser Speicher is ja nunmal dynamisch.
Ich kann mich noch an eine Funktion in CE v5.6.1 erinnern da konnte man seine Codecave direkt vorgeben, also wo diese gemacht werden soll.
Im Debuggerfenster/MemoryView mit rechts geklickt und CE hat nen Jump von der gerade markierten Adresse zu einer anderen Adresse gemacht wo dann die Codecave sein soll. Und das alles inklusive Originalcode und dem Rücksprung. Schade das es diese Funktion nicht mehr gibt.
Ich mache die Codeinjections nun immer folgendermaßen. An dem Befehl den ich mit meinem Jump zu meiner Codecave mache, einen Befehl davor einen Breakpoint gesetzt und die Codecave manuell geschrieben.
Aber das mit dem dynamischen Speicher ist auch kein Problem. Man kann das nämlich auch ganz komfortabel mit in eine Codecave packen, also die Berechnung des Rücksprungs.
Beispiel:
[code=ASM]
Originalcode
7476A4B7 - 8B 42 20 - mov eax,[edx+20]
7476A4BA - 89 41 10 - mov [ecx+10],eax
Geänderte Bytes
7476A4B7 - E9 44 5F C9 8B - jmp 00400400
7476A4BC - 90 - nop
Codecave würde normalerweise so aussehen
00400400 - 8B 42 20 - mov eax,[edx+20]
00400403 - 89 41 10 - mov [ecx+10],eax
00400406 - E9 B1 A0 36 74 - jmp 7476A4BC
Aber so funktionierts auch
00400400 - 8B 42 20 - mov eax,[edx+20]
00400403 - 89 41 10 - mov [ecx+10],eax
00400406 - 50 - push eax
00400407 - B8 BC A4 76 74 - mov eax, 7476A4BC
0040040C - FF E0 - jmp eax
Da aber hier das EAX Register "überschrieben" wird müssen wir nach dem Jump zur Codecave folgendes noch machen...
7476A4BC - 58 - pop eax
[/code]
Das bedeutet dann natürlich das bei einem 5 Byte Befehl der durch den Sprung zur Codecave überschrieben wird, kein Platz mehr ist für das zurückholen des Wertes des EAX Registers vom Stack. Man müsste also noch nen weiteren Befehl mit in die Codecave nehmen.
Ich kann mich noch an eine Funktion in CE v5.6.1 erinnern da konnte man seine Codecave direkt vorgeben, also wo diese gemacht werden soll.
Im Debuggerfenster/MemoryView mit rechts geklickt und CE hat nen Jump von der gerade markierten Adresse zu einer anderen Adresse gemacht wo dann die Codecave sein soll. Und das alles inklusive Originalcode und dem Rücksprung. Schade das es diese Funktion nicht mehr gibt.
Ich mache die Codeinjections nun immer folgendermaßen. An dem Befehl den ich mit meinem Jump zu meiner Codecave mache, einen Befehl davor einen Breakpoint gesetzt und die Codecave manuell geschrieben.
Aber das mit dem dynamischen Speicher ist auch kein Problem. Man kann das nämlich auch ganz komfortabel mit in eine Codecave packen, also die Berechnung des Rücksprungs.
Beispiel:
[code=ASM]
Originalcode
7476A4B7 - 8B 42 20 - mov eax,[edx+20]
7476A4BA - 89 41 10 - mov [ecx+10],eax
Geänderte Bytes
7476A4B7 - E9 44 5F C9 8B - jmp 00400400
7476A4BC - 90 - nop
Codecave würde normalerweise so aussehen
00400400 - 8B 42 20 - mov eax,[edx+20]
00400403 - 89 41 10 - mov [ecx+10],eax
00400406 - E9 B1 A0 36 74 - jmp 7476A4BC
Aber so funktionierts auch
00400400 - 8B 42 20 - mov eax,[edx+20]
00400403 - 89 41 10 - mov [ecx+10],eax
00400406 - 50 - push eax
00400407 - B8 BC A4 76 74 - mov eax, 7476A4BC
0040040C - FF E0 - jmp eax
Da aber hier das EAX Register "überschrieben" wird müssen wir nach dem Jump zur Codecave folgendes noch machen...
7476A4BC - 58 - pop eax
[/code]
Das bedeutet dann natürlich das bei einem 5 Byte Befehl der durch den Sprung zur Codecave überschrieben wird, kein Platz mehr ist für das zurückholen des Wertes des EAX Registers vom Stack. Man müsste also noch nen weiteren Befehl mit in die Codecave nehmen.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
Traineranfragen per PM werden prinzipiell gelöscht...