Code:
<DllImport("kernel32.dll")> _
Private Shared Function ReadProcessMemory(hProcess As IntPtr, lpBaseAddress As IntPtr, <[In], Out> buffer As Byte(), size As UInt32, ByRef lpNumberOfBytesWritten As IntPtr) As Int32
End Function
<DllImport("kernel32.dll")> _
Private Shared Function WriteProcessMemory(hProcess As IntPtr, lpBaseAddress As IntPtr, <[In], Out> buffer As Byte(), size As UInt32, ByRef lpNumberOfBytesWritten As IntPtr) As Int32
End Function
Private pHandel As IntPtr
Public Function Process_Handle(ProcessName As String) As Boolean
Try
Dim ProcList As Process() = Process.GetProcessesByName(ProcessName)
If ProcList.Length = 0 Then
Return False
Else
pHandel = ProcList(0).Handle
Return True
End If
Catch ex As Exception
Console.Beep()
Console.WriteLine("Process_Handle - " + ex.Message)
Return False
End Try
End Function
Private Function Read(Address As Long, Length As Integer) As Byte()
Dim Buffer As Byte() = New Byte(Length - 1) {}
Dim Zero As IntPtr = IntPtr.Zero
ReadProcessMemory(pHandel, DirectCast(Address, IntPtr), Buffer, DirectCast(Buffer.Length, UInt32), Zero)
Return Buffer
End Function
Private Sub Write(Address As Long, Value As Integer)
Dim Buffer As Byte() = BitConverter.GetBytes(Value)
Dim Zero As IntPtr = IntPtr.Zero
WriteProcessMemory(pHandel, DirectCast(Address, IntPtr), Buffer, DirectCast(Buffer.Length, UInt32), Zero)
End Sub
'Write Funcs
Public Sub WriteString(Address As Long, Text As String)
Dim Buffer As Byte() = New ASCIIEncoding().GetBytes(Text)
Dim Zero As IntPtr = IntPtr.Zero
WriteProcessMemory(pHandel, DirectCast(Address, IntPtr), Buffer, DirectCast(Buffer.Length, UInt32), Zero)
End Sub
Public Sub WriteNOP(Address As Long)
Dim Buffer As Byte() = New Byte() {&H90, &H90, &H90, &H90, &H90}
Dim Zero As IntPtr = IntPtr.Zero
WriteProcessMemory(pHandel, DirectCast(Address, IntPtr), Buffer, DirectCast(Buffer.Length, UInt32), Zero)
End Sub
Public Sub WriteInteger(Address As Long, Value As Integer)
Write(Address, Value)
End Sub
Public Sub WriteBytes(Address As Long, Bytes As Byte())
Dim Zero As IntPtr = IntPtr.Zero
WriteProcessMemory(pHandel, DirectCast(Address, IntPtr), Bytes, CUInt(Bytes.Length), Zero)
End Sub
'Read Funcs
Public Function ReadString(Address As Long, Optional Length As Integer = 4) As String
Return New ASCIIEncoding().GetString(Read(Address, Length))
End Function
Public Function ReadBytes(Address As Long, Length As Integer) As Byte()
Return Read(Address, Length)
End Function
Public Function ReadInteger(Address As Long, Optional Length As Integer = 4) As Integer
Return BitConverter.ToInt32(Read(Address, Length), 0)
End Function