Hallo.
Mein Ziel ist es, alle möglichen Strings aus dem RAM eines Prozesses zu lesen. Folgenden Post habe ich zur Hilfe genommen
[VB 2008] Daten aus Spiel auslesen?
Soweit so gut. Einzelne Strings rauslesen, mithilfe von CheatEngine, klappt eigentlich auch. Aber ich will ja mehr
Mein aktueller Code:
Ich muss ja irgendwo anfangen (ich glaube man kann ab &H1000 anfangen), dann muss man wahrscheinlich ein loop durch den RAM machen. In meinem Beispiel les ich die ersten 2048 bytes aus, danach müsste ich ja ab "Memory_Adresse + 2048" wieder lesen und so weiter. Aber wann ist Schluss?
Und wie kann ich dann daraus die Strings lesen? Mit dem Encoding.UTF8.GetString scheint es nicht vernünftig zu klappen.
Und wofür steht eigentlich das "rw"?
Für jegliche Hilfe wäre ich sehr dankbar
Mein Ziel ist es, alle möglichen Strings aus dem RAM eines Prozesses zu lesen. Folgenden Post habe ich zur Hilfe genommen
[VB 2008] Daten aus Spiel auslesen?
Soweit so gut. Einzelne Strings rauslesen, mithilfe von CheatEngine, klappt eigentlich auch. Aber ich will ja mehr
Mein aktueller Code:
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Imports System.Text
- Public Class Form1
- <DllImport("kernel32.dll")> Private Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As Byte(), ByVal nSize As UIntPtr, ByRef lpNumberOfBytesWritten As UInteger) As Boolean
- End Function
- <DllImport("kernel32.dll")> Private Shared Function OpenProcess(ByVal dwDesiredAccess As UInt32, ByVal bInheritHandle As [Boolean], ByVal dwProcessId As UInt32) As IntPtr
- End Function
- <DllImport("kernel32.dll")> Private Shared Function CloseHandle(ByVal hHandle As IntPtr) As Boolean
- End Function
- Private Const PROCESS_VM_READ = &H10
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim suchProzesse As Process() = Process.GetProcessesByName("test")
- If suchProzesse.Length > 0 Then
- Dim Prozess As Process = suchProzesse(0)
- Dim readHandle As IntPtr = OpenProcess(PROCESS_VM_READ, False, Prozess.Id)
- If readHandle = 0 Then MsgBox("Fehler") : Exit Sub
- Dim bytes As Byte() = New Byte(2047) {}
- Dim rw As Integer = 0
- Dim Memory_Adresse As UInteger = &H1000
- ReadProcessMemory(readHandle, Memory_Adresse, bytes, 2048, rw)
- Dim TXT As String = Encoding.UTF8.GetString(bytes)
- MsgBox(TXT)
- CloseHandle(readHandle)
- Else
- MsgBox("Prozess nicht gefunden!")
- End If
- End Sub
- End Class
Ich muss ja irgendwo anfangen (ich glaube man kann ab &H1000 anfangen), dann muss man wahrscheinlich ein loop durch den RAM machen. In meinem Beispiel les ich die ersten 2048 bytes aus, danach müsste ich ja ab "Memory_Adresse + 2048" wieder lesen und so weiter. Aber wann ist Schluss?
Und wie kann ich dann daraus die Strings lesen? Mit dem Encoding.UTF8.GetString scheint es nicht vernünftig zu klappen.
Und wofür steht eigentlich das "rw"?
Für jegliche Hilfe wäre ich sehr dankbar
Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!