VB.NET WriteMemory mit Multipointern ?????

10/21/2013 20:28 .Scare™#1
Hallo Com,

Ich hab ne Frage: ich versuche zum testen in Solitär ein Trainer zu basteln,
ich habe mir da den Basepointer rausgesucht und versucht den so zu benutzen, hier ein Beispiel:

PHP Code:
 Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        Dim p 
As Process() = Process.GetProcessesByName("Solitaire")
        If 
Not p.Length 0 Then
            Memory
.Writememory(p(0), &HFFD0AFA8 + &HE + &H32CInt(TextBox1.Text), 4)
        Else 
dabei scheisst mir aber Solitär ab..... (Mag mich nicht:confused::confused::confused::confused::face palm:)

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

Hier habe ich unten die Adresse (FFD0AFA8) ist der Basepointer
und dazu habe ich noch die 2 Offsets... 14 und 50

was mache ich falsch? Weis hier einer eine Lösung zu meinem Problem?

14 = &HE
50 = &H32

oder verstehe ich da etwas falsch?

mfg
10/21/2013 20:40 ​Tension#2
So funktioniert das nicht mit Pointern, dass solltest du dir nochmal durchlesen.
[Only registered and activated users can see links. Click Here To Register...] kannst du ja auch für VB übersetzen.
Was du machen musst:
&HFFD0AFA8 auslesen, &H32 addieren und den Wert dann auslesen und &HE addieren, dies dann erneut auslesen sprich:
Code:
ReadMemory(ReadMemory(ReadMemory(&HFFD0AFA8,4)+&H32,4)+&HE,4)
(Wobei ReadMemory halt den Buffer returnt und die 4 halt die größe zum Auslesen ist. ( 4 Bytes )
10/21/2013 20:56 .Scare™#3
Quote:
Originally Posted by Ten$ion View Post
So funktioniert das nicht mit Pointern, dass solltest du dir nochmal durchlesen.
[Only registered and activated users can see links. Click Here To Register...] kannst du ja auch für VB übersetzen.
Was du machen musst:
&HFFD0AFA8 auslesen, &H32 addieren und den Wert dann auslesen und &HE addieren, dies dann erneut auslesen sprich:
Code:
ReadMemory(ReadMemory(ReadMemory(&HFFD0AFA8,4)+&H32,4)+&HE,4)
(Wobei ReadMemory halt den Buffer returnt und die 4 halt die größe zum Auslesen ist. ( 4 Bytes )
Vielen dank für die rasche Antwort.!

Also wen ich dies nun richtig verstehe, kann ich es so machen:
BaseAdresse = ReadMemory(ReadMemory(ReadMemory(&HFFD0AFA8,4)+&H3 2,4)+&HE,4)

Und nun sollte ich auf die BaseAdresse schreiben können?

Ich verstehe c++ leider nicht so wirklich 😁😁

Nochmals danke fürs schreiben.

Mfg
10/21/2013 21:50 ​Tension#4
Quote:
Originally Posted by .Scare™ View Post
Vielen dank für die rasche Antwort.!

Also wen ich dies nun richtig verstehe, kann ich es so machen:
BaseAdresse = ReadMemory(ReadMemory(ReadMemory(&HFFD0AFA8,4)+&H3 2,4)+&HE,4)

Und nun sollte ich auf die BaseAdresse schreiben können?

Ich verstehe c++ leider nicht so wirklich 😁😁

Nochmals danke fürs schreiben.

Mfg
Das war ein Pseudo-Code Beispiel ;) die API-Funktion heißt ReadProcessMemory und hat mehr Parameter.

Ich wollte dir zeigen, wie Pointer ausgelesen werden.
Zeig mir mal deine MemoryRead Funktion von der Klasse die du verwendest ( also Parameter usw. ) dann kann ich dir das Schreiben.
Jedenfalls ist das so:
Du liest die Base Adresse aus und addierst das erste Offset hinzu, danach liest du das Ergebnis davon wieder aus ( neue Adresse ) und fügst dort das zweite Offset hinzu und davon liest du auch das Ergebnis aus und dann hast du deine Dynamische Adresse. Danach kannst du deine WriteMemory Funktion aufrufen und die Adresse verwenden.
10/21/2013 22:05 .Scare™#5
Danke dir, ich glaube ich habe es gepeilt, ansonsten schreibe ich hier morgen nochmals hin. Danke für deine bereitschaft mir zu helfen.

👍
10/21/2013 22:10 MrSm!th#6
Ganz nebenbei:
Die Offsets in CE sind bereits hexadezimal.

Der letzte Schritt ist übrigens zu viel. 14 ist bereits das letzte Offset und das Ergebnis ist die Zieladresse. Wenn du an der liest, erhälst du keine weitere Adresse, sondern den dortigen Wert (Punkte oder was auch immer du ändern willst).
10/21/2013 22:28 ​Tension#7
Oh stimmt sorry, arbeite nicht alt zu viel mit Pointern bzw. ist es lange her das ich welche verwendet habe.

@.Scare™:
gerne, falls du noch Fragen hast kannst du dich auch per PN melden, ich kann versuchen zu helfen ( kann aber kein VB könnte dich höchstens in die richtige Richtung leiten )
10/22/2013 18:27 .Scare™#8
Guten Abend miteinander, so ich bin nun wider am PC =)

Also ich arbeite mit dem Modul:
(Auch von epvp gefunden)

Nu bekomm ichs aber nicht so hin das ich es so auslesen kann wie du es hier beschrieben hast :
Quote:
ReadMemory(ReadMemory(ReadMemory(&HFFD0AFA8,4)+&H3 2,4)+&HE,4)
Mfg .Scare™
10/22/2013 19:00 ​Tension#9
sollte so gehen:
Code:
Dim iPointer As Integer = ReadLong(Prozess, ReadLong(Prozess, &HFFD0AFA8)+&H32)) + &HE
und dann halt
Code:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
        Dim p As Process() = Process.GetProcessesByName("Solitaire") 
        If Not p.Length = 0 Then 
            Dim iPointer As Integer = ReadLong(p(0), ReadLong(p(0), &HFFD0AFA8)+&H32)) + &HE
            Memory.Writememory(p(0), iPointer, CInt(TextBox1.Text), 4) 
        Else
sollte so funktionieren.
10/22/2013 19:57 .Scare™#10
Hallo Ten$ion, Danke für deine Guten Ratschläge, so wie du es geschriben hast, geht es nun prima.

NUR habe ich das gefühl das ich nun etwas falsch mache mit den Pointern. wen ich das Spiel neu starte, geht die Adresse nicht mehr, obwohl ich ja eine Grüne hatte... kann das sein?

mfg

Hier mein Bild von CE & meinem Code
[Only registered and activated users can see links. Click Here To Register...]

So geht es.. wen ich das spiel neu starte geht es nimma. Liegt das irgentwie an dem "Grünen" Pointer?

----------------------------------------------------------------------------

soo ich habe es nun halber hinbekommen.. das Tool geht, aber ich glaube das Solitär keinen wirklichen basepointer hatt, kann das sein?

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

Die grüne Adresse sollte ja der BasePointer sein wen ich das nicht Falsch verstehe, aber dieser verändert sich auch immer nach einem Neustart...

mfg
10/31/2013 12:30 DeinMud#11
1. Sind das Konstanten (Deklaration mit Const)
2. Integer.Parse(Textbox1.Text) & nicht Cint(Textbox1.Text)
3. ival.ToString & nicht Cstr(ival)

Hier mal was zum lesen für dich:
[Only registered and activated users can see links. Click Here To Register...]