使用Python 3扫描Windows中外部进程的内存

时间:2017-04-04 08:46:17

标签: python readprocessmemory

我一直在尝试这样做几天没有任何成功,所以我希望有人可以帮助我。

我的目标是在拥有pid后扫描进程的内存,并实际读取该进程的字符串。

例如,我想做这样的事情。

让我们说打开记事本,pid = 4578。 我想首先检查进程内存中是否有字符串"冷水",如果字符串在内存中,那么我会进行更深的扫描,提取内存中的所有字符串,否则我不会。

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更好或更简单的模块吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您似乎有一些打字错误。尝试替换此代码:

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

有了这个:

pid = get_client_pid("notepad.exe")