Advertisement
Guest User

Untitled

a guest
Dec 6th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.88 KB | None | 0 0
  1. from ctypes import create_string_buffer, c_ulong, byref, windll
  2. from subprocess import check_output
  3. import psutil, struct
  4.  
  5. PROCNAME = "OUTLOOK.EXE"
  6.  
  7. for proc in psutil.process_iter():
  8.     if proc.name() == PROCNAME:
  9.         pid = proc.pid
  10.  
  11. print(pid)
  12.  
  13.  
  14. class Memory(object):
  15.     def __init__(self, pid):
  16.         self.process = windll.kernel32.OpenProcess(0x1F0FFF, 0, pid)
  17.         self.readTypes = {
  18.             'float': self.readFloat,
  19.             'int': self.readInt,
  20.             'string': self.readString,
  21.         }
  22.  
  23.     def readInt(self, address):
  24.         string = self.readBytes(address, 4)
  25.         number = struct.unpack('<I',string)[0]
  26.         return number
  27.  
  28.     def readFloat(self, address):
  29.         string = self.readBytes(address, 4)
  30.         number = struct.unpack('<f',string)[0]
  31.         return number
  32.  
  33.     def readOffset(self, address, T):
  34.         try:
  35.             if type(address) == list:
  36.                 ret = 0
  37.                 for a in address:
  38.                     ret = ret + a
  39.                     ret = self.readTypes[T](ret)
  40.                 return ret
  41.             else:
  42.                 return self.readTypes[T](address)
  43.         except KeyError:
  44.             raise Exception("Unsupported Type")
  45.  
  46.     def readString(self, address, bytes=50):
  47.         buffer = self.readBytes(address, bytes)
  48.         i = buffer.find(b'\x00')
  49.         if i != -1:
  50.             return buffer[:i]
  51.         else:
  52.             return buffer
  53.  
  54.     def readBytes(self, address, bytes=4):
  55.         ReadProcessMemory = windll.kernel32.ReadProcessMemory
  56.         buffer = create_string_buffer(bytes)
  57.         bytesRead = c_ulong(0)
  58.         bufferSize = bytes
  59.         ReadProcessMemory(self.process, address, buffer, bufferSize, byref(bytesRead))
  60.         string = buffer.raw
  61.         return string
  62.  
  63.  
  64. x = Memory(pid)
  65. print(x.readInt(0x00A2C06D))
  66.  
  67. print(x.readBytes(0x00A2C06E))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement