나는이 기능이 지금 당장 운이 좋으면 노력하고있다.ctypes WriteProcessMemory()가 실패하는 이유는 무엇입니까?
def write_memory(self, address, data):
PROCESS_ALL_ACCESS = 0x001F0FFF
count = c_ulong(0)
length = len(data)
c_data = c_char_p(data[count.value:])
null = c_int(0)
windll.kernel32.SetLastError(10000)
if not windll.kernel32.WriteProcessMemory(self.h_process, address, c_data, length, byref(count)):
print "Failed to write memory."
print "Error Code: ", windll.kernel32.GetLastError()
else:
return True
GetLastError()는 (의 0x57) ERROR_INVALID_PARAMETER 어느 반환 87이다. 이 함수의 경우 저스틴 세이츠의 Gray Hat Python에서 바로 복사했습니다. 내가 뭘 잘못하고 있는지, ReadProcessMemory() 잘 작동하고 적절한 값을 반환합니다.
주소의 경우 현재 임의의 위치 (0x00050000)를 선택하고 "\ x61"과 같은 데이터를 전후로 변경없이 전달합니다.
느낌이 있습니다. 간단한 오류입니다. 도움을 위해 미리 감사드립니다. Nav.
당신이 맞았을 때 특권이었습니다. 나는 아직도 내가 원하는 것을 알아낼 수 없다. 내 발사 프로세스 코드는 다음과 같습니다.
class SECURITY_ATTRIBUTES(Structure):
_fields_ = [("Length", DWORD),
("SecDescriptor", LPVOID),
("InheritHandle", BOOL)]
def launch(self, path_to_exe):
CREATE_NEW_CONSOLE = 0x0000010
startupinfo = STARTUPINFO()
process_information = PROCESS_INFORMATION()
security_attributes = SECURITY_ATTRIBUTES()
startupinfo.dwFlags = 0x1
startupinfo.wShowWindow = 0x0
startupinfo.cb = sizeof(startupinfo)
security_attributes.Length = sizeof(security_attributes)
security_attributes.SecDescriptior = None
security_attributes.InheritHandle = True
if windll.kernel32.CreateProcessA(path_to_exe,
None,
byref(security_attributes),
byref(security_attributes),
True,
CREATE_NEW_CONSOLE,
None,
None,
byref(startupinfo),
byref(process_information)):
self.pid = process_information.dwProcessId
else:
print "Couldnt launch: %d" %path_to_exe
print windll.kernel32.GetLastError()
다른 방법으로 프로세스를 만들어야합니까? SecDescriptor 구조체에 무엇을 넣어야합니까? MSDN은 DACL과 ACE에 대해별로 도움이되지 않습니까? 지금까지 모든 도움에 감사드립니다.
추신 : 디버거 또는 다른 프로그램이 프로세스를 생성하지 않고 메모리를 변경할 수있는 방법은 무엇입니까?
sys.getrefcount()를 사용하여 c_char_p()가 데이터에 대한 내부 참조를 유지한다는 것을 보여주기 때문에 Win32 루틴을 호출하기 전에 임시 문자열에 대한 대답을 삭제했습니다. –
감사합니다. 처음에는 도움이 되었습니까? 다른 아이디어가 있습니까? – Navanax
어떤 버전의 Windows입니까? 이 중 일부는 WinXP SP2로 변경되었습니다. –