|
You last visited: Today at 10:41
Advertisement
VB.NET WriteMemory mit Multipointern ?????
Discussion on VB.NET WriteMemory mit Multipointern ????? within the .NET Languages forum part of the Coders Den category.
10/21/2013, 20:28
|
#1
|
elite*gold: 66
Join Date: Jan 2012
Posts: 234
Received Thanks: 145
|
VB.NET WriteMemory mit Multipointern ?????
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 Object, e As EventArgs) Handles Button1.Click
Dim p As Process() = Process.GetProcessesByName("Solitaire")
If Not p.Length = 0 Then
Memory.Writememory(p(0), &HFFD0AFA8 + &HE + &H32, CInt(TextBox1.Text), 4)
Else
dabei scheisst mir aber Solitär ab..... (Mag mich nicht     :face palm
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
|
#2
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
So funktioniert das nicht mit Pointern, dass solltest du dir nochmal durchlesen.
 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
|
#3
|
elite*gold: 66
Join Date: Jan 2012
Posts: 234
Received Thanks: 145
|
Quote:
Originally Posted by Ten$ion
So funktioniert das nicht mit Pointern, dass solltest du dir nochmal durchlesen.
 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
|
#4
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
Quote:
Originally Posted by .Scare™
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
|
#5
|
elite*gold: 66
Join Date: Jan 2012
Posts: 234
Received Thanks: 145
|
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
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
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
|
#7
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
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
|
#8
|
elite*gold: 66
Join Date: Jan 2012
Posts: 234
Received Thanks: 145
|
Guten Abend miteinander, so ich bin nun wider am PC =)
Also ich arbeite mit dem Modul:
(Auch von epvp gefunden)
PHP Code:
Module Memory
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Private Declare Function WriteFloatMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Private Declare Function ReadFloat Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef buffer As Single, ByVal size As Int32, ByRef lpNumberOfBytesRead As Int32) As Boolean
Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public RBuff As Long
Public RBuff2 As Single
Public RBuff3 As Integer
Public Function Writememory(ByVal ProcessName As Process, ByVal Address As Integer, ByVal Value As Long, ByVal Bytes As Integer)
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
WriteProcessMemory(processHandle, Address, Value, Bytes, Nothing)
CloseHandle(processHandle)
End Function
Public Function ReadFloat(ByVal ProcessName As Process, ByVal Address As Single)
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
ReadProcessMemory(processHandle, Address, RBuff, 4, Nothing)
CloseHandle(processHandle)
Return RBuff
End Function
Public Function WriteFloat(ByVal ProcessName As Process, ByVal Address As Integer, ByVal Value As Single)
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
WriteFloatMemory(processHandle, Address, Value, 4, Nothing)
CloseHandle(processHandle)
End Function
Public Function ReadLong(ByVal ProcessName As Process, ByVal Address As Integer)
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
ReadProcessMemory(processHandle, Address, RBuff, 4, Nothing)
CloseHandle(processHandle)
Return RBuff
End Function
Public Function ReadFloatPointer(ByVal ProcessName As Process, ByVal Base As Integer, ByVal Offset As Short)
Dim fullAddress As Long
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
ReadProcessMemory(processHandle, Base, RBuff, 4, Nothing)
fullAddress = RBuff + Offset
ReadFloat(processHandle, fullAddress, RBuff2, 4, Nothing)
Return RBuff2
CloseHandle(processHandle)
End Function
Public Function ReadLongPointer(ByVal ProcessName As Process, ByVal Base As Integer, ByVal Offset As Short, ByVal Bytes As Integer)
Dim fullAddress As Long
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
ReadProcessMemory(processHandle, Base, RBuff, 4, Nothing)
fullAddress = RBuff + Offset
ReadProcessMemory(processHandle, fullAddress, RBuff3, Bytes, Nothing)
Return RBuff3
CloseHandle(processHandle)
End Function
Public Function WriteFloatPointer(ByVal ProcessName As Process, ByVal Base As Integer, ByVal Offset As Short, ByVal Value As Single)
Dim fullAddress As Long
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
ReadProcessMemory(processHandle, Base, RBuff, 4, Nothing)
fullAddress = RBuff + Offset
WriteFloatMemory(processHandle, fullAddress, Value, 4, Nothing)
CloseHandle(processHandle)
End Function
Public Function WriteLongPointer(ByVal ProcessName As Process, ByVal Base As Integer, ByVal Offset As Short, ByVal Value As Long, ByVal Bytes As Integer)
Dim fullAddress As Long
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
ReadProcessMemory(processHandle, Base, RBuff, 4, Nothing)
fullAddress = RBuff + Offset
WriteProcessMemory(processHandle, fullAddress, Value, Bytes, Nothing)
CloseHandle(processHandle)
End Function
Public Function NOP(ByVal ProcessName As Process, ByVal Address As Integer, ByVal value As Integer)
Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)
If GameLookUp.Length = 0 Then
End
End If
Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)
WriteProcessMemory(processHandle, Address, value, 1, Nothing)
CloseHandle(processHandle)
End Function
End Module
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
|
#9
|
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
|
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
|
#10
|
elite*gold: 66
Join Date: Jan 2012
Posts: 234
Received Thanks: 145
|
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
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?
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
|
#11
|
elite*gold: 0
Join Date: Jan 2010
Posts: 990
Received Thanks: 127
|
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:
|
|
|
Similar Threads
|
Writememory? [VB08]
08/22/2010 - .NET Languages - 0 Replies
Wie Schreibe ich die Adressen in VB2008?
0x004DDF77
orig bytes: 0xE8, 0x44, 0x97, 0x01, 0x00
patch: 0x90, 0x90, 0x90, 0x90, 0x90
OR
0x004F76C0
orig: 0x83, 0xEC, 0x0C
patch: 0xC3, 0x90, 0x90
|
All times are GMT +1. The time now is 10:43.
|
|