首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

經典 DLL 注入與卸載完整代碼實現

     編輯:關於C++

注入流程

  1. OpenProcess 獲取目標進程句柄(需 PROCESS_VM_OPERATION | PROCESS_VM_WRITE)。
  2. VirtualAllocEx 遠程分配內存(大小 strlen(dllPath)+1)。
  3. WriteProcessMemory 寫入 DLL 路徑。
  4. CreateRemoteThread 以 LoadLibraryA 為線程函數、參數為遠程內存地址。
  5. WaitForSingleObject 等待線程結束,CloseHandle 清理。

卸載流程

  1. CreateRemoteThread 執行 GetModuleHandleA(參數 DLL 名),獲取模組句柄(線程退出碼)。
  2. GetExitCodeThread 取得 HMODULE。
  3. CreateRemoteThread 執行 FreeLibrary(參數模組句柄)。
  4. WaitForSingleObject 等待卸載完成,清理句柄。

完整代碼

#include <stdio.h> #include <Windows.h> #include <TlHelp32.h>
DWORD getProcessHandle(LPCTSTR lpProcessName) { /* Toolhelp32 遍歷查找 PID */ }
int main(int argc, CHAR* argv[]) {
    DWORD dwPid = getProcessHandle((LPCTSTR)argv[1]);
    LPCSTR lpDllName = "EvilDll.dll";
    HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, dwPid);
    // ... 分配、寫入、CreateRemoteThread(LoadLibraryA) ...
    // 卸載
    CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetModuleHandleA, lpRemoteBuf, 0, &dwID);
    WaitForSingleObject(hThread, INFINITE);
    GetExitCodeThread(hThread, &dwHandle);
    CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, (LPVOID)dwHandle, 0, &dwID);
    WaitForSingleObject(hThread, INFINITE);
    // 清理
}

教科書級示範,適合安全研究參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved