具有ctypes的ReadProcessMemory

具有ctypes的ReadProcessMemory,第1张

具有ctypes的ReadProcessMemory

检查社区对MSDN ReadProcessMemory页面的评论,引用:

W7不会运行读取进程内存

您可能需要检查当前进程令牌的“ SE_DEBUG_NAME”访问权限。如果未启用。启用它。当然,这必须以管理员身份完成。

还要完全声明返回类型并使用

use_last_error
参数,该参数
ctypes
GetLastError()
调用后直接在内部缓存该值。否则,可能不正确。如果您使用的是64位系统,则SIZE_T和指针是64位值,因此ctypes需要知道用于正确设置调用堆栈的类型。

...from ctypes import wintypes...rPM = ctypes.WinDLL('kernel32',use_last_error=True).ReadProcessMemoryrPM.argtypes = [wintypes.HANDLE,wintypes.LPCVOID,wintypes.LPVOID,ctypes.c_size_t,ctypes.POINTER(ctypes.c_size_t)]rPM.restype = wintypes.BOOLwPM = ctypes.WinDLL('kernel32',use_last_error=True).WriteProcessMemorywPM.argtypes = [wintypes.HANDLE,wintypes.LPVOID,wintypes.LPCVOID,ctypes.c_size_t,ctypes.POINTER(ctypes.c_size_t)]wPM.restype = wintypes.BOOLADDRESS1 = 0x00E97074ADDRESS2 = ctypes.create_string_buffer(64)bytes_read = ctypes.c_size_t()print(rPM(PROCESS,ADDRESS1,ADDRESS2,64,ctypes.byref(bytes_read)))print(ctypes.get_last_error())

同样,FYI,即使使用所有修复程序,我也得到相同的错误值,但是我没有遇到启用问题

SE_DEBUG_NAME

解决了

以下是问题所在:

PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID).handle

win32api.OpenProcess
返回一个
PyHANDLE
被销毁的临时文件, 在检索 到句柄 之后 关闭该句柄

解决方案是使用:

PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID)...rPM(PROCESS.handle,ADDRESS1,ADDRESS2,64,0)

PROCESS
然后握住该
PyHANDLE
对象,并且手柄保持有效。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5674579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存