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