Ich weiß das Tutorial ist ein wenig älter, ich habe aber ein Problem mit dem Code.
PHP Code:
Imports System.Runtime.InteropServices
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If NativeMethods.OpenProcess(Process.GetProcessesByName("csgo")(0).Id) = True Then ' .exe weglassen, falls der (Spiele-)Prozess auf .exe endet. '
Label2.ForeColor = Color.Green
Label2.Text = "Injected"
Dim MyFloat As Single = 0
Dim PointerValue As Integer = 0
NativeMethods.ReadInteger(&H401234, PointerValue)
If PointerValue > 0 Then NativeMethods.ReadInteger(PointerValue + &H1234, PointerValue)
If PointerValue > 0 Then NativeMethods.ReadSingle(PointerValue, MyFloat)
Label4.Text = MyFloat
Else
Label2.ForeColor = Color.Red
Label2.Text = "Fail!"
End If
End Sub
End Class
Public Class NativeMethods
<DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function OpenProcess(ByVal DesiredAccess As Integer, ByVal InheritHandle As Boolean, ByVal ProcessID As Integer) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function CloseHandle(ByVal Handle As IntPtr) As Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function ReadProcessMemory(ByVal ProcessHandle As IntPtr, ByVal Address As IntPtr, ByRef Buffer As Byte(), ByVal Size As Integer, ByRef NumberOfBytesRead As Integer) As Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function WriteProcessMemory(ByVal ProcessHandle As IntPtr, ByVal Address As IntPtr, ByVal Buffer As Byte(), ByVal Size As Integer, ByRef NumberOfBytesWritten As Integer) As Boolean
End Function
Private Shared ProcessHandle As IntPtr = IntPtr.Zero
Friend Shared Function OpenProcess(ByVal pid As Integer) As Boolean
NativeMethods.ProcessHandle = NativeMethods.OpenProcess(NativeMethods.OpenProcess(&H1F0FFF, False, pid))
Return IIf(NativeMethods.ProcessHandle = IntPtr.Zero, False, True)
End Function
Friend Shared Function CloseHandle()
If NativeMethods.ProcessHandle = IntPtr.Zero Then Return False
Return NativeMethods.CloseHandle(NativeMethods.ProcessHandle)
End Function
Friend Shared Function ReadArray(ByVal Address As IntPtr, ByRef Buffer As Byte(), ByVal Size As Integer) As Boolean ' CE: Array of Bytes '
If ProcessHandle = IntPtr.Zero Then Return False
Return NativeMethods.ReadProcessMemory(ProcessHandle, Address, Buffer, Size, 0)
End Function
Friend Shared Function ReadByte(ByVal Address As IntPtr, ByRef Buffer As Byte) As Boolean ' CE: 1 Byte '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {0}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 1, 0)
If ret = True Then Buffer = tBuffer(0)
Return ret
End Function
Friend Shared Function ReadShort(ByVal Address As IntPtr, ByRef Buffer As Short) As Boolean ' CE: 2 Bytes '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {0, 0}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 2, 0)
If ret = True Then Buffer = BitConverter.ToInt16(tBuffer, 0)
Return ret
End Function
Friend Shared Function ReadInteger(ByVal Address As IntPtr, ByRef Buffer As Integer) As Boolean ' CE: 4 Bytes '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {0, 0, 0, 0}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 4, 0)
If ret = True Then Buffer = BitConverter.ToInt32(tBuffer, 0)
Return ret
End Function
Friend Shared Function ReadLong(ByVal Address As IntPtr, ByRef Buffer As Long) As Boolean ' CE: 8 Bytes '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {0, 0, 0, 0, 0, 0, 0, 0}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 8, 0)
If ret = True Then Buffer = BitConverter.ToInt64(tBuffer, 0)
Return ret
End Function
Friend Shared Function ReadSingle(ByVal Address As IntPtr, ByRef Buffer As Single) As Boolean ' CE: Float '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {0, 0, 0, 0}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 8, 0)
If ret = True Then Buffer = BitConverter.ToSingle(tBuffer, 0)
Return ret
End Function
Friend Shared Function ReadDouble(ByVal Address As IntPtr, ByRef Buffer As Double) As Boolean ' CE: Double '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {0, 0, 0, 0, 0, 0, 0, 0}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 8, 0)
If ret = True Then Buffer = BitConverter.ToDouble(tBuffer, 0)
Return ret
End Function
Friend Shared Function ReadString(ByVal Address As IntPtr, ByRef Buffer As String, ByVal Length As Integer) As Boolean ' String mit bekannter Länge, schnell '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {}
Dim ret As Boolean = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, Length, 0)
If ret = True Then Buffer = BitConverter.ToString(tBuffer, 0)
Return ret
End Function
Friend Shared Function ReadString(ByVal Address As IntPtr, ByRef Buffer As String) As Boolean ' String mit unbekannter Länge, braucht länger '
If ProcessHandle = IntPtr.Zero Then Return False
Dim tBuffer As Byte() = {}
Dim ret As Boolean = False
Do
ret = NativeMethods.ReadProcessMemory(ProcessHandle, Address, tBuffer, 1, 0)
If ret = True Then If tBuffer(0) <> 0 Then Buffer &= BitConverter.ToString(tBuffer, 0)
Loop While tBuffer(0) <> 0
Return ret
End Function
Friend Shared Sub WriteArray(ByVal Address As IntPtr, ByVal Buffer As Byte()) ' CE: Array of Bytes '
If ProcessHandle = IntPtr.Zero Then Exit Sub
WriteProcessMemory(ProcessHandle, Address, Buffer, Buffer.Length, 0)
End Sub
Friend Shared Sub WriteByte(ByVal Address As IntPtr, ByVal Buffer As Byte) ' CE: 1 Byte '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = BitConverter.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, 1, 0)
End Sub
Friend Shared Sub WriteShort(ByVal Address As IntPtr, ByVal Buffer As Short) ' CE: 2 Bytes '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = BitConverter.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, 2, 0)
End Sub
Friend Shared Sub WriteInteger(ByVal Address As IntPtr, ByVal Buffer As Integer) ' CE: 4 Bytes '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = BitConverter.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, 4, 0)
End Sub
Friend Shared Sub WriteLong(ByVal Address As IntPtr, ByVal Buffer As Long) ' CE: 8 Bytes '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = BitConverter.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, 8, 0)
End Sub
Friend Shared Sub WriteSingle(ByVal Address As IntPtr, ByVal Buffer As Single) ' CE: Float '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = BitConverter.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, 4, 0)
End Sub
Friend Shared Sub WriteDouble(ByVal Address As IntPtr, ByVal Buffer As Double) ' CE: Double '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = BitConverter.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, 8, 0)
End Sub
Friend Shared Sub WriteString(ByVal Address As IntPtr, ByVal Buffer As String) ' CE: String '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = System.Text.Encoding.ASCII.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, Buffer.Length, 0)
End Sub
Friend Shared Sub WriteUnicodeString(ByVal Address As IntPtr, ByVal Buffer As String) ' CE: Unicode String '
If ProcessHandle = IntPtr.Zero Then Exit Sub
Dim tBuffer As Byte() = System.Text.Encoding.Unicode.GetBytes(Buffer)
WriteProcessMemory(ProcessHandle, Address, tBuffer, Buffer.Length * 2, 0)
End Sub
End Class