2017-04-04 73 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")