2016-07-23 16 views
-2

我一直在試圖進入製作簡單的遊戲培訓師,所以我做的DLL(我知道我可以用EXE做,但還是想和DLL去),所以我做了很簡單DllMain:DLL注入只是一些工藝

#include "main.h" 
#include <iostream> 
#include <Windows.h> 
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) { 
if (dwReason == DLL_PROCESS_ATTACH) { 
    AllocConsole(); 
    freopen("CONOUT$", "w", stdout); 
    std::cout << "DDDD"; 
    FreeConsole(); 
} 
else if (dwReason == DLL_PROCESS_DETACH) { 
    return 0; 
} 
return TRUE; 
} 

我使用3個不同的注射器,似乎只注入少數進程(如4/5計數),而不是爲其他人工作。有任何想法嗎?

回答

0

您應該檢查您使用的注入方法失敗的原因(例如,API調用返回錯誤)。注入可能失敗,因爲注入進程對目標進程沒有足夠的權限。然而,DLL注入方式可能有其他限制:通過Windows鉤子

  • 注射僅需在同一個桌面上的噴油器上運行的進程的影響。此外,DLL是通過惰性算法注入的 - 只有在進程需要的情況下(如果使用WH_GETMESSAGE鉤子,目標進程纔會被注入,直到它收到消息)。 AFAIR您還需要一個32位注入器和DLL來注入32位進程和64位注入器和DLL以注入64位進程。當目標線程進入一個狀態時,它能夠處理待處理的APCs時

  • 經由用戶APC注射可以僅發生。並非所有的線程都這樣做。

  • HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows註冊表項下的AppInit_Dlls值允許您將DLL注入到也加載user32.dll的所有進程中。如果啓用安全啓動,則此方法在Windos 8及更高版本上似乎完全不起作用。也可以以僅加載經過簽名的DLL的方式來配置系統。

  • 在Vista和更高版本上,如果我沒有記錯(RtlCreateUserThread應解決問題),CreateRemoteThread方法可能會跨越會話邊界出現問題。但是,當您開始在其地址空間內創建用戶線程時,某些進程可能會非常不高興(意味着它們掛起或崩潰)。

此外,遊戲保護軟件可能會阻止您的注射嘗試。

因此,有許多可能的原因,您的問題。您應該告訴我們您嘗試過哪些注入方法,結果以及注入進程是否使用管理權限運行。

0

確保你沒有注入32位的DLL到64位進程或反之亦然,這是行不通的。

+0

32或64位的dll,仍然相同的情況之間沒有差別。 – helloworld

+0

@helloworld你是什麼意思,不爲別人工作?噴油器是否輸出一些錯誤信息? –