2017-04-04 48 views
0

我一直在嘗試這樣做的日子沒有任何成功,所以我希望有人能幫助我。使用Python掃描窗口中外部進程的內存3

我的目標是一旦我有了pid就掃描一個進程的內存,並且實際讀取該進程的字符串。

例如,我想要做這樣的事情。

假設我打開了一個記事本並且pid = 4578. 我想首先檢查進程內存中是否存在字符串「cold water」,如果字符串在內存中,那麼我會執行一個更深的掃描提取內存中的所有字符串,否則我wouldnt。

from ctypes import * 
import ctypes 
import psutil 
import time 

def get_client_pid(process_name): 
    pid = None 
    for proc in psutil.process_iter(): 
     if proc.name() == process_name: 
      pid = int(proc.pid) 
      print("Found, PID = ", pid) 
      break 
    return pid 

pid = get_client_pid("notepad.exe.exe") 

PROCESS_QUERY_INFORMATION = 0x0400 
PROCESS_VM_READ = 0x0010 

process = windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,False,pid) 
readprocess = windll.kernel32.ReadProcessMemory 
rdbuf = ctypes.c_uint() 
bytread = ctypes.c_size_t() 
base = 0x00400000 
for addr in range(base, base + 11): 
    try: 
     if readprocess(process, ctypes.c_void_p(addr), ctypes.byref(rdbuf), ctypes.sizeof(rdbuf),ctypes.byref(bytread)): 
      print(rdbuf.value) 
    except Exception as e: 
     print("ERROR", e) 

這是我在某處找到並編輯了一點的示例代碼。

如何知道屬於特定進程的內存中的所有地址?

是一個比ctypes更好或更簡單的模塊來做到這一點?

感謝您的幫助

回答

0

看來您有一些打字錯誤。嘗試更換此代碼:

pid = get_client_pid("notepad.exe.exe") 

有了這一個:

pid = get_client_pid("notepad.exe")