Adresse eines Wertes herausbekommen
-
Dieser Beitrag wurde gelöscht!
-
Ja.
Allerdings gerade bei Java nicht empfehlenswert, wegen GC.
-
Dieser Beitrag wurde gelöscht!
-
Das hängt vom Betriebssystem und nicht von C++ ab.
Unter Windows kann man mit ReadProcessMemory auf den Speicher anderer Prozesse zugreifen, den Speicher kann man dann entsprechend durchsuchen. Davor brauchst du wahrscheinlich QueryVirtualMemory oder so, ist jetzt schon lange her.
-
Dieser Beitrag wurde gelöscht!
-
@luis Ja, das geht. Aber nicht vorgefertigt, da musst du einiges dafür programmieren.
Was zu tun wäre:- Erstmal den passenden Prozess finden und ein Handle darauf öffnen
- Die Speicherbereiche ermitteln die der Prozess verwendet
- Jeden Speicherbereich durchgehen und Stückweise mit
ReadProcessMemory
lesen - In den gelesenen Stücken nach deinem Wert suchen
Jetzt wirst du nur dummerweise tausende Stellen finden wo der Wert steht. Und da sich die Adresse wie du schon richtig erkannt hast bei Java jederzeit ändern kann... wird das so wohl nix werden.
(Bzw. falls dir das nicht klar ist: Bei Java ist die Adresse nicht bloss bei jedem Programmstart anders. Die ändert sich auch während das Programm läuft!)Such dir ein einfacheres Projekt. Oder such dir fertige Tools die das können (falls es sowas gibt).
-
Was man dazu braucht, ist nicht eine Adresse sondern eine Verkettung von Adressen und Offsets. Was man macht ist quasi (Programmanfang+Offset0) als Adresse1 interpretieren. Da (Adresse1+Offset1) als Adresse usw. und nach n Schritten ist Adresse n dann die Adresse von deinem Wert.
Es gibt Tools, die diese Offsets ermitteln, bzw. dabei helfen. Eine Anwendung dafür sind Livesplit Autosplitters: https://github.com/LiveSplit/LiveSplit/blob/master/Documentation/Auto-Splitters.md
-
Da du noch nicht klar gesagt hast, dass es sich um einen Cheat handeln soll (sondern nur so etwas wie CheatEngine, die du kennst und für Cheats ja nehmen könntest): Wenn das Java-Programm kooperativ ist, dann ist das ganz einfach. Weil es beispielsweise von dir geschrieben ist. Andererseits gibt es auch weitaus einfachere Möglichkeiten, Programme kooperieren zu lassen. Oder anders gefragt: Was genau und warum hast du vor?
-
Mein Tip: Er will in Minecraft cheaten
-
Und noch was anderes, da bin ich gestern spontan nicht draufgekommen... Da es Java ist, hättest du auch andere Möglichkeiten. Da kann man recht viel reverse engineeren, das geht wieder meist einfacher, als bei C++ Programmen. Und dann könntest du z.B. eigenen Java Code injecten, der über Reflection mit dem restlichen Programm interagiert.
Aber alles ein Haufen Aufwand natürlich.
-
Man kann auch einen "agent" reinhängen: https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html
Damit kann man auch alle möglichen Schweinereien anstellen.
-
Genau, sowas hatte ich im Sinn. Aber das ist schon etwas fortgeschritten.
-
Das ist sehr fortgeschritten, weswegen ich es auch nicht erwähnt habe.