DLL注入explorer.exe进程
生活随笔
收集整理的這篇文章主要介紹了
DLL注入explorer.exe进程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
**DLL注入explorer.exe進程**
??最近一直在學(xué)習(xí)dll注入遠程進程的相關(guān)知識,于是有了這篇文章。通過注入的方式會運行程序,在資源管理器中是看不到,相關(guān)的進程的,這為程序的隱藏提供了極大的便利。
一、新建dll動態(tài)鏈接庫,然后在dllmain.cpp文件中的 “case DLL_PROCESS_ATTACH:”下輸入當你dll被進程加載時要執(zhí)行的代碼。這里我們用 “ MessageBox(NULL, L"呵呵", L"成功了,ye", NULL);”代替。
二、導(dǎo)出dll文件,注意導(dǎo)出的dll要和系統(tǒng)的位數(shù)一樣。32位的選擇x86,64位的選x64。待后面的項目解決方案使用。
// dllmain.cpp : 定義 DLL 應(yīng)用程序的入口點。 #include "pch.h" //#include "ShowModel.h" BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:MessageBox(NULL, L"呵呵", L"成功了,ye", NULL);//showFun(L"ddd");case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE; }三、新建c++控制臺項目,導(dǎo)出位數(shù)和系統(tǒng)以及剛才的dll一樣。
#include <iostream> #include <Windows.h> #include <TlHelp32.h> bool RemoteThreadInject(SIZE_T dwPid); SIZE_T GetProcessIdByName(LPCTSTR pszExeFile); int main() {SIZE_T pid;pid = GetProcessIdByName(L"explorer.exe");//獲取explorer.exe進程idRemoteThreadInject(pid);//將dll注入explorer.exe進程,這樣只要有explorer.exe的運行的時候,你的dll程序會一直運行 } //該函數(shù)是通過進程的名稱來獲取進程的id SIZE_T GetProcessIdByName(LPCTSTR pszExeFile){SIZE_T nProcessID = 0;//定義進程的返回的idPROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) };HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);if (hSnapshot != INVALID_HANDLE_VALUE){if (Process32First(hSnapshot, &pe)){while (Process32Next(hSnapshot, &pe)){if (lstrcmpi(pszExeFile, pe.szExeFile) == 0){nProcessID = pe.th32ProcessID;break;}}}CloseHandle(hSnapshot);}return nProcessID; } bool RemoteThreadInject(SIZE_T dwPid) {//1.使用PID打開進程獲取權(quán)限HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, dwPid);//2.申請內(nèi)存,寫入DLL路徑,dll路徑必須為絕對路徑int nLen = sizeof(WCHAR) * (wcslen(L"F:\\win\\InjectionDll\\x64\\Release\\InjectionDll.dll") + 1);LPVOID pBuf = VirtualAllocEx(hProcess, NULL, nLen, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);if (!pBuf){printf("申請內(nèi)存失敗!\n");return false;}//3.寫入內(nèi)存SIZE_T dwWrite = 0;if (!WriteProcessMemory(hProcess, pBuf, L"F:\\win\\InjectionDll\\x64\\Release\\InjectionDll.dll", nLen, &dwWrite)){printf("寫入內(nèi)存失敗!\n");return false;}//4.創(chuàng)建遠程線程,讓對方調(diào)用LoadLibraryHANDLE hRemoteThread = CreateRemoteThread(hProcess, NULL, NULL,(LPTHREAD_START_ROUTINE)LoadLibrary, pBuf, 0, 0);//5.等待線程結(jié)束返回,釋放資源WaitForSingleObject(hRemoteThread, -1);CloseHandle(hRemoteThread);VirtualFreeEx(hProcess, pBuf, 0, MEM_FREE);return true; }這樣我們就達到了隱藏運行程序的目的。菜鳥初次寫文章。
總結(jié)
以上是生活随笔為你收集整理的DLL注入explorer.exe进程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 字符串转整型
- 下一篇: 计算机硕论题目,硕士论文题目精选(计算机