here2share

# ReadWriteMemory.py

Feb 24th, 2021
1,704
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # ReadWriteMemory.py
  2.  
  3. import os.path
  4. import ctypes
  5. import ctypes.wintypes
  6.  
  7. # Process Permissions
  8. PROCESS_QUERY_INFORMATION = 0x0400
  9. PROCESS_VM_OPERATION = 0x0008
  10. PROCESS_VM_READ = 0x0010
  11. PROCESS_VM_WRITE = 0x0020
  12.  
  13. MAX_PATH = 260
  14.  
  15.  
  16. class ReadWriteMemory:
  17.  
  18.     def GetProcessIdByName(self, pName):
  19.         if pName.endswith('.exe'):
  20.             pass
  21.         else:
  22.             pName = pName+'.exe'
  23.          
  24.         ProcessIds, BytesReturned = self.EnumProcesses()
  25.  
  26.         for index in list(range(int(BytesReturned / ctypes.sizeof(ctypes.wintypes.DWORD)))):
  27.             ProcessId = ProcessIds[index]
  28.             hProcess = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
  29.             if hProcess:
  30.                 ImageFileName = (ctypes.c_char*MAX_PATH)()
  31.                 if ctypes.windll.psapi.GetProcessImageFileNameA(hProcess, ImageFileName, MAX_PATH) > 0:
  32.                     filename = os.path.basename(ImageFileName.value)
  33.                     if filename.decode('utf-8') == pName:
  34.                         return ProcessId
  35.                 self.CloseHandle(hProcess)
  36.  
  37.     def EnumProcesses(self):
  38.         count = 32
  39.         while True:
  40.             ProcessIds = (ctypes.wintypes.DWORD*count)()
  41.             cb = ctypes.sizeof(ProcessIds)
  42.             BytesReturned = ctypes.wintypes.DWORD()
  43.             if ctypes.windll.Psapi.EnumProcesses(ctypes.byref(ProcessIds), cb, ctypes.byref(BytesReturned)):
  44.                 if BytesReturned.value < cb:
  45.                     return ProcessIds, BytesReturned.value
  46.                 else:
  47.                     count *= 2
  48.             else:
  49.                 return None
  50.  
  51.     def OpenProcess(self, dwProcessId):
  52.         dwDesiredAccess = (PROCESS_QUERY_INFORMATION |
  53.                            PROCESS_VM_OPERATION |
  54.                            PROCESS_VM_READ | PROCESS_VM_WRITE)
  55.         bInheritHandle = False
  56.         hProcess = ctypes.windll.kernel32.OpenProcess(
  57.                                                     dwDesiredAccess,
  58.                                                     bInheritHandle,
  59.                                                     dwProcessId
  60.                                                     )
  61.         if hProcess:
  62.             return hProcess
  63.         else:
  64.             return None
  65.  
  66.     def CloseHandle(self, hProcess):
  67.         ctypes.windll.kernel32.CloseHandle(hProcess)
  68.         return self.GetLastError()
  69.  
  70.     def GetLastError(self):
  71.         return ctypes.windll.kernel32.GetLastError()
  72.  
  73.     def getPointer(self, hProcess, lpBaseAddress, offsets):
  74.         pointer = self.ReadProcessMemory2(hProcess, lpBaseAddress)
  75.         if offsets == None:
  76.             return lpBaseAddress
  77.         elif len(offsets) == 1:
  78.             temp = int(str(pointer), 0) + int(str(offsets[0]), 0)
  79.             return temp
  80.         else:
  81.             count = len(offsets)
  82.             for i in offsets:
  83.                 count -= 1
  84.                 temp = int(str(pointer), 0) + int(str(i), 0)
  85.                 pointer = self.ReadProcessMemory2(hProcess, temp)
  86.                 if count == 1:
  87.                     break
  88.             return pointer
  89.  
  90.     def ReadProcessMemory(self, hProcess, lpBaseAddress):
  91.         try:
  92.             lpBaseAddress = lpBaseAddress
  93.             ReadBuffer = ctypes.c_uint()
  94.             lpBuffer = ctypes.byref(ReadBuffer)
  95.             nSize = ctypes.sizeof(ReadBuffer)
  96.             lpNumberOfBytesRead = ctypes.c_ulong(0)
  97.  
  98.             ctypes.windll.kernel32.ReadProcessMemory(
  99.                                                     hProcess,
  100.                                                     lpBaseAddress,
  101.                                                     lpBuffer,
  102.                                                     nSize,
  103.                                                     lpNumberOfBytesRead
  104.                                                     )
  105.             return ReadBuffer.value
  106.         except (BufferError, ValueError, TypeError):
  107.             self.CloseHandle(hProcess)
  108.             e = 'Handle Closed, Error', hProcess, self.GetLastError()
  109.             return e
  110.  
  111.     def ReadProcessMemory2(self, hProcess, lpBaseAddress):
  112.         try:
  113.             lpBaseAddress = lpBaseAddress
  114.             ReadBuffer = ctypes.c_uint()
  115.             lpBuffer = ctypes.byref(ReadBuffer)
  116.             nSize = ctypes.sizeof(ReadBuffer)
  117.             lpNumberOfBytesRead = ctypes.c_ulong(0)
  118.  
  119.             ctypes.windll.kernel32.ReadProcessMemory(
  120.                                                     hProcess,
  121.                                                     lpBaseAddress,
  122.                                                     lpBuffer,
  123.                                                     nSize,
  124.                                                     lpNumberOfBytesRead
  125.                                                     )
  126.             return ReadBuffer.value
  127.         except (BufferError, ValueError, TypeError):
  128.             self.CloseHandle(hProcess)
  129.             e = 'Handle Closed, Error', hProcess, self.GetLastError()
  130.             return e
  131.  
  132.     def WriteProcessMemory(self, hProcess, lpBaseAddress, Value):
  133.         try:
  134.             lpBaseAddress = lpBaseAddress
  135.             Value = Value
  136.             WriteBuffer = ctypes.c_uint(Value)
  137.             lpBuffer = ctypes.byref(WriteBuffer)
  138.             nSize = ctypes.sizeof(WriteBuffer)
  139.             lpNumberOfBytesWritten = ctypes.c_ulong(0)
  140.  
  141.             ctypes.windll.kernel32.WriteProcessMemory(
  142.                                                     hProcess,
  143.                                                     lpBaseAddress,
  144.                                                     lpBuffer,
  145.                                                     nSize,
  146.                                                     lpNumberOfBytesWritten
  147.                                                     )
  148.         except (BufferError, ValueError, TypeError):
  149.             self.CloseHandle(hProcess)
  150.             e = 'Handle Closed, Error', hProcess, self.GetLastError()
  151.             return e
  152.  
  153.  
  154. rwm = ReadWriteMemory()
  155.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×