Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

1

16.01.2013, 22:21

Trainer - Adresse wiederfinden?

Hi Leute!
Hier geisterte vor einer Weile mal ein Tutorial herum, das beschrieb, wie man einen Trainer erstellt.

Gut, soweit ist das kein Problem: Speicher auslesen, Werte vergleichen, Werte vergleichen, Werte vergleich usw. bis man die Adresse gefunden hat.
Aber bei jeder Aktion immer erst die Adresse suchen, das ist auf Dauer nicht praktikabel.

Gibt es eine Möglichkeit, eine bestimmte Variable, bzw. deren Adresse immer wieder zu finden?
Also einmal suchen und dann nur noch starten, wie damals mit den Moorhuhn-Trainern^^

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

2

17.01.2013, 00:08

OK, ich mache Fortschritte. Einige Variablen haben immer die gleiche Adresse. Bei anderen wiederum ändert sich die Adresse, je nachdem was getan wird, aber ich erkenne langsam Muster.

Anbei mal ein kleiner Screenshot, der zeigt, dass ich mittlerweile die Höhe (über NN und über Grund) aus AFPD auslesen kann:

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

17.01.2013, 11:26

Nach welchem Prinzip gehst du denn vor? Meine einzige Idee wäre es sich mit nem Debugger einzuklinken und zu warten. Es gab mal ein Programm ( ich glaube es hieß einfach Cheat Engine ) da konnte man im Prinzip jeden Prozess mit beeinflussen. Da wurden die richtigen Variablen irgendwie durch Änderung von Werten gefunden. Hab das nicht mehr ganz im Kopf. Das musste man aber glaube ich auch von Hand machen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

4

17.01.2013, 16:56

GameWiz32 kann das auch, arbeitet aber nach dem Trainerprinzip aus dem Forum hier (App angeben, Wert eingeben, auf Wertänderung warten, Wert wieder ändern, Adresse gefunden)
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

5

20.01.2013, 13:47

OK, ich habe ArtMoney genommen - das funktioniert super.
Die Werte die ich benötige habe ich jetzt: Position, Orientierung.

Daraus berechne ich jetzt (simulierte) Sensordaten, bastel einen Autopilot ran und schicke die Steuerbefehle per PPJoy wieder zurück.

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

6

20.01.2013, 23:30

Ich hab in den letzten Tagen ein paar Fortschritte erzielt, was das Auslesen von Daten und die Weiterverarbeitung angeht.
Herausgefunden habe ich alle "wichtigen" Daten, die ich benötige:
- absolute Position im Raum
- relativer Vektor "nach rechts"
- relativer Vektor "nach oben"
- Zeit seit Programmstart in Sekunden
Alle Werte sind 32-Bit float (bzw. als solche lesbar)

Das Auslesen findet folgendermaßen statt:
- Alle Variablen auslesen
- Wenn sich die Zeit nicht verändert hat, nochmal auslesen, usw.
- Wenn sich die Zeit verändert hat, die "neuen" Daten weitergeben
Die Simulation läuft mit ca. 50 Frames pro Sekunde. Grob geschätzt.

Aus den beiden Vektoren kann man sich den Dritten per Kreuzprodukt berechnen und schon habe ich die Rotationsmatrix des Flugzeugs! :D
Diese Matrix geteilt durch die Matrix des letzten Frames ergibt die Rotationsmatrix während der Zeitdifferenz aus letzem und jetzigem Frame.
Daraus kann ich die Euler-Winkel berechnen.
Diese geteilt durch die Zeitdifferenz ergibt die Drehrate um alle 3 Achsen -> Die Werte, die das 3D-Gyroskop liefern würde.

Mit Processing lasse ich die Drehrate im Hintergrund plotten. Auf dem Screenshot sieht man die zeitlichen Verläufe der Drehraten um alle 3 Achsen. Der Screenshot ist nach der Landung aufgenommen worden. Ich habe selber gesteuert, der Autopilot kommt erst noch.
»BlazeX« hat folgendes Bild angehängt:
  • Screenshot.png

CCodex

Frischling

Beiträge: 19

Beruf: Elektroniker Fachrichtung Energie- und Gebäudetechnik

  • Private Nachricht senden

7

21.01.2013, 16:06

Arbeite am besten mit OllyDBG oder CheatEngine es gibt Tuts wie du variablen adressen finden kannst.
Es gibt 2 arten von speicheradressen: statisch und dynamisch.
Die statischen speicheradressen sind bei jedem programmaufruf gleich außer wenn eine neue version des programms raus gekommen ist.
Die dynamischen speicheradressen sind meist pointer die von einer statischen adresse ausgehen zu einer weiteren adresse führen und diese wieder eine adresse beinhaltet. Wenn die variable in einer struktur definiert ist benötigt man nur die statische adresse der struktur und das passende offset das zu variable führt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CCodex« (21.01.2013, 16:18)


Techie

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

8

21.01.2013, 18:29

Ich habe mal einen Wallhack mit Cheat Engine und dem Immunity Debugger ( kostenlos ohne anmeldung :))) ) gemacht.
Du kannst bestimmte 'Assembler-routinen' suchen und wenn da z.B. " MOV EAX 0x04 " steht ,dann kannst du die Adresse von '0x04' auslesen und diese nutzen :)

Eine recht hilfreiches Tutorial -> Der Link *trol*

P.S.: Am einfachsten eigentlich Zeiger nutzen. Es gibt's Zeiger ,deren eigener Adresse konstant war ( glaube ich zumindestens )
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

9

26.01.2013, 21:10

Danke!
Hab allerdings keine DLL Injection benötigt.

Alle Variablen, die ich benötige, haben statische Adressen. So reicht ein Direktzugriff auf den Speicherbereich von außen aus.
Anhander der internen "Zeit"-Variable prüfe ich, wann die Daten aktuell sind. Denn der Simulator läuft mit rund 60 Updates pro Sekunde.

Jetzt muss ich die Daten nur noch auf den µC schicken und wieder zurückholen. Und natürlich das AHRS und den Autopilot implementieren.

idontknow

unregistriert

10

26.01.2013, 23:10

Mal eine Frage dazu. Im zweiten Post hast du ja geschrieben, bei manchen Variablen ändert sich die Adresse! Wie bist du an die gekommen, oder sind die Adressen der Sachen die du brauchst bei jedem Programmstart fix?

Werbeanzeige