Home of Gamehacking - Archiv
Kleine Hilfe zu WriteProcessMemory gesucht... - Druckversion

+- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de)
+-- Forum: Coding (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=15)
+--- Forum: Delphi (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=20)
+--- Thema: Kleine Hilfe zu WriteProcessMemory gesucht... (/showthread.php?tid=1175)

Seiten: 1 2 3 4 5 6 7


RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 14.09.2012

(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);





RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 15.09.2012

Ist doch ganz einfach...
Zugegeben, ich habe auch erst mal recherchieren müssen da ich nicht gleich drauf gekommen bin.
Schreib halt den berechneten Jump als Integer und nicht als Array of Byte. Ganz einfach casten und das wars schon...

Im übrigen hast Du mich nicht verstanden... In meinem Codeabschnitt siehst Du ja das...
[code=Delphi]var
BaseAdress: PByte;[/code]
und nicht...
[code=Delphi]var
BaseAdress: Pointer;[/code]


RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 15.09.2012

Öhm machts einen Unterschied? Die Hilfe in RadCE sagte mir, dass der Rückgabewert vom Typ Pointer ist und nicht PByte... Deswegen hatte ich Pointer genommen, hatte ich ja schon, bevor du deinen Codeschnipsel gepostet hattest.

Ja auf das mit dem Integer schreiben hätte ich auch kommen können :/ Danke für den Tip. Naja hier mal der momentan funktionierende Code, noch ohne das IntegerWrite, dafür mit 2. Hotkey für gestoppten Energieverbrauch (Verbrauch wird nicht erhöht, solange aktiv)








RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 15.09.2012

(15.09.2012, 19:54)darius83 schrieb: Öhm machts einen Unterschied? Die Hilfe in RadCE sagte mir, dass der Rückgabewert vom Typ Pointer ist und nicht PByte...

PByte ist ebenfalls ein Pointer. Unschwer zu erkennen an dem großen P.
Ich dachte Du wolltest das Ganze mittels Jumps lösen?! Da müsstest Du das "BaseAdress" als PByte deklarieren anstatt des allgemeinen Pointers. An der Größe selbst ändert sich nichts. Alle Pointer sind 4 Bytes groß.

grEEtZ sILeNt heLLsCrEAm


PS: Dein Quelltext sieht schon ein bissl komisch aus. Die Einrückung alleine ist schon etwas gewöhnungsbedürftig und unübersichtlich. Auch sind teilweise überflüssige Elemente enthalten wie z.B...
[code=Delphi]if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)),
PChar(ExeFileName)) = 0)
or (StrIComp(FProcessEntry32.szExeFile,
PChar(ExeFileName)) = 0) then begin[/code]

Das reicht völlig aus...
[code=Delphi]
var
Const ExeFileName = 'SC2.exe'; //Z.B. von Starcraft 2

(CompareText(ProcessEntry.szExeFile, ExeFileName) =0)[/code]
Die Hotkey Funktion hab ich bei weitem nicht so kompliziert gestaltet...


RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 15.09.2012

Öhm ja.... Also ich wollte es eigentlich via Jump lösen, kam aber zum Schluss, dass es mit meinem momentanen Wissen so einfacher geht, daher hab ich den Jump verworfen XD

Was das mit der Einrückung betrifft, tut mir leid, hab vergessen, die Einrückungen wieder raus zu nehmen... Die sind nur drin, weil ich im Editor nicht mehr in eine Zeile bekomme ohnenach rechts und links scrollen zu müssen un das finde ich dann ein wenig nervig, wenn man zwischendurch mal was ändern will... Werd die Einrückungen nochmal anpassen XD

Was ist denn da noch so alles überflüssig?
Und wieso ist die Hotkey-Funktion kompliziert? finds eig recht einfach...


LG Darius83

Edit1: So, hab den Post mit dem Quelltext nochmal editiert, hoffe, er ist nun etwas einfacher zu lesen :P


RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 15.09.2012

Z.B. so...




RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 16.09.2012

(15.09.2012, 22:00)sILeNt heLLsCrEAm schrieb: Z.B. so...


Und wo ist da der Unterschied zu meiner Version, ausser dass ich die hotkeys erst registriere, wenn das Spiel läuft und ich meinen Keys via Variable eine ID zuweise?



LG Darius83


RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 16.09.2012

Z.B. kann ich so diesen Überfluss weglassen...
[code=delphi]
const
ID = $FF;
//...
type
TWMHotkey = record
Msg: Cardinal;
idHotKey: Word;
Modifiers: Integer;
VirtKey: Integer;
end;[/code]

Ich habe ja nicht behauptet das Deine Lösung gänzlich unnütz/überflüssig ist.
Aber in deinem Quelltext muss man sich erstmal zurechtfinden.
Du könntest auch die Variablendeklarationen die in mehreren Funktionen/Prozeduren auftauchen nur einmal global deklarieren.


RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 16.09.2012

Gut, da geb ich dir recht Wink Na mal schaun, was sich da noch so machen lässt... Ist wirklich ein wenig unübersichtlich das ganze... Ich werds mir nochmal vornehmen

LG Darius83

Edit1:

So habs nochmal ein wenig aufgeräumt...
Ich hoffe, es ist jetzt ein wenig übersichtlicher geworden Wink





RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 19.09.2012

Hmm ich hab da nochmal eine ganz bescheidene Frage... Und zwar ändere ich ja bisher mit den CodeCaves z.B. den Goldwert, wenn er sich sowieso ändern würde... Quasi, wenn mein Geldsammler zurück ist, oder wenn ich Gold ausgebe um etwas zu kaufen. Ist es auch möglich das ganze einfach via Tastendruck zu machen? Also meinetwegen, wenn ich ALT+A drücke, erhöht sich das Gold um 5000 oder brauche ich dafür einen Pointer? Und wenn das Ganze mit Cave möglich ist, wie muss ich da ansetzen?

LG Darius83