윈도우 sys파일 리소스 파일에 추가하기

반응형

참고:http://www.Rootkit.com
출처:http://wezz.tistory.com/entry/Win32-드라이버-파일-Resource에-포함시키기

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




리소스 추가 -> 가져오기( 드라이버 파일) -> 사용자 지정 리소스 탐색 (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;
}
TAGS.

Comments