我一直在尝试这样做几天没有任何成功,所以我希望有人可以帮助我。
我的目标是在拥有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更好或更简单的模块吗?
感谢您的帮助
答案 0 :(得分:0)
您似乎有一些打字错误。尝试替换此代码:
pid = get_client_pid("notepad.exe.exe")
有了这个:
pid = get_client_pid("notepad.exe")