리소스 다루기 2

programming/windows 2012. 5. 24. 09:21
루트킷 같은 성격의 드라이버들은 배포시 아래와 같은 방법으로 
실행 바이너리의 리소스에 드라이버를 포함시킨다.




리소스 추가 -> 가져오기( 드라이버 파일) -> 사용자 지정 리소스 탐색 (ex:Driver) 
와 같이 추가를 하면 아래의 그림처럼 바이너리가 추가된다.




그 후 Build를 하면 내가 포함 시킨 드라이버 파일과 Resource.h 파일이 수정된다.





아래의 IDR_DRIVER1의 선언해준 "DRIVER"를 통해 리소스를 추출하면 된다.



[Source]
BOOL ExtractDriver(LPSTR Path)
{
  HRSRC RsH;
  HGLOBAL RsGH;
  BYTE *FilePtr;
  ULONG FileSize;
  ULONG numWritten;
  HANDLE hFile;
  RsH = FindResource(NULL, MAKEINTRESOURCE(IDR_DRIVER1), "DRIVER");
  if(!RsH)
  {
   printf( "FindResource Error\n" );
   return FALSE;
  }
  RsGH = LoadResource(NULL, RsH);
  if(!RsGH)
  {
   printf( "LoadResource Error\n" );
   return FALSE;
  }
  FileSize = SizeofResource(NULL, RsH);
  FilePtr = (unsigned char *)LockResource(RsGH);
  if(!FilePtr)
  {
   printf( "LockResource Error\n" );
   return FALSE;
  }
  hFile = CreateFile( Path ,FILE_ALL_ACCESS,0,NULL,CREATE_ALWAYS,0, NULL);
  if(INVALID_HANDLE_VALUE == hFile)
  {
   return FALSE;
  }
  WriteFile(hFile, FilePtr, FileSize , &numWritten, NULL);
  CloseHandle(hFile);
  return TRUE;
}
BOOL CleanUp(LPSTR Path)
{
 if(S_OK != DeleteFile(Path))
 {
  return FALSE;
 }
 return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
 if( ExtractDriver( "C:\\ABCD.SYS" ) )
 {
 //-------------------------------
 //드라이버 로드
 //-------------------------------

 CleanUp( "C:\\ABCD.SYS" );
 }
 return 0;
}


출처 : http://wezz.tistory.com/entry/Win32-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%ED%8C%8C%EC%9D%BC-Resource%EC%97%90-%ED%8F%AC%ED%95%A8%EC%8B%9C%ED%82%A4%EA%B8%B0


'programming > windows' 카테고리의 다른 글

str ansi uni multi  (0) 2015.11.03
VC2010/2012에 WTL 설치  (0) 2013.10.11
리소스 다루기 1  (0) 2012.05.23
까먹지말자  (0) 2012.02.28
Win32 Ref.  (0) 2011.12.27
: