2017-04-04 4 views
0

나는 아무런 성공도하지 않고 며칠 동안이 작업을 시도해 왔기 때문에 누군가가 나를 도울 수 있기를 바랍니다.Python 3을 사용하여 Windows에서 외부 프로세스의 메모리를 검사하십시오.

내 목표는 프로세스의 메모리를 스캔 한 후 PID를 가지고 실제로 프로세스의 문자열을 읽는 것입니다.

예를 들어 나는 이와 같은 것을하고 싶다.

내가 메모장을 열고 pid = 4578이라고 가정 해 보겠습니다. 문자열이 메모리에 있으면 작업 메모리에 "찬물"이라는 문자열이 있는지 먼저 확인하고 싶습니다. 더 깊은 스캔은 메모리의 모든 문자열을 추출합니다. 그렇지 않으면 I 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") 
관련 문제