Advertisement
Guest User

Untitled

a guest
Mar 27th, 2014
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. My Class ...
  2.  
  3. public class ReadCoords
  4. {
  5.  
  6. #region DLL Import
  7. [DllImport("kernel32.dll")]
  8. public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);
  9.  
  10. [DllImport("kernel32.dll")]
  11. public static extern Int32 CloseHandle(IntPtr hObject);
  12.  
  13. [DllImport("kernel32.dll")]
  14. public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
  15.  
  16. [DllImport("kernel32.dll")]
  17. public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten);
  18.  
  19.  
  20. #endregion DLL Import
  21.  
  22. [Flags]
  23. public enum ProcessAccessType
  24. {
  25. PROCESS_TERMINATE = (0x0001),
  26. PROCESS_CREATE_THREAD = (0x0002),
  27. PROCESS_SET_SESSIONID = (0x0004),
  28. PROCESS_VM_OPERATION = (0x0008),
  29. PROCESS_VM_READ = (0x0010),
  30. PROCESS_VM_WRITE = (0x0020),
  31. PROCESS_DUP_HANDLE = (0x0040),
  32. PROCESS_CREATE_PROCESS = (0x0080),
  33. PROCESS_SET_QUOTA = (0x0100),
  34. PROCESS_SET_INFORMATION = (0x0200),
  35. PROCESS_QUERY_INFORMATION = (0x0400)
  36. }
  37.  
  38.  
  39.  
  40.  
  41. public static byte[] ReadMemoryAtAdress(IntPtr MemoryAddress, uint bytesToRead, out int bytesRead)
  42. {
  43. //Festlegen aller benötigten Variablen
  44. System.Diagnostics.Process[] myProgrammInstances; //Array mit allen Prozessen des gewünschten Programmes
  45. ProcessAccessType myAccessFlags; //Die Zugrifssflags als Enummeration
  46. IntPtr handleProcess; //Hier wird der Handle welcher Als Rückgabewert der Funktion OpenProcess kommt gespeichert.
  47.  
  48. //Initialisiere handleProcess auf einen Nullpointer
  49. handleProcess = IntPtr.Zero;
  50.  
  51. //Fülle Das Array mit allen Verfügbaren Prozessen von Programmname
  52. myProgrammInstances = System.Diagnostics.Process.GetProcessesByName("Nksp.exe");
  53.  
  54. //Setze Die Flags für lese/Schreibzugriff auf den Speicher
  55. myAccessFlags = ProcessAccessType.PROCESS_VM_READ
  56. | ProcessAccessType.PROCESS_VM_WRITE
  57. | ProcessAccessType.PROCESS_VM_OPERATION;
  58.  
  59. //Hier wird letztendlich der Prozess geöffnet und als Handle Gespeichert
  60. handleProcess = OpenProcess((uint)myAccessFlags, 1, (uint)myProgrammInstances[0].Id);
  61.  
  62. int closeHandleReturn;
  63. closeHandleReturn = CloseHandle(handleProcess);
  64. if (closeHandleReturn == 0)
  65. {
  66. MessageBox.Show("Fail");
  67. }
  68.  
  69. //Initialisierung des Arrays In welchem Inser Ausgelesener Wert Landet
  70. byte[] buffer = new byte[bytesToRead];
  71.  
  72. //In Dieser Variable Speichert die Funktion die Anzahl der Gelesenen Bytes
  73. IntPtr ptrBytesRead;
  74.  
  75. //Diese Funktion benötigt Das Zuvor geöffnete Handle, Die Adresse Von wo aus gelesen werden soll, Die Variable in welche der Wert Gespeichert werden soll, und eine Variable die Zählt wieviel wirklich gelesen Wurde.
  76. ReadProcessMemory(handleProcess, MemoryAddress, buffer, bytesToRead, out ptrBytesRead);
  77.  
  78. bytesRead = ptrBytesRead.ToInt32();
  79.  
  80. return buffer;
  81. }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement