[SOLVED]WriteProcessMemory und Wert einfrieren
-
Hallo Leute
,Ich habe mal versucht 'nen Trainer für MineSweeper zu schreiben um den Counter bei 0 bzw. 1 einzufrieren (Nur mal zum ausprobieren von WriteProcessMemory). Das ganze funktioniert ja auch, aber nun zum eigentlichen Problem:
Wenn ich mittels WriteProcessMemory den Wert den der Counter zu einem bestimmten Zeitpunkt hat ändere, so hindert das den Counter ja nicht daran seinen Wert daraufhin wieder zu erhöhen (nur halt vom neuen Wert aus). Deshalb hab ich einfach 'ne Schleife gemacht, um den Wert immer wieder neu zu beschreiben, damit es so aussieht, als sei der Wert des Counters eingefroren. Nun ist das aber keine elegante Lösung, da der Trainer dann die CPU-Auslastung merklich einige Prozent höher treibt. Welche Methode benutzen denn andere Trainer um Werte "einzufrieren"? Sind es etwa auch Schleifen (kann ich mir eigentlich nicht vorstellen)? Eine alternative Methode wäre ja einfach den Code für die Werterhöhung zu "noppen", aber das ist ja nicht was ich will. Ich suche deshalb nach einer Methode einen bestimmten Wert nicht mittels Schleifen einzufrieren. Ich denke dabei an irgendwie sowas wie den Wert mittels WriteProcessMemory zu ändern und dann schreibgeschützt zu machen. Ich bin mir sicher, dass hier jemand eine Lösung hat.
P.S.:
- Habe Forensuche benutzt, aber keine Lösung gefunden
- Habe bei MSDN gesucht, aber auch keinen Ansatz gefundenMfg,
YourDecay
-
Eine alternative Methode wäre ja einfach den Code für die Werterhöhung zu "noppen", aber das ist ja nicht was ich will.
So macht man das aber AFAIK.
Ich denke dabei an irgendwie sowas wie den Wert mittels WriteProcessMemory zu ändern und dann schreibgeschützt zu machen. Ich bin mir sicher, dass hier jemand eine Lösung hat.
Theoretisch könnte man über die MMU die ganze Seite schreibschützen. Dann müsste man noch einen Handler installieren welcher bei Schreibzugriffen prüft ob genau der eine Wert geschrieben wurde oder was anderes, und den Schreibzugriff dann ausführt wenn es NICHT der eine Wert war.
Weiss aber nicht ob man das im Usermode einfach so machen kann.Über die Debugregister müsste auch was gehen.
----
Du musst ja auch nicht 1000 mal pro Sekunde den Wert zurücksetzen, reicht locker wenn du das 1x pro Sekunde machst. Dann kostet das auch nicht merklich CPU Zeit.
-
hustbaer schrieb:
Du musst ja auch nicht 1000 mal pro Sekunde den Wert zurücksetzen, reicht locker wenn du das 1x pro Sekunde machst. Dann kostet das auch nicht merklich CPU Zeit.
Hab mich nebenbei mal beim Autor der CheatEngine erkundigt. Da läuft das wirklich auch über eine Schleife, welche sich nicht so schnell wiederholt, wenn die Anwender sich eigene CheatTables erstellen. Die Alternativmethode mit dem "noppen" ist dort aber auch möglich. Von daher ist mein Problem hiermit gelöst. Danke.

Mfg,
YourDecay
-
code injection wäre auchnoch ne nette möglichkeit.
wenn zB munni/health ausgelsen wird sind kannste in manchen registern gewisse zeiger gespeichert (wo ich schon zu dma abschweife...)
gucks dir mal an, falls du es nochned kennst, echt hübsch