[英]Unexpected/Forced Termination of process due to dll ejection
我使用CreateRemoteThread函數將編寫的DLL注入了另一個進程,並且效果很好。 但是,當我嘗試使用相同的方法彈出DLL時,它將導致進程終止,而我不明白為什么。
這是我編寫的用於彈出DLL的函數:
def EjectDLL(processId, dllPath):
hThread = None
hProcess = kernel32.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_CREATE_THREAD,
False, processId)
if hProcess == None:
CleanUp(hProcess, None, hThread)
return False
for module in EnumProcessModules(processId):
if module[0].lower() == dllPath.lower():
threadRtn = kernel32.GetProcAddress(kernel32.GetModuleHandleA("kernel32.dll"), "FreeLibraryA")
if threadRtn == None:
break
hThread = kernel32.CreateRemoteThread(hProcess, None, 0, threadRtn, module[1], 0, None)
if hThread == None:
break
kernel32.WaitForSingleObject(hThread, INFINITE) #wait for remote thread to finish
CleanUp(hProcess, None, hThread)
return True
CleanUp(hProcess, None, hThread)
return False
EnumProcessModules產生一個元組,其中第一個索引是模塊的路徑,第二個索引是模塊的HMODULE。 我的代碼有什么問題嗎?
kernel32.dll
沒有名為FreeLibraryA
函數,只有FreeLibrary
,因此對GetProcAddress
的調用返回null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.