dll 원격 스레드 주입


  
  
  
  
  1. bool EnableDebugPriv() 
  2. { 
  3.     HANDLE hToken; 
  4.     TOKEN_PRIVILEGES tp; 
  5.     LUID luid; 
  6.     if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) 
  7.         return false; 
  8.  
  9.     if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&luid))return false; 
  10.  
  11.     tp.PrivilegeCount = 1; 
  12.     tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED; 
  13.     tp.Privileges[0].Luid = luid; 
  14.     if(!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL) ) return false; 
  15.  
  16.     return true; 
  17. } 
  18.  
  19. // rundll32 yourdll,test  dll  
  20. //dll    
  21. //dll  
  22. bool InstallDll(std::string  mDllFullPath,DWORD   mProcessID) 
  23. { 
  24.     if (mProcessID == 0)return false; 
  25.     if(!EnableDebugPriv())return false; 
  26.     HANDLE hRemoteProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,mProcessID); 
  27.     if(hRemoteProcess == NULL)return false; 
  28.  
  29.     size_t length = mDllFullPath.size() + 1; 
  30.  
  31.     char *pszLibFileRemote = (char *)::VirtualAllocEx(hRemoteProcess, NULL, length, MEM_COMMIT, PAGE_READWRITE); 
  32.     if(pszLibFileRemote==NULL)return false; 
  33.  
  34.     if(WriteProcessMemory(hRemoteProcess,pszLibFileRemote,mDllFullPath.c_str(),length,NULL) == 0) 
  35.         return false; 
  36.  
  37.     PTHREAD_START_ROUTINE pfnStartAddr=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("Kernel32"),"LoadLibraryA"); 
  38.     if(pfnStartAddr == NULL) 
  39.     { 
  40.         ::VirtualFreeEx(hRemoteProcess,pszLibFileRemote,length,MEM_RELEASE); 
  41.         return false; 
  42.     } 
  43.  
  44.     HANDLE hRemoteThread = CreateRemoteThread(hRemoteProcess,NULL,0,pfnStartAddr,pszLibFileRemote,0,NULL); 
  45.     if(hRemoteThread==NULL) 
  46.     { 
  47.         ::VirtualFreeEx(hRemoteProcess,pszLibFileRemote,length,MEM_RELEASE); 
  48.         return false; 
  49.     } 
  50.  
  51.     ::VirtualFreeEx(hRemoteProcess,pszLibFileRemote,length,MEM_RELEASE); 
  52.  
  53.     return true; 
  54. } 

좋은 웹페이지 즐겨찾기