윈도우즈 플랫폼에서 dll 원격 주입을 실현하는 간단한 예

최근에 dll 원격 주입에 관한 것을 보았는데 이 기술은 원래 ***를 숨기는 좋은 방법이었는데 지금은 통과하기 어려울 것 같습니다. 일반적인 살연은 관련 행위를 검출할 수 있습니다.
//dll 코드, 메시지 박스 함수를 아무렇게나 추가하여 주입 테스트에 성공하면 이 대화상자가 팝업됩니다
   
   
   
   
  1. #include "stdafx.h"  
  2. #include   
  3.  
  4. BOOL APIENTRY DllMain( HANDLE hModule,   
  5.                        DWORD  ul_reason_for_call,   
  6.                        LPVOID lpReserved  
  7.                      )  
  8. {  
  9.     MessageBoxA(NULL,"hello world","dll",MB_OK);      
  10.     return TRUE;  

//dll 원격 주입 코드, 나는 수동으로 하나의 프로세스의pid를 입력한 것이고, 사실은 스냅샷 방식으로 하나의 프로세스를 고정시켜 주입할 수도 있다
   
   
   
   
  1. #include   
  2.  
  3.  
  4. int  main ()  
  5. {  
  6.     DWORD  pid =  2324;  
  7.     LPVOID pAddress = 0;  
  8.     char *dllpath = "C:\\Documents and Settings\\All Users\\ \\dll\\Debug\\dll.dll";  
  9.     int dwSize = lstrlen(dllpath) + 1;  
  10.     DWORD  write = 0;  
  11.     BOOL bRet  = FALSE;  
  12.     HANDLE hThread  = 0;  
  13.     DWORD dwthread = 0;  
  14.  
  15.     PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"LoadLibraryA");  
  16.       
  17.     HANDLE  hPid = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);  
  18.  
  19.     if ( NULL == hPid )  
  20.     {  
  21.         CloseHandle(hPid);  
  22.     }  
  23.  
  24.     pAddress = VirtualAllocEx( hPid,0,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);  
  25.  
  26.     if ( NULL == pAddress)  
  27.     {  
  28.         VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);  
  29.         CloseHandle(hPid);  
  30.     }  
  31.  
  32.      bRet  = WriteProcessMemory(hPid,pAddress,dllpath,dwSize,&write);  
  33.  
  34.     if ( FALSE == bRet )  
  35.     {  
  36.         VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);  
  37.         CloseHandle(hPid);  
  38.     }  
  39.  
  40.     hThread = CreateRemoteThread(hPid,NULL,0,pfnThreadRtn,pAddress,0,&dwthread);  
  41.  
  42.     if ( NULL == hThread)  
  43.     {  
  44.         VirtualFreeEx(hPid,pAddress,0x1000,MEM_RELEASE);  
  45.         CloseHandle(hPid);  
  46.     }  
  47.  
  48.     return 0;     

좋은 웹페이지 즐겨찾기