Trainer Modul!?

05/16/2013 20:37 Acin™#1
Hallo.
Ich bin dringend auf eure hilfe angewiesen ;)
Ich schreibe zurzeit Testweise einen Trainer für Stronghold.
Den Pointer des Goldes habe ich bereits gefunden.
Screen (wichtig):
[Only registered and activated users can see links. Click Here To Register...]

1. Sehe ich richtig?

Die "Pointer" Adresse ist "Stronghold Crusader.exe"+009292A4.
009292A4 + Offset 15c ergibt den Pointer?
(Alle anderen Adressen auf dem Screen ändern sicher immer nach einem neustart, also kann es ja nur 009292A4 sein.)

2. Ich finde zurzeit kein anständiges Autoit Tutorial bzw. Code Snippet für einen Trainer. Ich finde nur einen haufen S4League Tuts (Snippets), wo aber überall ohne Offset gecodet wird. Habt ihr da ein geeignetes?

Gruß
05/16/2013 20:55 -STORM-#2
Entweder du hast dich ziemlich ungenau ausgedrückt, oder du hast nicht wirklich verstanden, wie ein Pointer funktioniert.
Pseudocode:
Code:
BaseModule = "Stronghold Crusader.exe"
BaseOffset = 0x9292A4
BaseAddress = _MemoryModuleGetBaseAddress(BaseModule) + BaseOffset // = "Stronghold Crusader.exe"+009292A4

Offset = 0x15C
Gold_Address = read(BaseAddress) + Offset // = 0x116BB74 + 15C = 0x116BCD0
Gold_Value = read(Gold_Address) // = 999
read(x) gibt dabei immer den Wert zurück, der an der Speicheradresse x steht.
Die entsprechenden Adressen und den entsprechenden Wert habe ich als Kommentar daneben geschrieben.

Natürlich kann man das auch weniger ausführlich aufschreiben und zusammenfassen zu:
Code:
Gold_Address = read(_MemoryModuleGetBaseAddress("Stronghold Crusader.exe")+009292A4)+0x15C
Gold_Value = read(Gold_Address)
05/16/2013 21:05 Acin™#3
Danke dir.
Dies ist nur die auslese funktion, wie würde dann eine zum schreiben aussehen?
Bzw. wird NomadMemory bei deinem Code gebraucht?
Ich habe nicht vor AutoIT zu lernen, deswegen kenne ich mich nicht richtig aus ;)

Gruß
05/16/2013 21:28 -STORM-#4
Statt read(x) kannst du die MemoryRead Funktion der NomadMemory.au3 verwenden.
Dabei müssen natürlich die entsprechenden Parameter übergeben werden. Das sind neben der Adresse als erstem Parameter noch das ProcessHandle als Zweiter und der Datentyp in Form eines Strings als dritter. Allerdings ist der Datentyp als Default bereits dword bzw. 4byte, was bei Gold passen sollte.
Code:
_MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
Analog dazu kannst du den Wert ändern mit:
Code:
_MemoryWrite($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword')
Dabei kommt $v_Data dazu, also der Wert, den du an die Adresse schreiben willst.
Das Handle wird von _MemoryOpen($PID) zurückgegeben, wobei $PID von ProcessExists("NameDesProzesses") zurückgegeben wird.

In AutoIt:
Code:
$PID = ProcessExists("Stronghold Crusader.exe")
$ah_Handle = MemoryOpen($PID)

$BaseAddress = _MemoryModuleGetBaseAddress($PID, "Stronghold Crusader.exe") + 0x9292A4
$Gold_Address = _MemoryRead($BaseAddress, $ah_Handle) +0x15C

;// GoldWert auslesen
$Gold_Value = _MemoryRead($Gold_Address, $ah_Handle)
;// GoldWert auf 99999 schreiben
_MemoryWrite($Gold_Address, $ah_Handle, 99999)
AutoIt wirst du allerdings lernen müssen. Diesen Code kannst du als Beispiel verwenden, aber zu einem Trainer gehört deutlich mehr.
05/17/2013 13:57 Acin™#5
Wie ich schon sagte, habe ich Keine große Ahnung von AutoIT.
Doch wie ich deine Codes nun einbinde, ist mir noch unklar.
Ich würde mich über ein kleines fertiges Trainer script freuen.
(Mit dem Beispiel "Gold").
Wenn du möchtest, kannst du dafür mein e*g Haben.

Gruß
05/17/2013 14:08 Achat#6
Quote:
Originally Posted by -Rainbow View Post
Den Pointer des Goldes habe ich bereits gefunden.
Die "Pointer" Adresse ist "Stronghold Crusader.exe"+009292A4.
009292A4 + Offset 15c ergibt den Pointer?
(Alle anderen Adressen auf dem Screen ändern sicher immer nach einem neustart, also kann es ja nur 009292A4 sein.)
In dem Spiel ist die Gold Adresse statisch und kein Pointer!

0x00D61208 (v.1.1)


Eine Frage zu CE:

[Only registered and activated users can see links. Click Here To Register...]

Wie kann ich dort die Adresse exportieren?

Wenn ich Rechtsklick -> Kopieren mache, kommt so was dabei raus:
<Address>"Name.exe"+961208</Address>

Ich möchte aber die Darstellung so wie oben im Bild, geht das?

MfG
05/17/2013 14:17 -STORM-#7
Quote:
Originally Posted by Achat View Post
Ich möchte aber die Darstellung so wie oben im Bild, geht das?
Das Bild im ersten Post stammt aus CE 6.2.
Da wurde die Ansicht Change Address, zu der du durch Doppelklick auf die Adresse/den Pointer kommst, überarbeitet.

@Rainbow: Was versprichst du dir überhaupt von dem Trainer? Solange du nur ein paar Werte verändern willst, brauchst du doch nichts weiter als CE.
05/17/2013 14:29 Acin™#8
Quote:
Originally Posted by -STORM- View Post
Das Bild im ersten Post stammt aus CE 6.2.
Da wurde die Ansicht Change Address, zu der du durch Doppelklick auf die Adresse/den Pointer kommst, überarbeitet.

@Rainbow: Was versprichst du dir überhaupt von dem Trainer? Solange du nur ein paar Werte verändern willst, brauchst du doch nichts weiter als CE.
Diesen Trainer werde ich als Grundgerüst für alle Spiele benutzen.

Quote:
Originally Posted by Achat View Post
In dem Spiel ist die Gold Adresse statisch und kein Pointer!

0x00D61208 (v.1.1)


MfG
Das heisst...?
05/17/2013 20:39 -STORM-#9
Quote:
Originally Posted by -Rainbow View Post
Wie ich schon sagte, habe ich Keine große Ahnung von AutoIT.
Doch wie ich deine Codes nun einbinde, ist mir noch unklar.
Ich würde mich über ein kleines fertiges Trainer script freuen.
(Mit dem Beispiel "Gold").
Wenn du möchtest, kannst du dafür mein e*g Haben.

Gruß
Für eGold würde ich dir das wohl machen, aber ehrlich gesagt glaube ich nicht, dass dir der Trainer viel bringt, wenn du den Source nicht verstehst.
05/17/2013 20:57 Acin™#10
Alles klar, 64 e*g biete ich.
Den Source werde ich schon verstehen.
Ich habe nicht vor, außer den Trainern noch was anderes in dieser Sprache zu machen.

Gruß
05/18/2013 16:59 -STORM-#11
Ok, hab dir jetzt mal nen kleinen Trainer zusammengebaut. So sieht er aus:
[Only registered and activated users can see links. Click Here To Register...]
Soweit in Ordnung?
Bin bis 18 Uhr erstmal noch on.
Wenn du mir bis dann das eGold schickst, kriegst du den Source (compilen kannst du ja selbst, oder?) direkt.
Ansonsten kannst du auch nen MM suchen, dann dauert es halt etwas länger.
05/18/2013 17:32 Acin™#12
#Gesendet.

Sieht okay aus.
Ich habe es sogar schon selbst gelöst, meins war aber Crap, da ich kein Offsets hinzufügen konnte.

Gruß
05/18/2013 17:37 -STORM-#13
So, die PN mit dem Source ist raus. :)
Falls etwas nicht richtig funktioniert, einfach melden.
Eigentlich sollte alles gehen, aber da ich das Spiel nicht zum Testen habe, sind Bugs nicht auszuschließen.

Edit: Die Bewertung für die Transaktion hab ich auch abgegeben.