無論我在哪裏通過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適用於使用其他人的噴油器,但我不明白爲什麼... 它確實是在相同的目錄注射器。
我見過類似的東西。我只是搞亂了XP,導致一個進程通過DLL注入使用100%的CPU,這很好。當我在Windows 7上嘗試它時,它不起作用。周圍有東西發生了變化,可能通過調整流程的標記來補救,但我從來沒有看過太多。 – chris
您是否遇到任何錯誤,特別是在「OpenProcess」階段? –
@MatteoItalia,不是在我的情況下,沒有。我懷疑在這種情況下也不是。 – chris