Adresse wird nicht ausgelesen? ( 0? )

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Vultrax.

    Adresse wird nicht ausgelesen? ( 0? )

    Hallo


    Ich möchte gerne ein kleines Programm schreiben, was mir die Punkte und Geschwindigkeit etc. eines etwas älteren Spieles anzeigt, da diese durch Inkompatibilität irgendwie außerhalb des Bildschirmes sind.

    Die Adressen in Cheat Engine finde ich und umschreiben mit:

    VB.NET-Quellcode

    1. ReadWritingMemory.WriteInteger("t20", &HFDC22D, Value:=200)

    kann ich sie auch, aber das ist nicht was ich möchte, ich möchte sie mir ja nur anzeigen lassen.

    Mit:

    VB.NET-Quellcode

    1. Me.Label1.Text = ReadWritingMemory.ReadInteger("t20", &HFDC22D)

    bekomme ich (selbst wenn der Wert der Adresse bei 200 ist) immer 0 raus ...

    Wieso? .. Und wie kann ich es richtig auslesen? ..

    Ich hoffe ihr könnt mir helfen :)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    Du meinst das?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module ReadWritingMemory
    2. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
    3. Private 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
    4. Private 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
    5. Private 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
    6. Private 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
    7. Private 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
    8. Private 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
    9. Const PROCESS_ALL_ACCESS = &H1F0FF
    10. 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
    11. Try
    12. Dim lvl As Integer = Address
    13. For i As Integer = 1 To Level
    14. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
    15. Next
    16. WriteInteger(Process, lvl, Value, nsize)
    17. Return True
    18. Catch ex As Exception
    19. Return False
    20. End Try
    21. End Function
    22. 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
    23. Try
    24. Dim lvl As Integer = Address
    25. For i As Integer = 1 To Level
    26. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
    27. Next
    28. Dim vBuffer As Integer
    29. vBuffer = ReadInteger(Process, lvl, nsize)
    30. Return vBuffer
    31. Catch ex As Exception
    32. End Try
    33. End Function
    34. 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
    35. Try
    36. Dim lvl As Integer = Address
    37. For i As Integer = 1 To Level
    38. lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
    39. Next
    40. WriteFloat(Process, lvl, Value, nsize)
    41. Return True
    42. Catch ex As Exception
    43. Return False
    44. End Try
    45. End Function
    46. 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
    47. Try
    48. Dim lvl As Integer = Address
    49. For i As Integer = 1 To Level
    50. lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
    51. Next
    52. Dim vBuffer As Single
    53. vBuffer = ReadFloat(Process, lvl, nsize)
    54. Return vBuffer
    55. Catch ex As Exception
    56. End Try
    57. End Function
    58. 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
    59. Try
    60. Dim lvl As Integer = Address
    61. For i As Integer = 1 To Level
    62. lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
    63. Next
    64. WriteLong(Process, lvl, Value, nsize)
    65. Return True
    66. Catch ex As Exception
    67. Return False
    68. End Try
    69. End Function
    70. 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
    71. Try
    72. Dim lvl As Integer = Address
    73. For i As Integer = 1 To Level
    74. lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
    75. Next
    76. Dim vBuffer As Long
    77. vBuffer = ReadLong(Process, lvl, nsize)
    78. Return vBuffer
    79. Catch ex As Exception
    80. End Try
    81. End Function
    82. Public Sub WriteNOPs(ByVal ProcessName As String, ByVal Address As Long, ByVal NOPNum As Integer)
    83. Dim C As Integer
    84. Dim B As Integer
    85. If ProcessName.EndsWith(".exe") Then
    86. ProcessName = ProcessName.Replace(".exe", "")
    87. End If
    88. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    89. If MyP.Length = 0 Then
    90. Exit Sub
    91. End If
    92. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    93. If hProcess = IntPtr.Zero Then
    94. Exit Sub
    95. End If
    96. B = 0
    97. For C = 1 To NOPNum
    98. Call WriteProcessMemory1(hProcess, Address + B, &H90, 1, 0&)
    99. B = B + 1
    100. Next C
    101. End Sub
    102. Public Sub WriteXBytes(ByVal ProcessName As String, ByVal Address As Long, ByVal Value As String)
    103. If ProcessName.EndsWith(".exe") Then
    104. ProcessName = ProcessName.Replace(".exe", "")
    105. End If
    106. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    107. If MyP.Length = 0 Then
    108. Exit Sub
    109. End If
    110. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    111. If hProcess = IntPtr.Zero Then
    112. Exit Sub
    113. End If
    114. Dim C As Integer
    115. Dim B As Integer
    116. Dim D As Integer
    117. Dim V As Byte
    118. B = 0
    119. D = 1
    120. For C = 1 To Math.Round((Len(Value) / 2))
    121. V = Val("&H" & Mid$(Value, D, 2))
    122. Call WriteProcessMemory1(hProcess, Address + B, V, 1, 0&)
    123. B = B + 1
    124. D = D + 2
    125. Next C
    126. End Sub
    127. Public Sub WriteInteger(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Integer, Optional ByVal nsize As Integer = 4)
    128. If ProcessName.EndsWith(".exe") Then
    129. ProcessName = ProcessName.Replace(".exe", "")
    130. End If
    131. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    132. If MyP.Length = 0 Then
    133. Exit Sub
    134. End If
    135. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    136. If hProcess = IntPtr.Zero Then
    137. Exit Sub
    138. End If
    139. Dim hAddress, vBuffer As Integer
    140. hAddress = Address
    141. vBuffer = Value
    142. WriteProcessMemory1(hProcess, hAddress, CInt(vBuffer), nsize, 0)
    143. End Sub
    144. Public Sub WriteFloat(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Single, Optional ByVal nsize As Integer = 4)
    145. If ProcessName.EndsWith(".exe") Then
    146. ProcessName = ProcessName.Replace(".exe", "")
    147. End If
    148. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    149. If MyP.Length = 0 Then
    150. Exit Sub
    151. End If
    152. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    153. If hProcess = IntPtr.Zero Then
    154. Exit Sub
    155. End If
    156. Dim hAddress As Integer
    157. Dim vBuffer As Single
    158. hAddress = Address
    159. vBuffer = Value
    160. WriteProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
    161. End Sub
    162. Public Sub WriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4)
    163. If ProcessName.EndsWith(".exe") Then
    164. ProcessName = ProcessName.Replace(".exe", "")
    165. End If
    166. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    167. If MyP.Length = 0 Then
    168. Exit Sub
    169. End If
    170. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    171. If hProcess = IntPtr.Zero Then
    172. Exit Sub
    173. End If
    174. Dim hAddress As Integer
    175. Dim vBuffer As Long
    176. hAddress = Address
    177. vBuffer = Value
    178. WriteProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
    179. End Sub
    180. Public Function ReadInteger(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Integer
    181. If ProcessName.EndsWith(".exe") Then
    182. ProcessName = ProcessName.Replace(".exe", "")
    183. End If
    184. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    185. If MyP.Length = 0 Then
    186. Exit Function
    187. End If
    188. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    189. If hProcess = IntPtr.Zero Then
    190. Exit Function
    191. End If
    192. Dim hAddress, vBuffer As Integer
    193. hAddress = Address
    194. ReadProcessMemory1(hProcess, hAddress, vBuffer, nsize, 0)
    195. Return vBuffer
    196. End Function
    197. Public Function ReadFloat(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Single
    198. If ProcessName.EndsWith(".exe") Then
    199. ProcessName = ProcessName.Replace(".exe", "")
    200. End If
    201. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    202. If MyP.Length = 0 Then
    203. Exit Function
    204. End If
    205. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    206. If hProcess = IntPtr.Zero Then
    207. Exit Function
    208. End If
    209. Dim hAddress As Integer
    210. Dim vBuffer As Single
    211. hAddress = Address
    212. ReadProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
    213. Return vBuffer
    214. End Function
    215. Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long
    216. If ProcessName.EndsWith(".exe") Then
    217. ProcessName = ProcessName.Replace(".exe", "")
    218. End If
    219. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    220. If MyP.Length = 0 Then
    221. Exit Function
    222. End If
    223. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    224. If hProcess = IntPtr.Zero Then
    225. Exit Function
    226. End If
    227. Dim hAddress As Integer
    228. Dim vBuffer As Long
    229. hAddress = Address
    230. ReadProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
    231. Return vBuffer
    232. End Function
    233. End Module
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    @Vultrax:: Kannst Du da bitte mal einen Expander drum machen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!