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... - iNvIcTUs oRCuS - 20.09.2012 Ich denke mal das ist bei diesem Titel genauso wie bei den anderen C&C Teilen. Da wird das eingesammelte Geld verrechnet und zu diesem Wert wird das Startkapital der Mission dazuaddiert... Beide Werte werden auch permanent gelesen. Du müsstest also, wenn dem so ist, einen lesenden Codeabschnitt suchen und da mit deiner Codecave ansetzen. EDIT// Übrigens... Reden wir hier immer noch über Command & Conquer Generals??? Ich müsste hier irgendwo noch die 10 Jahre Edition da haben, da könnte ich mir das mal mit anschauen. RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 20.09.2012 Hmm das mit dem lesenden Codeabschnitt versteh ich nicht so ganz... Muss ich jetzt eine Stelle finden, auf die immer wieder zugegriffen wird und wie finde ich eine solche Stelle? Gibt es da eine Möglichkeit, direkt danach zu suchen? Und von wo aus muss ich suchen? Vom Wert selber aus, oder von der schreibenden Stelle aus? LG Darius83 RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 20.09.2012 Ich wiederhole mal meinen letzten Beitrag... (20.09.2012, 19:25)sILeNt heLLsCrEAm schrieb: EDIT// RE: Kleine Hilfe zu WriteProcessMemory gesucht... - Acubra - 20.09.2012 (20.09.2012, 20:06)darius83 schrieb: Hmm das mit dem lesenden Codeabschnitt versteh ich nicht so ganz... Muss ich jetzt eine Stelle finden, auf die immer wieder zugegriffen wird und wie finde ich eine solche Stelle? Gibt es da eine Möglichkeit, direkt danach zu suchen? Und von wo aus muss ich suchen? Vom Wert selber aus, oder von der schreibenden Stelle aus? Hey, du musst einen Codeabschnitt finden, indem deine Adresse ständig gelesen wird. Das kannst du ganz einfach mit Cheat Engine realisieren, indem du einen Rechtsklick auf deine Adresse machst und dann "Find out what accesses this address" wählst. Dann bastelst du ne CodeCave, in der du die GetAsyncKeyState API callst (natürlich in ASM). Dann musst du noch kontrollieren welche Taste gedrückt wurde und dementsprechend deinen Code ausführen lassen oder nicht. RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 20.09.2012 Öhm @sILeNt heLLsCrEAm Hab deinen Edit grad wohl überlesen... Ja reden noch von Generals. Hab allerdings auch noch den Zusatz Stunde Null drauf, da hab ich auch schon ein paar mehr Adressen gefunden XD Allerdings keine, die permanent auf irgendwelche Werte zugreift... @Acubra Ui... da wirds wohl etwas komplizierter... in der du die GetAsyncKeyState API callst (natürlich in ASM)?! Naja mal schaun Und was mache ich, wenn ich keinen permanenten Zugriff finde? Ich sage jetzt mal speziell zum Beispiel das Generalslevel, dort bekomme ich nur einen Lesezugriff, wenn sich der Wert auch wirklich ändert... Muss ich da eventuell über die Erfahrungspunkte gehen, die benötigt werden, um ein Levelup zu erreichen? LG Darius83 RE: Kleine Hilfe zu WriteProcessMemory gesucht... - Acubra - 20.09.2012 (20.09.2012, 21:15)darius83 schrieb: @Acubra Hey, das mit dem GetAsyncKeyState sieht in nem Cheat Engine Auto Assemble Script z.B so aus: Code:
RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 21.09.2012 Man muss nich unbedingt nochmal GetAsync callen... Geht mit nem simplen Hilfsbyte einfacher... Nen simpler Additionscheat halt... Wie gesagt, ich schau mir das mal kurz an... EDIT// So ich hab mir das mal schnell angeschaut. Der Einfachheit halber hab ich dafür nen Keks aufgespielt. Das was Du suchst befindet sich hier... [code=ASM]game.dat+10A65B - 74 78 - je game.dat+10A6D5 game.dat+10A65D - 8B 58 38 - mov ebx,[eax+38] //[eax+38] = Geldadresse game.dat+10A660 - 39 1D 68699E00 - cmp [game.dat+5E6968],ebx game.dat+10A666 - 74 60 - je game.dat+10A6C8[/code] Allerdings hab ich mir nur mal die erste Mission angeschaut, die wo man den Güterbahnhof übernehmen und halten muss. Fraktion war glaub ich die "Westliche Allianz". Es könnte aber durchaus sein das in anderen Missionen und/oder Fraktionen sich ein entsprechender Code an anderer Stelle befindet. RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 25.09.2012 (21.09.2012, 08:06)sILeNt heLLsCrEAm schrieb: Man muss nich unbedingt nochmal GetAsync callen... Ich habs mir grad mal angeschaut. Wenn ich das richtig verstanden habe, wird der Wert an der Geldadresse nach ebx geschrieben, anschliessend mit [game.dat+5E6968] verglichen und wenn beide identisch sind, wird ein Sprung ausgeführt. Wenn ich das weiter richtig verstanden habe, soll ich jetzt eine Codecave schreiben, die ebx vor dem Vergleich ändert. Könnte man theoretisch so machen, dass man bei Tastendruck ein bestimmtes Byte im Speicher von 00 auf 01 setzt, wenn das der Fall ist, erhöhe ebx um 5000 und setze Byte zurück auf 00, ansonsten belasse den Wert so. Hmm mal schaun, ob ich das jetzt auf die Reihe bekomme... Beispielsweise meine Cave beginnt bei Adresse 02360000 Code:
So in etwa könnte ich mir das jetzt gerade vorstellen... RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 25.09.2012 Im Prinzip hast Du das schon richtig verstanden, aber mit der Codecave haperts noch ein bisschen... Wie habe ich die Adresse/den Code gefunden? Der Screenshot zeigts eigentlich... [attachment=1181] Nun zur Codecave... Erstes Problem ist hier das durch den Sprung zur Codecave auch der Befehl [code=ASM]cmp [game.dat+5E6968],ebx[/code]überschrieben wird. Das heißt das der CMP inklusive dem bedingten Sprung auch in der Codecave mit reinmuss... Z.B. könnte man das so lösen... Der Sprung zur Codecave erfolgt von "game.dat+10A65D" [code=ASM]00400410 - 80 3D 00044000 01 - cmp byte ptr [00400400],01 // Hilfsbyte gesetzt Ja/Nein? 00400417 - 75 0E - jne 00400427 // Wenn nicht dann weiter zum Originalcode 00400419 - 81 40 38 10270000 - add [eax+38],00002710 // Ansonsten - Addiere 10.000 zum bestehenden Betrag 00400420 - C6 05 00044000 00 - mov byte ptr [00400400],00 // Nicht vergessen Hilfsbyte zurücksetzen ansonsten wird immer wieder hinzuaddiert 00400427 - 8B 58 38 - mov ebx,[eax+38] // Originalcode 0040042A - 39 1D 68699E00 - cmp [game.dat+5E6968],ebx // Originalcode 00400430 - 0F84 92A21000 - je game.dat+10A6C8 00400436 - E9 2DA21000 - jmp game.dat+10A668 [/code] RE: Kleine Hilfe zu WriteProcessMemory gesucht... - Acubra - 25.09.2012 Hey, das hast du so richtig verstanden. Den freien Code kann man ganz einfach mit Cheat Engine finden. Im Memory Assembler gibt es eine Funktion die nennt sich "Scan for CodeCaves" im Tools Menü. Bei sILeNt heLLsCrEAm's CodeCave würde ich jedoch zunächst die Flags speichern (pushfd/popfd), da du durch den cmp (compare) Befehl das Z-Flag veränderst. |