![]() |
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 ![]() 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 ![]() 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 ![]() 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. |