(14.09.2012, 17:14)sILeNt heLLsCrEAm schrieb: Da hab ich dich schon richtig verstanden, aber irgendwie hatte ich mit meinem Handy nen Verbindungsabbruch und der Beitrag wurde widererwarten nicht gepostet...
Egal... Hier siehst Du ein Beispiel...
[code=Delphi]var
BaseAdress: PByte;
begin
BaseAdress:= VirtualAllocEx (hProcess, nil, 1000, Mem_Commit or Mem_Reserve, Page_Execute_ReadWrite);[/code]
Da die Basisadresse des zugewiesenen Speichers ja bekannt ist (BaseAdress) musst Du davon ausgehend auch wissen wo der Jump hinsoll. Nehmen wir mal an die Basis Adresse ist 10000000h und der Jump steht an Adresse 10000500h. Dann könntest Du das auch so verstehen das der Jump an "Basisadresse + 0x500h" steht.
Das wiederrum würde dann so aussehen...
[code=Delphi]WriteProcessMemory(hProcess, Pointer(BaseAdress+$500), lpBuffer, nSize, lpNumberOfBytesWritten);[/code]
grEEtZ sILeNt heLLsCrEAm
Hihi, ihr habt mich beide nicht verstanden :/ Man, ich hasse das, wenn ich nicht weiss, wie ich das erklären soll...
Das was du grad geschrieben hast, hab ich verstanden, mein Problem ist Folgendes:
BaseAdress: Pointer
BaseAdress:= VirtualAllocEx(...) // Nehmen wir mal an: 00400100
Wie komme ich jetzt an diese 00400100, um diese an entsprechender Stelle im Originalcode als Jump zu schreiben?
Manuell mach ich das ja so:
WriteBytesToMem(Pidhandle,ENERGIEVERBRAUCH,Written,JmpEnergieverbrauch);
wobei JmpEnergieverbrauch:array[0..4] of byte;
welches sich aus 5 Bytes zusammensetzt, JmpByte+4ZielBytes, die ich berechnen könnte, wenn ich diese 00400100 als 4 Bytes vorliegen hätte.
Alternativ dein Lösungsansatz mit: Push Baseadress;Ret; -> $68 $00$01$40$00 $C3
Wenn ich es richtig verstanden habe, aber ich habe ja 00400100 und nicht $00$01$40$00, also, wie splitte ich jetzt, bzw, wie wandle ich die mir vorliegende Aresse in Pointerform in die benötigte Array of Byte-Form um, um den Originalcode mit dem Jump zur Cave zu ersetzen?
Ich hoffe, ich habe es jetzt besser erklärt, wo es bei mir hängt...
LG Darius83
Edit: Habs jetzt zwar irgendwie zum Laufen bekommen, aber würd mich trotzdem freuen, wenn mir da nochmal jemand hilft... Habs jetzt so gelöst, dass ich den Befehl erst mit 00000000 als Adresse komplett geschrieben habe und anschliessend einen write ausgeführt habe, der nur die Adresse überschreibt:
JmpEnergieverbrauch:array[0..7] of byte = ($68,$00,$00,$00,$00,$C3,$90,$90);
WriteBytesToMem(Pidhandle, ENERGIEVERBRAUCH, Written, JmpEnergieverbrauch);
WriteProcessMemory(Pidhandle, Pointer(ENERGIEVERBRAUCH+$01), @BaseAddr, 4, Written);
Es gibt 10 verschiedene Typen von Personen, die, die ich mag und die, die ich nicht verstehen kann...