Home of Gamehacking

Normale Version: VB 2010 - Dead Island Riptide Trainer
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallöchen,

Ich wolte mal ein kleinen Trainer erstellen für das Spiel Dead Island Riptide...
Die Erste Option wäre da bei mir, das Geld ändern zu können.

bei meinen Beispiel:

+ 1.000 Money
- 1.000 Money

Funktionieren tuts eigentlich ganz gut, aber ein Problem habe ich dennoch Happy
Sobald das Spiel neu gestartet wird ändert sich die Prozess Id von der

"gamedll_x86_rwdi.dll"

Da aber mein Trainer über Pointer läuft, funktioniert dieser nicht mehr wenn das Spiel neu gestartet wird. Bei anderen Spielen war das nicht so, da ist immer die ID meistens gleich geblieben.

Was könnte ich tun das der Trainer troz id änderung funktionstüchtig bleibt ?




MfG.
Struppi
Du scheinst da was durcheinander zu bringen... Die Prozess ID ist ja, wie der Name schon sagt, die ID (Identifikationsnummer) des bzw. eines Prozesses.
Und diese ID ist bei jedem Neustart eines Spiels oder einer Anwendung so gut wie immer eine andere...
Ich könnte mir jetzt eher vorstellen das du die Basisadresse meinst. Denn diese ist bei einem geladenen Modul ebenfalls so gut wie immer unterschiedlich. Es gibt zwar auch Ausnahmen aber das ist eher selten. Aber bei einer DLL kannst du in der Regel davon ausgehen das die Base Addy immer ne andere is. Bei diesem Spiel hab ich garnicht erst nach Pointern gesucht, weiß nich ob das ohne großen Aufwand möglich war. Ich bin direkt zur Code Injection übergegangen und hab das so realisiert das bei jedem öffnen des Menüs ein gewisser Betrag hinzuaddiert wird.

Es ist durchaus möglich das man bei diesem Spiel das mit Pointern lösen kann, hab ich bei anderen Spielen auch schon so gemacht. Aber du musst eben bedenken das du hier mittels Basisadresse + Offset hantieren musst anstatt auf absolut bezeichnete Adressen zurückzugreifen.
Das Spiel hab ich zwar momentan nicht mehr auf der Platte könnte das aber nochmal draufschmeisen und zumindest dann sagen ob du mittels Pointer so ohne weiteres zum Ziel kommst od. kommen kannst.

Für die Schreibweise in VB sind dann allerdings unsere Spezialisten gefragt.
Wie silent schon schrieb, meinst du wohl die baseaddi vom Modul.
Diese kannst du allerdings ganz einfach mit VB auslesen und das Offset hinzu addieren.
In meinem Modul müsste auch die Funktion dafür zu finden sein.


Sent from my iPhone using Tapatalk 2
Danke schonmal für die Antworten.
Das mit der Code Injection wäre auch eine möglichkeit, wenn ich das mal so hinkriegen würde Happy Dazu müsste ich mir mal bei Zeiten nochmal die Tuts anschauen und intensiver mal mit Code Injection beschäftigen.

Nur bei den Pointer wenn ich da nicht die Prozess ID von der dll mit reinpacke funktioniert das irgendwie nicht.

Der Code sieht so aus:

Code:
'+1000 Geld.
        If GetAsyncKeyState(VK_NUMPAD1) Then
            GetProcessId(ProcName)

            Dim Geld As Int32
            Dim pointer1 As Int32
            Dim pointer2 As Int32

            pointer1 = Read_Long(&H6730000 + &HCC66C8)
            pointer2 = Read_Long(pointer1 + &H1C)
            Geld = Read_Long(pointer2 + &H790)

            Geld += 1000
            Write_Long(pointer2 + &H790, Geld)
        End If

        '-1000 Geld.
        If GetAsyncKeyState(VK_NUMPAD2) Then
            GetProcessId(ProcName)

            Dim Geld As Int32
            Dim pointer1 As Int32
            Dim pointer2 As Int32

            pointer1 = Read_Long(&H6730000 + &HCC66C8)
            pointer2 = Read_Long(pointer1 + &H1C)
            Geld = Read_Long(pointer2 + &H790)

            Geld -= 1000
            Write_Long(pointer2 + &H790, Geld)
        End If


anders wüsst ich jetzt nicht, wie man das mit Pointer machen kann.
Bei pointer1 die erste adresse wäre die id die sich ändert.

Code:
    Private Function getModulPtrByName(ByVal proc As Process, ByVal name As String) As IntPtr
        For i As Integer = 0 To proc.Modules.Count - 1
            If proc.Modules(i).ModuleName.Equals(name) Then
                Return proc.Modules(i).BaseAddress
            End If
        Next
        Throw New Exception("module not found")
    End Function

Ich weiß jetzt nicht wie dein Trainer im ganzen aufgebaut ist...
Meine Trainer funktionieren nach dem Maßstab das, nachdem der Trainer gestartet wurde, erstmal Ausschau nach dem jeweiligen Prozess gehalten wird.
Wenn der Trainer den Prozess, bzw. das Spiel, gefunden hat dann stehen auch sämtliche Daten die weiter nötig sind zur Verfügung.
Das heißt das ich z.B. in einer Variable die PID habe.

Das was du mit erste Adresse bei "pointer1" bezeichnest ist, wie wir schon sagten die Basisadresse + Offset. Da sich die Basisadresse ständig ändert ist auch diese erste Adresse immer anders...
Die getprocessid Funktion musst du drin lassen, allerdings verwechselst du da etwas.
Der Prozess besteht aus mehreren Modulen und diese Module haben nach jedem Neustart eine andere startadresse.
Mit der prozessid sagst du dem Trainer erstmal, um welchen Prozess es sich handelt ... nun musst du, um den Pointer richtig nutzen zu können, noch die startaddi vom Modul auslesen und das machst du mit der Funktion, die bluespide gepostet hat.

Um es auf den Punkt zu bringen... du kannst den Pointer nicht mit einer festen addi Auslesen.

[code=Vb] pointer1 = Read_Long(getmoduleptrbyname(dein_prozess, dein_modul) + &HCC66C8)[/code]



Sent from my iPhone using Tapatalk 2
Funktioniert irgendwie nicht, oder ich mache wieder was falsch.

Code:
pointer1 = Read_Long(getModulPtrByName(ProcName, "gamedll_x86_rwdi.dll") + &HCC66C8)


Der Wert von Typ String kann nicht in System.Diagnostics.process konvertiert werden.

In deiner Projektmappe habe ich gesehen, dass du mein GetModuleBase Funktion
drin hast.

Entweder versuchst du es so
[code=VB]pointer1 = Read_Long(GetModuleBase(ProcName, "gamedll_x86_rwdi.dll") + &HCC66C8)[/code]

Der von dir genannte Fehler tritt auf, weil du bei der Funktion von Bluespide einen
Prozess übergeben musst, allerdings übergibst du mit ProcName einen String.
Wenn du die Funktion von Bluespide nutzen möchtest, dann sollte das folgerndemaßen
funktionieren
[code=VB]pointer1 = Read_Long(getModulPtrByName(Process.GetProcessesByName(ProcName), "gamedll_x86_rwdi.dll") + &HCC66C8)[/code]
Nun wolte ich ein Teleporter mit Laden / Speichern einbauen.
Ist ja soweit ganz gut denke ich, aber wenn ich das benutzen möchte tut sich da garnichts -.-
Der Speichert die Koords nicht in der CodeCave Adresse weder wenn ich eigene posis eintrage im trainer so das man nur Taste Xy drücken muss das man bei abc ist tut sich ebendfalls nix^^

Code:
'Teleporter
        'Aktuelle Position speichern.
        If GetAsyncKeyState(VK_NUMPAD9) Then
            GetProcessId(ProcName)

            ' X Koord
            Dim pointer1 As Int32
            Dim pointer2 As Int32
            Dim pointer3 As Int32
            Dim pointer4 As Int32
            Dim pointer5 As Int32

            ' Y Koord
            Dim pointer6 As Int32
            Dim pointer7 As Int32
            Dim pointer8 As Int32
            Dim pointer9 As Int32
            Dim pointer10 As Int32

            ' Z Koord
            Dim pointer11 As Int32
            Dim pointer12 As Int32
            Dim pointer13 As Int32
            Dim pointer14 As Int32
            Dim pointer15 As Int32

            Telepointer = Read_Long(&H40AAB1)

            pointer1 = Read_Long(GetModuleBase(ProcName, "engine_x86_rwdi.dll") + &H5B6C44)
            pointer2 = Read_Long(pointer1 + &H588)
            pointer3 = Read_Long(pointer2 + &H170)
            pointer4 = Read_Long(pointer3 + &H0)
            pointer5 = Read_Long(pointer4 + &H7E8)

            'System.Threading.Thread.Sleep(500)
            TextBox1.Text = Read_Long(pointer5 + &H98)
            XKoord = Read_Long(Telepointer + pointer5 + &H98)

            pointer6 = Read_Long(GetModuleBase(ProcName, "engine_x86_rwdi.dll") + &H5B6C44)
            pointer7 = Read_Long(pointer6 + &H588)
            pointer8 = Read_Long(pointer7 + &H170)
            pointer9 = Read_Long(pointer8 + &H0)
            pointer10 = Read_Long(pointer9 + &H7E8)

            'System.Threading.Thread.Sleep(500)
            TextBox2.Text = Read_Long(pointer10 + &HA0)
            YKoord = Read_Long(Telepointer + pointer10 + &HA0)

            pointer11 = Read_Long(GetModuleBase(ProcName, "engine_x86_rwdi.dll") + &H5B6C44)
            pointer12 = Read_Long(pointer11 + &H588)
            pointer13 = Read_Long(pointer12 + &H170)
            pointer14 = Read_Long(pointer13 + &H0)
            pointer15 = Read_Long(pointer14 + &H348)

            'System.Threading.Thread.Sleep(500)
            TextBox3.Text = Read_Long(pointer15 + &H9C)
            ZKoord = Read_Long(Telepointer + pointer15 + &H9C)

            'Gespeicherte Position laden.
            If GetAsyncKeyState(VK_NUMPAD8) Then
                GetProcessId(ProcName)

                If XKoord <> 0 Then
                    Write_Long(Telepointer + pointer5 + &H98, XKoord)
                    Write_Long(Telepointer + pointer10 + &HA0, YKoord)
                    Write_Long(Telepointer + pointer15 + &H9C, ZKoord)
                    'System.Threading.Thread.Sleep(500)

                End If
            End If
        End If


Ich weiß da mal wieder nicht weiter.

Seiten: 1 2