Home of Gamehacking - Archiv
Code Injekten in VB - Druckversion

+- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de)
+-- Forum: Coding (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=15)
+--- Forum: Visual Basic 6, VB.NET (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=19)
+--- Thema: Code Injekten in VB (/showthread.php?tid=441)

Seiten: 1 2


RE: Code Injekten in VB - DNA - 08.07.2011

Ich glaube wir haben aneinander vorbei geredet Wink
Hab nie gesagt, dass Crysis eine variable Modulbase hat, sondern nur,
dass er sein CI script so umschreibt, dass es feste codecave addis sind,
ist für einen Anfänger zum Einstieg einfacher.
(Besser noch CI mit TSearch machen und durch converter jagen)

Wie die Sprünge berechnet werden weiß ich ja, ist für mich also kein Problem Wink

Problem ist nur, dass es für einen Anfänger umständlicher ist, hab das erst
letztem einem erklärt (kein neuling in sachen VB) und selbst er hat es nicht
auf anhieb verstanden und bevor ich chesar jetzt lang und breit erkläre,
wäre es für ihn einfacher, feste codecave addis zu nutzen ... mehr wollte
ich mit meinem 1. Beitrag eigentlich nicht sagen.
Also sry, wenn das falsch rüber gekommen ist Wink


RE: Code Injekten in VB - iNvIcTUs oRCuS - 08.07.2011

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.