使用pymem注入进程后Python解释器如何访问并操作目标进程?
注入目标进程的Python解释器权限说明与操作方案
注入到目标进程的Python解释器运行在目标进程的专属地址空间内,天然继承目标进程的全部访问权限,不需要额外做感知、获取权限的操作。你当前测试中感觉到两者独立,是因为你编写的shellcode仅执行了文件写入操作,没有调用和目标进程(记事本)相关的接口,没有操作进程内存或窗口资源。
实现向记事本写入文本的方案
你可以通过注入的Python解释器调用Win32 API操作记事本窗口的编辑控件,即可完成内容写入,替换你现有代码中的shellcode部分即可,修改后完整可运行的示例如下:
from pymem import Pymem import os import subprocess import time # 启动记事本进程 notepad_process = subprocess.Popen(['notepad.exe']) # 等待记事本启动完成,避免后续找窗口失败 time.sleep(1) # 附加pymem到记事本进程 pm = Pymem('notepad.exe') # 注入Python解释器 pm.inject_python_interpreter() # 写入记事本的payload shellcode = """ import ctypes from ctypes import wintypes user32 = ctypes.WinDLL('user32', use_last_error=True) user32.FindWindowW.argtypes = [wintypes.LPCWSTR, wintypes.LPCWSTR] user32.FindWindowExW.argtypes = [wintypes.HWND, wintypes.HWND, wintypes.LPCWSTR, wintypes.LPCWSTR] user32.SendMessageW.argtypes = [wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPCWSTR] WM_SETTEXT = 0x000C # 查找记事本主窗口 hwnd_notepad = user32.FindWindowW("Notepad", None) # 查找记事本的编辑框子控件 hwnd_edit = user32.FindWindowExW(hwnd_notepad, None, "Edit", None) # 向编辑框发送文本内容 if hwnd_edit: user32.SendMessageW(hwnd_edit, WM_SETTEXT, 0, "pymem注入成功,这是注入的Python解释器写入的内容") """ # 执行payload pm.inject_python_shellcode(shellcode) # 注释掉kill代码即可看到记事本里的写入效果 # notepad_process.kill()
注意事项
- 如果你需要操作目标进程的内存数据,直接在注入的shellcode中用ctypes读写当前进程内存地址即可,不需要额外调用远程读写接口,因为注入的Python本身就运行在目标进程的地址空间中
- 如果存在多个记事本进程,你可以通过进程ID过滤窗口,避免找错目标窗口
- 注入操作需要当前运行脚本的账号具备本地管理员权限,否则会出现注入失败的情况
内容的提问来源于stack exchange,提问作者zooid
相关产品推荐
相关产品推荐

