我的示例基于“Gray Hat Python”一书(http://expect-us.net/files/Gray%20Hat%20Python%20=rwt911=.pdf)
有一个小的示例应用程序 printf_loop:
from ctypes import *
import time
msvcrt = cdll.msvcrt
counter = 0
while True:
msvcrt.printf("Loop iteration %d!\n" % counter)
time.sleep(2)
counter += 1
现在我正在尝试获取此应用程序中使用的 printf 的地址。但是我的 ReadProcessMemory 调用总是返回 ERROR_PARTIAL_COPY。
def read_process_memory(self, address, length):
data = ""
read_buff = create_string_buffer(length)
count = c_ulong(0)
if not kernel32.ReadProcessMemory(self.h_process, address, read_buff, length, byref(count)):
print "[*] Error Code: 0x%08x" % kernel32.GetLastError()
print read_buff.raw
return False
else:
data += read_buff.raw
return data
我在以下函数中获取地址,其中 dll='msvcrt.dll' 和 function='printf':
def func_resolve(self, dll, function):
handle = c_void_p()
kernel32.GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, dll, byref(handle))
address = kernel32.GetProcAddress(handle, function)
kernel32.CloseHandle(handle)
return address
为什么我无法读取内存,您有什么建议吗?