由于dll弹出,进程意外/强制终止

2024-09-23 06:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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。 我的代码有什么问题吗?你知道吗


Tags: 函数nonefalsereturnif进程cleanupmodule