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) |
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... 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 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 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 |