簡體   English   中英

由於dll彈出導致進程意外/強制終止

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM