Home of Gamehacking - Archiv

Normale Version: Code Injekten in VB
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hey Leute,

Wie ich ich in CE ein Code Injekten machen kann ist soweit klar, aber wie schreibt man das alles in VB?
Hab sämtliche Tuts angeguckt, durch gelesen aber keines brachte mich weiter.

Das ist z.b. die Code Injektion für Crysis 1 (1.9 Original) UE Ammo:

Code:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here
mov [eax+04],999
originalcode:
//mov [eax+04],ecx
mov al,01

exit:
jmp returnhere

"Crysis2.exe"+BF1CB7:
jmp newmem
returnhere:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Crysis2.exe"+BF1CB7:
mov [eax+04],ecx
mov al,01
//Alt: db 89 48 04 B0 01


Aber wie schreibst man das alles in VB :(

Danke für eure Hilfe.

Hey,

du musst die codeinjection ausführen und dir die Bytes rauskopieren, die
geschrieben wurden ...
Wie du diese Bytes dann in einen VB code verpackst, kannst du meinem
VB Trainer Tutorial entnehmen.

Allerdings wird das für dich so noch ne harte nuss, da deine CE CI mit AllocatedMemory
arbeitet und das ist für einen "Anfänger" in sachen VB nicht einfach ...
Nimm am besten feste CodeCave Adressen, sofern dies möglich ist.
Feste Codecave Addys sind immer möglich. Da in jeter EXE zwichen den einzelnen Sections freie Stellen sind.
Hmm? Bei mir nicht ... bei einigen spielen ändert sich die CodeCave Addi.
Es sei denn du meinst jetzt z.B. Codecave = Base + 12345 ?
(07.07.2011, 20:38)sILeNt heLLsCrEAm schrieb: [ -> ]Feste Codecave Addys sind immer möglich. Da in jeter EXE zwichen den einzelnen Sections freie Stellen sind.

Hey,
ich hatte schon viele Spiele in denen es zwar temporär feste Codecave Adressen gab, aber wenn man das Spiel neu gestartet hat war die ModuleBase der .exe eine andere und somit glaube ich auch der "freie" Code für die CodeInjection an einer anderen Stelle. Bzw. selbst wenn die Adresse der Codecave sich nicht ändert, so ändern sich jedoch die Bytes des Jumpbefehls (also die Bytes nach E9) und wenn man nicht weiss wie man die berechnet, dann kommt man bei diesen Spielen auf jeden Fall schonmal nicht weiter.
Glaub ich net... Basisadresse + 08/15 ist immer gleich ansonsten reden wir hier von Kopierschützen und Polymorphen Code.

Selbst in einer DLL ist der Code ausgehend von der Basisadresse immer gleich.

Eben genau das was DNA in seinem Post davor geschrieben hat.
(08.07.2011, 02:20)sILeNt heLLsCrEAm schrieb: [ -> ]Glaub ich net... Basisadresse + 08/15 ist immer gleich ansonsten reden wir hier von Kopierschützen und Polymorphen Code.

Selbst in einer DLL ist der Code ausgehend von der Basisadresse immer gleich.

Eben genau das was DNA in seinem Post davor geschrieben hat.

Hey,
ja BaseAdress +Offset sollten immer gleich sein, ich glaub ich habe dich dann falsch verstanden. Ich meinte das die VirtualAddress dann immer eine andere ist. Dann muss man erst die ImageBase von abziehen, um die RelativeVirtualAddress zu bekommen (soweit ich das verstanden habe).
Richtig!

Das die Virtuelle Adresse anders sein kann sieht man ja ganz deutlich bei einer DLL. Aber eben ImageBase/ModulBase + Offset = Virtual Adress. Somit sind auch die Sprungweiten immer gleich. Das sieht man auch schön bei den DLL's.

Womit es ein Problem geben könnte ist, wenn man einen eigenen Check mit einbaut.
Wenn man z.b. zu seinem Geld etwas hinzuaddieren möchte und die Cheats in der DLL stehen und die Codeinjection z.b. folgendermaßen aussieht...
[code=ASM]
10800400 - 80 3D 00038010 01 - cmp byte ptr [10800300], 0x01
10800407 - 75 11 - jne 1080041A
10800409 - 81 80 F2050000 10270000 - add [eax+000005F2], 0x2710h
10800413 - C6 05 00038010 00 - mov byte ptr [10800300], 0x00
1080041A - Originalcode wiederherstellen und Jump raus aus Codecave
[/code]
Wenn also an Adresse 10800300 das Byte 01 gefunden wird, bzw. der Vergleich erfolgreich ist, wird der Cheat ausgeführt ansonsten ganz normal fortgefahren. In einer EXE mit fester Modulbasis klappt das perfekt, aber bei einer DLL z.b. kann beim nächsten Start diese schon wieder nicht dieselbe Modulbasis haben, aber geprüft würde nachwievor das Byte an Adresse 10800300. Und der Befehl das nach dem Ausführen des Cheats an selbiger Adresse das Byte auf den Wert 0 zurückgesetzt wird kann somit auch fatale Folgen haben...
Nun, dann sind wir eigentlich genau da was ich meinte, die codecaves haben
"nicht wirklich" eine feste addi und somit für einen Anfänger nicht
so leicht zu handhaben.

Mal schauen, vielleicht kommt von mir bald mal nen tutorial dazu
inkl. neuem Trainermodul zur Berechnung der jmp Bytes.
Das tut aber bei Sprüngen nichts zur Sache. Denn in der ASM Schreibweise wird ja nicht geschrieben von Wo nach Wohin gesprungen wird, sondern wie weit. Und die Sprungweite zurück ist demnach auch immer die gleiche, also bis nach dem Jump zur Codecave.
Wo sollte also das Problem liegen?

Mal abgesehen davon hat Crysis 2 keine variable Modulbasis.
Seiten: 1 2