Advertisement
Atheuz

Untitled

Aug 3rd, 2014 (edited)
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. # Filename      main.py
  4.  
  5. import psutil
  6. from ctypes import *
  7. from ctypes.wintypes import *
  8. from struct import *
  9.  
  10. OpenProcess = windll.kernel32.OpenProcess
  11. ReadProcessMemory = windll.kernel32.ReadProcessMemory
  12. GetLastError = windll.kernel32.GetLastError
  13. CloseHandle = windll.kernel32.CloseHandle
  14. PROCESS_ALL_ACCESS = 0x1F0FFF
  15.  
  16. class TrackManiaTimer(object):
  17.     def __init__(self):
  18.         self.pid = None
  19.         self.process_name = "ManiaPlanet.exe"
  20.         self.offsets = [0x37C, 0x3C, None]
  21.         self.time = None
  22.         self.timelast = None
  23.         self.address = 0x0163B4D8
  24.         self.restarts = 0
  25.         self.finishes = 0
  26.        
  27.     def get_pid(self):
  28.         for proc in psutil.process_iter():
  29.             try:
  30.                 if (proc.name() == self.process_name):
  31.                     self.pid = proc.pid
  32.             except (PermissionError, psutil.AccessDenied):
  33.                 pass
  34.                
  35.     def read_process_memory(self):
  36.         processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, self.pid)
  37.         length = 4
  38.         data = ""
  39.         read_buff = create_string_buffer(length)
  40.         count = c_ulong(0)
  41.         current_address = self.address
  42.         for offset in self.offsets:
  43.             if not ReadProcessMemory(processHandle, current_address, cast(read_buff, LPVOID), length, byref(count)):
  44.                 return -1
  45.             else:
  46.                 val = read_buff.value
  47.                 result = int.from_bytes(val, byteorder='little')
  48.                 if(offset != None):
  49.                     current_address = result+offset
  50.                 else:
  51.                     return result
  52.                    
  53.     def loop(self):
  54.         old_timer = -1
  55.         try:
  56.             while(True):
  57.                 new_timer = self.read_process_memory()
  58.                 if new_timer != old_timer:
  59.                     old_timer = new_timer
  60.                     if (new_timer == 0):
  61.                         self.restarts += 1
  62.                     elif (new_timer == 4294967295):
  63.                         self.finishes += 1
  64.         except (KeyboardInterrupt):
  65.             print("Starts: %d" % self.restarts)
  66.             print("Finishes: %d" % self.finishes)
  67.            
  68.    
  69.  
  70. def main():
  71.     t = TrackManiaTimer()
  72.     t.get_pid()
  73.     t.loop()
  74.        
  75.    
  76.    
  77. if __name__ == '__main__':
  78.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement