Hi @ all,
ich habe mir aus dem (glaube ich gut bekannten) ReadWritingMemory Module versucht eine .dll zu erstellen, das erstellen klappt problemlos, ich kann auch einfach den Verweis hinzufügen usw.
ABER, ich kann nur dann auf die Funktionen der .dll zugreifen, wenn ich die jeweilige CodeZeile mit einem Dim beginne..
Spoiler anzeigen
wo habe ich hier denn etwas übersehen / falsch gemacht ?
die .dll:
Spoiler anzeigen
danke schon mal und Beste Grüße =)
ich habe mir aus dem (glaube ich gut bekannten) ReadWritingMemory Module versucht eine .dll zu erstellen, das erstellen klappt problemlos, ich kann auch einfach den Verweis hinzufügen usw.
ABER, ich kann nur dann auf die Funktionen der .dll zugreifen, wenn ich die jeweilige CodeZeile mit einem Dim beginne..
VB.NET-Quellcode
- #Region "Imports"
- Imports rwm
- #End Region
- Public Class Main
- #Region "ThreadSafeStuff"
- #End Region
- #Region "Deklaration and Initialization"
- Dim upd As New rwm.rwm
- #End Region
- #Region "MainFunction1"
- Dim Address0 As Integer = upd.CorrectBase("FTLGame", "FTLGame.exe") + &H39BAAC '<-funktioniert
- upd.WriteDMAInteger("FTLGame", Address0, {&H28, &H4, &H24, &H450}, 10000, 4) '<-funktioniert nicht
- #End Region
- #Region "MiscSubs"
- Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
- Me.UpdateStyles()
- End Sub
- Private Sub Main_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
- End Sub
- #End Region
- End Class
wo habe ich hier denn etwas übersehen / falsch gemacht ?
die .dll:
VB.NET-Quellcode
- Public Class rwm
- Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
- Public Declare Function WriteProcessMemory1 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
- Public Declare Function WriteProcessMemory2 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 Single
- Public Declare Function WriteProcessMemory3 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
- Public Declare Function ReadProcessMemory1 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
- Public Declare Function ReadProcessMemory2 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single
- Public Declare Function ReadProcessMemory3 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
- Const PROCESS_ALL_ACCESS = &H1F0FF
- Public Function CorrectBase(ByVal ProcName As String, ByVal ModuleName As String) As Integer
- Dim P As Process() = Process.GetProcessesByName(ProcName)
- If (P.Length <> 0) Then
- Dim pMod As ProcessModuleCollection = P(0).Modules
- For i As Integer = pMod.Count - 1 To 0 Step -1
- If pMod.Item(i).FileName.EndsWith(ModuleName) Then
- Return pMod.Item(i).BaseAddress.ToInt32
- End If
- Next i
- End If
- Return 0
- End Function
- Public Function WriteDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Integer, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
- Try
- Dim lvl As Integer = Address
- For i As Integer = 1 To Level
- lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
- Next
- WriteInteger(Process, lvl, Value, nsize)
- Return True
- Catch ex As Exception
- Return False
- End Try
- End Function
- Public Function ReadDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Integer
- Try
- Dim lvl As Integer = Address
- For i As Integer = 1 To Level
- lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
- Next
- Dim vBuffer As Integer
- vBuffer = ReadInteger(Process, lvl, nsize)
- Return vBuffer
- Catch ex As Exception
- Return -1
- End Try
- End Function
- Public Function WriteDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Single, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
- Try
- Dim lvl As Integer = Address
- For i As Integer = 1 To Level
- lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
- Next
- WriteFloat(Process, lvl, Value, nsize)
- Return True
- Catch ex As Exception
- Return False
- End Try
- End Function
- Public Function ReadDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Single
- Try
- Dim lvl As Integer = Address
- For i As Integer = 1 To Level
- lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
- Next
- Dim vBuffer As Single
- vBuffer = ReadFloat(Process, lvl, nsize)
- Return vBuffer
- Catch ex As Exception
- Return -1
- End Try
- End Function
- Public Function WriteDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Long, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
- Try
- Dim lvl As Integer = Address
- For i As Integer = 1 To Level
- lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
- Next
- WriteLong(Process, lvl, Value, nsize)
- Return True
- Catch ex As Exception
- Return False
- End Try
- End Function
- Public Function ReadDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Long
- Try
- Dim lvl As Integer = Address
- For i As Integer = 1 To Level
- lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
- Next
- Dim vBuffer As Long
- vBuffer = ReadLong(Process, lvl, nsize)
- Return vBuffer
- Catch ex As Exception
- Return -1
- End Try
- End Function
- Public Sub WriteNOPs(ByVal ProcessName As String, ByVal Address As Long, ByVal NOPNum As Integer)
- Dim C As Integer
- Dim B As Integer
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Sub
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Sub
- End If
- B = 0
- For C = 1 To NOPNum
- Call WriteProcessMemory1(hProcess, Address + B, &H90, 1, 0&)
- B = B + 1
- Next C
- End Sub
- Public Sub WriteXBytes(ByVal ProcessName As String, ByVal Address As Long, ByVal Value As String)
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Sub
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Sub
- End If
- Dim C As Integer
- Dim B As Integer
- Dim D As Integer
- Dim V As Byte
- B = 0
- D = 1
- For C = 1 To Math.Round((Len(Value) / 2))
- V = Val("&H" & Mid$(Value, D, 2))
- Call WriteProcessMemory1(hProcess, Address + B, V, 1, 0&)
- B = B + 1
- D = D + 2
- Next C
- End Sub
- Public Sub WriteInteger(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Integer, Optional ByVal nsize As Integer = 4)
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Sub
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Sub
- End If
- Dim hAddress, vBuffer As Integer
- hAddress = Address
- vBuffer = Value
- WriteProcessMemory1(hProcess, hAddress, CInt(vBuffer), nsize, 0)
- End Sub
- Public Sub WriteFloat(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Single, Optional ByVal nsize As Integer = 4)
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Sub
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Sub
- End If
- Dim hAddress As Integer
- Dim vBuffer As Single
- hAddress = Address
- vBuffer = Value
- WriteProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
- End Sub
- Public Sub WriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4)
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Sub
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Sub
- End If
- Dim hAddress As Integer
- Dim vBuffer As Long
- hAddress = Address
- vBuffer = Value
- WriteProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
- End Sub
- Public Function ReadInteger(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Integer
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Function
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Function
- End If
- Dim hAddress, vBuffer As Integer
- hAddress = Address
- ReadProcessMemory1(hProcess, hAddress, vBuffer, nsize, 0)
- Return vBuffer
- End Function
- Public Function ReadFloat(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Single
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Function
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Function
- End If
- Dim hAddress As Integer
- Dim vBuffer As Single
- hAddress = Address
- ReadProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
- Return vBuffer
- End Function
- Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long
- If ProcessName.EndsWith(".exe") Then
- ProcessName = ProcessName.Replace(".exe", "")
- End If
- Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
- If MyP.Length = 0 Then
- Exit Function
- End If
- Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
- If hProcess = IntPtr.Zero Then
- Exit Function
- End If
- Dim hAddress As Integer
- Dim vBuffer As Long
- hAddress = Address
- ReadProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
- Return vBuffer
- End Function
- End Class
danke schon mal und Beste Grüße =)
If Energy = Low Then
Drink(aHugeCoffee)
Else
Drink(aHugeCoffeeToo)
End If
Drink(aHugeCoffee)
Else
Drink(aHugeCoffeeToo)
End If