2012-12-31 119 views
2

無論我在哪裏通過CreateRemoteThread注入的方法是相同的,但是抓取進程ID的方法不是...我的函數將返回正確的進程ID,而我對此沒有任何幫助,所以我會將這部分無效並僅包含實際注入。C++ - CreateRemoteThread DLL注入[Windows 7]

我只是剛剛學習DLL注入,並試圖在notepad.exe上。如果注入工作,記事本的標題將從「無標題 - 記事本」更改爲「鉤住」。

#define DLL_NAME "injectme.dll" 

..... 

BOOL InjectRemoteThread(DWORD ProcessID) 
{ 
    HANDLE RemoteProc; 
    char buf[50]  = {0}; 
    LPVOID MemAlloc; 
    LPVOID LoadLibAddress; 

    // Process ID does show correctly! 
    WCHAR id[100]; 
    StringCbPrintf(id, 100, L"%d", ProcessID); // id contains the process ID... is confirmed in comparing ID shown in tasklist and the messagebox. 
    MessageBox(NULL, id, L"Process ID", MB_ICONINFORMATION); 
    // Process ID does show correctly! 

    if (!ProcessID) 
    { 
     MessageBox(NULL, (LPCWSTR)GetLastError(), L"An error occured", NULL); 
     return 0; 
    } 
    RemoteProc   = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessID); 
    if (!RemoteProc) 
    { 
     MessageBox(NULL, (LPCWSTR)GetLastError(), L"An error occured", NULL); 
     return 0; 
    } 
    LoadLibAddress  = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"); 
    MemAlloc   = (LPVOID)VirtualAllocEx(RemoteProc, NULL, strlen(DLL_NAME)+1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 
    WriteProcessMemory(RemoteProc, (LPVOID)MemAlloc, DLL_NAME, strlen(DLL_NAME)+1, NULL); 
    CreateRemoteThread(RemoteProc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddress, (LPVOID)MemAlloc, NULL, NULL); 

    CloseHandle(RemoteProc); 
    VirtualFreeEx(RemoteProc, (LPVOID)MemAlloc, 0, MEM_RELEASE | MEM_DECOMMIT); 
    return 1; 
} 

的DLL適用於使用其他人的噴油器,但我不明白爲什麼... 它確實是在相同的目錄注射器。

+0

我見過類似的東西。我只是搞亂了XP,導致一個進程通過DLL注入使用100%的CPU,這很好。當我在Windows 7上嘗試它時,它不起作用。周圍有東西發生了變化,可能通過調整流程的標記來補救,但我從來沒有看過太多。 – chris

+0

您是否遇到任何錯誤,特別是在「OpenProcess」階段? –

+0

@MatteoItalia,不是在我的情況下,沒有。我懷疑在這種情況下也不是。 – chris

回答

6

我發現了這個問題......我覺得很愚蠢。 任何有類似問題的人:使用絕對路徑代替相對路徑。

我改變

#define DLL_NAME "injectme.dll" 

#define DLL_NAME "C:\\Users\\Raikazu\\Documents\\Visual Studio 2012\\Projects\\Hooking\\Release\\injectme.dll" 
+0

哦,男人,非常感謝你哈哈。這wsa這樣一個惱人的bug –