簡體   English   中英

DLL Injector無法正常工作(64位編譯器)

[英]DLL Injector not working (64Bit compiler)

我還在研究我的同一個項目(如果你想知道為什么我會問這么多問題。)無論如何我從編譯器,從mingw32(mingw.org)切換到MinGW-w64(mingw-w64.sourceforge.net/)

雖然項目編譯良好而沒有任何錯誤,但注射器不起作用,沒有任何錯誤或什么。 這是來源:

int Inject(DWORD pID) 
{ 
    HANDLE hProcess;
    if (!(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID)))
        return 0;

    char* szDllName = "subclass64.dll";

    LPVOID LoadLibraryAddress;
    if ((LoadLibraryAddress = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")) == NULL)
    {
        char buf[32];
        sprintf(buf, "%d", GetLastError());
        MessageBox(0, buf, "", 0);

        CloseHandle(hProcess);
        return 0;
    }

    LPVOID lpStringAddress;
    if ((lpStringAddress = (LPVOID)VirtualAllocEx(hProcess, NULL, strlen(szDllName), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE)) == NULL)
    {
        char buf[32];
        sprintf(buf, "%d", GetLastError());
        MessageBox(0, buf, "", 0);

        CloseHandle(hProcess);
        return 0;
    }

    if (WriteProcessMemory(hProcess, lpStringAddress, szDllName, strlen(szDllName), NULL) == 0)
    {
        char buf[32];
        sprintf(buf, "%d", GetLastError());
        MessageBox(0, buf, "", 0);

        CloseHandle(hProcess);
        return 0;
    }

    HANDLE hThread;
    if ((hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddress, lpStringAddress, 0, NULL)) == NULL)
    {
        char buf[32];
        sprintf(buf, "%d", GetLastError());
        MessageBox(0, buf, "", 0);

        CloseHandle(hProcess);
        return 0;
    }

    CloseHandle(hProcess); 
    return 1; 
}

我調試了,但我沒有得到任何奇怪的值:

(gdb) p hProcess
$1 = (HANDLE) 0xec
(gdb) p LoadLibraryAddress
$2 = (LPVOID) 0x7f9de0528ac <LoadLibraryA>
(gdb) p lpStringAddress
$3 = (LPVOID) 0x8a4d10000
(gdb) p hThread
$4 = (HANDLE) 0xf0
(gdb) p GetLastError()
$5 = 0

DLL沒有任何問題,因為它適用於另一個DLL Injector(來自互聯網)

編輯 :它適用於虛擬/測試應用程序,但它不與記事本(例如使用第三方注入器一起工作)。

希望有人可以幫助我,問候

一個問題是目標進程中DLL的名稱不是空終止的,因為只分配和寫入了strlen(szDllName)字節。 更改字符串處理邏輯以分配和寫入strlen(szDllName) + 1以確保字符串為空終止。

請注意,要注入的DLL, subclass64.dll ,必須與目標進程位於同一目錄中,或者其PATH環境變量必須包含DLL所在的目錄。

我從編譯器切換到Visual Studio,在那里它最初沒有工作,但后來它確實。 答案是不調試。 因此,您導航到應用程序的路徑,然后手動啟動該程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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