我使用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。你知道吗相关问题 更多 >
编程相关推荐