MEM EDITOR


SUBMITTED BY: Guest

DATE: Aug. 12, 2014, 1:09 p.m.

FORMAT: C#

SIZE: 19.3 kB

HITS: 23782

  1. Imports System.Runtime.InteropServices
  2. Module ReadWriteMemory_Advanced
  3. #Region "ReadWriteMemory"
  4. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
  5. Private Declare Function CloseHandle Lib "kernel32" (ByVal hProcess As Integer) As Integer
  6. <DllImport("kernel32.dll", SetLastError:=True, ExactSpelling:=True)> _
  7. Public Function VirtualAllocEx(ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, _
  8. ByVal dwSize As UInteger, ByVal flAllocationType As UInteger, _
  9. ByVal flProtect As UInteger) As IntPtr
  10. End Function
  11. <DllImport("kernel32", CharSet:=CharSet.Auto, SetLastError:=True)> _
  12. Public Function VirtualProtectEx(ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, _
  13. ByVal dwSize As IntPtr, ByVal flNewProtect As UInteger, _
  14. ByRef lpflOldProtect As UInteger) As Boolean
  15. End Function
  16. <DllImport("kernel32.dll", SetLastError:=True)> Private Function ReadProcessMemory _
  17. (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As Byte, _
  18. ByVal iSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Boolean
  19. End Function
  20. Private Declare Function CoTaskMemAlloc Lib "ole32.dll" Alias "CoTaskMemAlloc" (ByVal nSize As Integer) As Integer
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. Private Declare Function ReadProcessMemory4 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, <Out()> ByVal lpBuffer() As Byte, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Boolean
  28. Const PROCESS_ALL_ACCESS = &H1F0FF
  29. <DllImport("kernel32.dll", SetLastError:=True)> _
  30. Public Function WriteProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As Byte(), ByVal nSize As System.UInt32, <Out()> ByRef lpNumberOfBytesWritten As Int32) As Boolean
  31. End Function
  32. Private Declare Function WriteProcessMemory4 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Int32, ByVal lpBaseAddress As Int32, ByRef lpBuffer As Int32, ByVal nSize As Int32, ByRef lpNumberOfBytesWritten As Int32) As Int32
  33. Public Function StrToByteArray(ByVal str As String) As Byte()
  34. Dim encoding As New System.Text.UTF8Encoding()
  35. Return encoding.GetBytes(str)
  36. End Function
  37. Public Function RemoveProtection(ByVal ProcessName As String, ByVal AddressOfStart As Integer, ByVal SizeToRemoveProtectionInBytes As Integer)
  38. For Each p As Process In Process.GetProcessesByName(ProcessName)
  39. Const PAGE_EXECUTE_READWRITE As Integer = &H40
  40. Dim oldProtect As Integer
  41. If Not VirtualProtectEx(p.Handle, New IntPtr(AddressOfStart), New IntPtr(SizeToRemoveProtectionInBytes), PAGE_EXECUTE_READWRITE, oldProtect) Then Throw New Exception
  42. p.Dispose()
  43. Next
  44. End Function
  45. Public Function AllocMem(ByVal ProcessName As String, ByVal AddressOfStart As Integer, ByVal SizeOfAllocationInBytes As Integer)
  46. Try
  47. For Each p As Process In Process.GetProcessesByName(ProcessName)
  48. Const MEM_COMMIT As Integer = &H1000
  49. Const PAGE_EXECUTE_READWRITE As Integer = &H40
  50. Dim pBlob As IntPtr = VirtualAllocEx(p.Handle, New IntPtr(AddressOfStart), New IntPtr(SizeOfAllocationInBytes), MEM_COMMIT, PAGE_EXECUTE_READWRITE)
  51. If pBlob = IntPtr.Zero Then
  52. p.Dispose()
  53. End If
  54. Next
  55. Catch ex As Exception
  56. MsgBox(ex.Message)
  57. End Try
  58. End Function
  59. Public Function TestAlloc(ByVal ProcessName As String, ByVal AddressOfStart As Integer, ByVal nsize As Integer) As IntPtr
  60. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  61. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  62. Const MEM_COMMIT As Integer = &H1000
  63. Const PAGE_EXECUTE_READWRITE As Integer = &H40
  64. Dim buffer As IntPtr
  65. buffer = VirtualAllocEx(hProcess, New IntPtr(AddressOfStart), nsize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
  66. CloseHandle(hProcess)
  67. Return buffer
  68. End Function
  69. 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
  70. Try
  71. Dim lvl As Integer = Address
  72. For i As Integer = 1 To Level
  73. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
  74. Next
  75. WriteInteger(Process, lvl, Value, nsize)
  76. Return True
  77. Catch ex As Exception
  78. Return False
  79. End Try
  80. End Function
  81. 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
  82. Try
  83. Dim lvl As Integer = Address
  84. For i As Integer = 1 To Level
  85. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
  86. Next
  87. Dim vBuffer As Integer
  88. vBuffer = ReadInteger(Process, lvl, nsize)
  89. Return vBuffer
  90. Catch ex As Exception
  91. End Try
  92. End Function
  93. 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
  94. Try
  95. Dim lvl As Integer = Address
  96. For i As Integer = 1 To Level
  97. lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
  98. Next
  99. WriteFloat(Process, lvl, Value, nsize)
  100. Return True
  101. Catch ex As Exception
  102. Return False
  103. End Try
  104. End Function
  105. 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
  106. Try
  107. Dim lvl As Integer = Address
  108. For i As Integer = 1 To Level
  109. lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
  110. Next
  111. Dim vBuffer As Single
  112. vBuffer = ReadFloat(Process, lvl, nsize)
  113. Return vBuffer
  114. Catch ex As Exception
  115. End Try
  116. End Function
  117. 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
  118. Try
  119. Dim lvl As Integer = Address
  120. For i As Integer = 1 To Level
  121. lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
  122. Next
  123. WriteLong(Process, lvl, Value, nsize)
  124. Return True
  125. Catch ex As Exception
  126. Return False
  127. End Try
  128. End Function
  129. 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
  130. Try
  131. Dim lvl As Integer = Address
  132. For i As Integer = 1 To Level
  133. lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
  134. Next
  135. Dim vBuffer As Long
  136. vBuffer = ReadLong(Process, lvl, nsize)
  137. Return vBuffer
  138. Catch ex As Exception
  139. End Try
  140. End Function
  141. Public Sub WriteNOPs(ByVal ProcessName As String, ByVal Address As Long, ByVal NOPNum As Integer)
  142. Dim C As Integer
  143. Dim B As Integer
  144. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  145. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  146. B = 0
  147. For C = 1 To NOPNum
  148. Call WriteProcessMemory1(hProcess, Address + B, &H90, 1, 0&)
  149. CloseHandle(hProcess)
  150. B = B + 1
  151. Next C
  152. End Sub
  153. Public Sub WriteXBytes(ByVal ProcessName As String, ByVal Address As Long, ByVal Value As String)
  154. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  155. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  156. Dim C As Integer
  157. Dim B As Integer
  158. Dim D As Integer
  159. Dim V As Byte
  160. B = 0
  161. D = 1
  162. For C = 1 To Math.Round((Len(Value) / 2))
  163. V = Val("&H" & Mid$(Value, D, 2))
  164. Call WriteProcessMemory1(hProcess, Address + B, V, 1, 0&)
  165. CloseHandle(hProcess)
  166. B = B + 1
  167. D = D + 2
  168. Next C
  169. End Sub
  170. Public Sub WriteInteger(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Integer, Optional ByVal nsize As Integer = 4)
  171. If ProcessName.EndsWith(".exe") Then
  172. ProcessName = ProcessName.Replace(".exe", "")
  173. End If
  174. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  175. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  176. Dim hAddress, vBuffer As Integer
  177. hAddress = Address
  178. vBuffer = Value
  179. WriteProcessMemory1(hProcess, hAddress, CInt(vBuffer), nsize, 0)
  180. CloseHandle(hProcess)
  181. End Sub
  182. Public Sub WriteFloat(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Single, Optional ByVal nsize As Integer = 4)
  183. If ProcessName.EndsWith(".exe") Then
  184. ProcessName = ProcessName.Replace(".exe", "")
  185. End If
  186. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  187. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  188. Dim hAddress As Integer
  189. Dim vBuffer As Single
  190. hAddress = Address
  191. vBuffer = Value
  192. WriteProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
  193. CloseHandle(hProcess)
  194. End Sub
  195. Public Sub WriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4)
  196. If ProcessName.EndsWith(".exe") Then
  197. ProcessName = ProcessName.Replace(".exe", "")
  198. End If
  199. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  200. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  201. Dim hAddress As Integer
  202. Dim vBuffer As Long
  203. hAddress = Address
  204. vBuffer = Value
  205. WriteProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
  206. CloseHandle(hProcess)
  207. End Sub
  208. Public Sub WriteString(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As String, Optional ByVal nsize As Integer = 4)
  209. If ProcessName.EndsWith(".exe") Then
  210. ProcessName = ProcessName.Replace(".exe", "")
  211. End If
  212. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  213. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  214. Dim hAddress As Integer
  215. Dim vBuffer As Byte()
  216. hAddress = Address
  217. vBuffer = StrToByteArray(Value)
  218. WriteProcessMemory(hProcess, hAddress, vBuffer, vBuffer.Length, 0)
  219. CloseHandle(hProcess)
  220. End Sub
  221. Public Function WriteString2(ByVal ProcessName As String, ByVal Address As Integer, ByVal str As String) As Boolean
  222. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  223. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  224. For i As Integer = 0 To Len(str) - 1
  225. WriteProcessMemory4(hProcess, Address + i, Asc(Mid(str, i + 1, 1)), str.Length, 0)
  226. CloseHandle(hProcess)
  227. Next i
  228. Return 0
  229. End Function
  230. Public Function ReadInteger(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Integer
  231. If ProcessName.EndsWith(".exe") Then
  232. ProcessName = ProcessName.Replace(".exe", "")
  233. End If
  234. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  235. If MyP.Length = 0 Then
  236. MessageBox.Show(ProcessName & " isn't open!")
  237. Exit Function
  238. End If
  239. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
  240. If hProcess = IntPtr.Zero Then
  241. MessageBox.Show("Failed to open " & ProcessName & "!")
  242. Exit Function
  243. End If
  244. Dim hAddress, vBuffer As Integer
  245. hAddress = Address
  246. ReadProcessMemory1(hProcess, hAddress, vBuffer, nsize, 0)
  247. Return vBuffer
  248. End Function
  249. Public Function ReadFloat(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Single
  250. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  251. Dim hProcess As IntPtr = OpenProcess(&H10, 0, MyP(0).Id)
  252. Dim hAddress As Integer
  253. Dim vBuffer As Single
  254. hAddress = Address
  255. ReadProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
  256. CloseHandle(hProcess)
  257. Return vBuffer
  258. End Function
  259. Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long
  260. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  261. Dim hProcess As IntPtr = OpenProcess(&H10, 0, MyP(0).Id)
  262. Dim hAddress As Integer
  263. Dim vBuffer As Long
  264. hAddress = Address
  265. ReadProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
  266. CloseHandle(hProcess)
  267. Return vBuffer
  268. End Function
  269. Private Function GetTextinMemory(ByVal ProcessHandle As IntPtr, ByVal MemoryAddress As IntPtr, ByVal CharsToRead As Integer, Optional ByVal IsUnicode As Boolean = True) As String
  270. Dim ReturnValue As String = vbNullString
  271. Dim StringBuffer() As Byte
  272. If IsUnicode Then
  273. ReDim StringBuffer(CharsToRead * 2 - 1)
  274. Else
  275. ReDim StringBuffer(CharsToRead - 1)
  276. End If
  277. Try
  278. 'Dim p As Process() = Process.GetProcessesByName(process0)
  279. If ReadProcessMemory(ProcessHandle, MemoryAddress, StringBuffer(0), StringBuffer.Length, Nothing) Then
  280. If IsUnicode Then
  281. ReturnValue = System.Text.Encoding.ASCII.GetString(StringBuffer)
  282. Else
  283. ReturnValue = System.Text.Encoding.Default.GetString(StringBuffer)
  284. End If
  285. End If
  286. Catch ex As Exception
  287. MsgBox(ex.Message)
  288. End Try
  289. Return ReturnValue
  290. End Function
  291. Public Function ReadString(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As String
  292. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  293. Dim hProcess As IntPtr = OpenProcess(&H10, 0, MyP(0).Id)
  294. Dim hAddress As Integer
  295. Dim vBuffer As String
  296. hAddress = Address
  297. vBuffer = GetTextinMemory(hProcess, address, 16)
  298. CloseHandle(hProcess)
  299. Return vBuffer
  300. End Function
  301. Public Function ReadByteArray(ByVal ProcessName As String, ByRef Address As Integer, Optional ByVal nsize As Integer = 4) As Byte()
  302. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
  303. Dim hProcess As IntPtr = OpenProcess(&H10, 0, MyP(0).Id)
  304. Dim hAddress As Integer
  305. Dim vBuffer(nsize - 1) As Byte
  306. hAddress = Address
  307. ReadProcessMemory4(hProcess, hAddress, vBuffer, nsize, 0)
  308. CloseHandle(hProcess)
  309. Return vBuffer
  310. End Function
  311. #End Region
  312. #Region "ProcessRunning"
  313. Public Function IsProcessRunning(ByVal name As String) As Boolean
  314. For Each clsProcess As Process In Process.GetProcesses()
  315. If clsProcess.ProcessName.StartsWith(name) Then
  316. 'process found so it's running so return true
  317. Return True
  318. End If
  319. Next
  320. Return False
  321. End Function
  322. #End Region
  323. #Region "Undetected ReadWriteMemory" 'é_è
  324. Public Function uWriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4)
  325. Try
  326. Dim process_name As Process() = Process.GetProcessesByName(ProcessName)
  327. Dim baseaddr As Long = ReadLong(ProcessName, Address)
  328. Dim firstadd As Long = ReadLong(ProcessName, Address)
  329. WriteLong(ProcessName, Address, Value, nsize)
  330. Catch ex As Exception
  331. MsgBox(ProcessName & " n'est pas ouvert !", vbCritical, "Erreur")
  332. End Try
  333. End Function
  334. #End Region
  335. End Module

comments powered by Disqus