Hallo,
Ich versuche dieser Adresse 141887378 in ein Spiel (Project Cars) zu lesen. Das Spiel ist ein 64 bit Applikation. Die Adresse wurde mit Hilfe von CheatEngine gefunden.
CheatEngine zeigt auf die obengenannte Adresse ein Wert. Die Adresse ist damit OK.
Das Resultat sollte eine Zeit als Single anzeigen. Zeigt aber leider 0.
In ein anderes Spiel Race07 (32 bit Applikation) habe ich keine Probleme diese Adresse 14149844 zu lesen.
Die Adresse von Project Cars ist allerdings länger 9 stellig. Die vom Race07 8 stellig.
Hat es etwas mit 64 bit zu tun und was soll ich ändern?
Danke im Voraus,
Henrik
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Runtime.InteropServices
Friend Class ProcessMemoryReaderApi
Public Const PROCESS_VM_READ As UInteger = &H10
<DllImport("kernel32.dll")> _
Public Shared Function CloseHandle(hObject As IntPtr) As Integer
End Function
<DllImport("kernel32.dll")> _
Public Shared Function OpenProcess(dwDesiredAccess As UInteger, _
bInheritHandle As Integer, dwProcessId As UInteger) As IntPtr
End Function
<DllImport("kernel32.dll")> _
Public Shared Function ReadProcessMemory(hProcess As IntPtr, lpBaseAddress _
As IntPtr, <[In](), Out()> buffer As Byte(), size As UInteger, ByRef _
lpNumberOfBytesRead As IntPtr) As Integer
End Function
<DllImport("kernel32.dll")> _
Public Shared Function WriteProcessMemory(hProcess As IntPtr, lpBaseAddress _
As IntPtr, lpBuffer As Byte(), nSize As UInteger, ByRef _
lpNumberOfBytesWritten As IntPtr) As Integer
End Function
End Class
Imports System.Collections.Generic
Imports System.Text
Imports System.Diagnostics
Public Class ProcessMemoryReader
' Fields
Private m_hProcess As IntPtr = IntPtr.Zero
Private m_ReadProcess As Process
' Methods
Public Sub CloseHandle()
If ProcessMemoryReaderApi.CloseHandle(Me.m_hProcess) = 0 Then
Throw New Exception("CloseHandle failed")
End If
End Sub
Public Sub OpenProcess()
Me.m_hProcess = ProcessMemoryReaderApi.OpenProcess(&H1F0FFF, 1, CUInt( _
Me.m_ReadProcess.Id))
End Sub
Public Function ReadProcessMemory(MemoryAddress As IntPtr, bytesToRead As _
UInteger, ByRef bytesReaded As Integer) As Byte()
Dim ptr As IntPtr
Dim buffer As Byte() = New Byte(CInt(bytesToRead - 1)) {}
ProcessMemoryReaderApi.ReadProcessMemory(Me.m_hProcess, MemoryAddress, _
buffer, bytesToRead, ptr)
bytesReaded = ptr.ToInt32()
Return buffer
End Function
Public Function WriteProcessMemory(MemoryAddress As IntPtr, Wert As Single, _
bytesToWrite As UInteger) As Integer
Dim ptr As IntPtr
Dim Buffer As Byte() = BitConverter.GetBytes(CSng(Wert))
Dim h As Integer = ProcessMemoryReaderApi.WriteProcessMemory( _
m_hProcess, CType(MemoryAddress, IntPtr), Buffer, bytesToWrite, ptr)
Return h
End Function
Public Function WriteProcessMemoryINT(MemoryAddress As IntPtr, Wert As _
Int32, bytesToWrite As UInteger) As Integer
Dim ptr As IntPtr
Dim Buffer As Byte() = BitConverter.GetBytes(CType(Wert, Int32))
Dim h As Integer = ProcessMemoryReaderApi.WriteProcessMemory( _
m_hProcess, CType(MemoryAddress, IntPtr), Buffer, bytesToWrite, ptr)
Return h
End Function
' Properties
Public Property ReadProcess() As Process
Get
Return Me.m_ReadProcess
End Get
Set(value As Process)
Me.m_ReadProcess = value
End Set
End Property
End Class Teil 2 folgt |