使用Pymem注入Spawn的子进程报错TypeError,求解决办法
问题:Pymem注入subprocess启动的svchost.exe子进程失败
我尝试使用Pymem对通过subprocess启动的svchost.exe子进程进行进程注入,代码如下:
from pymem import Pymem import os import subprocess svc = subprocess.Popen(['svchost.exe']) pid = svc.pid print("process id is: ", pid) pm = Pymem(pid) pm.inject_python_interpreter() shellcode = """ import tkinter as tk mn = tk.Tk() mn.mainloop() """ pm.inject_python_shellcode(shellcode)
运行上述代码后出现错误,报错信息如下:
process id is: 7300 Traceback (most recent call last): File "C:\Users\yallah\Documents\shel.py", line 28, in <module> pm.inject_python_interpreter() File "C:\Users\yallah\AppData\Local\Programs\Python\Python311\Lib\site-packages\pymem\__init__.py", line 124, in inject_python_interpreter self.start_thread(py_initialize_ex, param_addr) File "C:\Users\yallah\AppData\Local\Programs\Python\Python311\Lib\site-packages\pymem\__init__.py", line 191, in start_thread pymem.logger.debug('New thread_id: 0x%08x' % thread_h) ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ TypeError: %x format: an integer is required, not NoneType
不指定PID时代码可正常运行,但我需要引用Spawn进程的PID,请问有什么解决建议?
解决建议
等待进程完全初始化:subprocess启动svchost.exe后,进程可能还未完成初始化就被注入,导致Pymem无法正常创建线程。可在获取PID后添加短暂延迟:
import time svc = subprocess.Popen(['svchost.exe']) pid = svc.pid time.sleep(1) # 等待进程完成初始化 pm = Pymem(pid) # 后续注入操作以管理员权限运行脚本:svchost.exe是系统核心进程,注入操作需要足够权限。右键点击Python脚本,选择「以管理员身份运行」,确保拥有进程注入的权限。
给svchost指定服务参数:单独启动
svchost.exe会因缺少服务配置快速退出,导致PID失效。可指定具体服务组参数,保证进程稳定运行:svc = subprocess.Popen(['svchost.exe', '-k', 'netsvcs'])注入前验证进程存活状态:在初始化Pymem前检查进程是否仍在运行,避免注入已退出的无效进程:
import psutil svc = subprocess.Popen(['svchost.exe', '-k', 'netsvcs']) pid = svc.pid time.sleep(1) if psutil.pid_exists(pid): pm = Pymem(pid) pm.inject_python_interpreter() # 后续shellcode注入操作 else: print("目标进程已退出,无法执行注入")
内容的提问来源于stack exchange,提问作者ysfsun
相关产品推荐
相关产品推荐

