리소스 파일에서 파일 추출
리소스 파일에서 파일 추출을 하는걸 하다보니 File Dropper 가 많이 생각나네요.
프로젝트에서 클래스를 추가하기를 눌러 Import 를하여 파일을 추가해줍니다. 여기서는 드라이버를 추출을 해보자.
이런식으로 리소스 파일이 생성이 되는데 ctrl + s 를 클릭하여 저장을 한 뒤 아래 소스를 입력한 뒤 컴파일을 하면 된다.
그리고 실행을 하면 파일이 driver.sys가 생성이 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include<stdio.h> #include<windows.h> #include<conio.h> #include "resource.h" int main() { HRSRC find_resource; HGLOBAL global_resource; unsigned long file_size; unsigned char *file_ptr; HANDLE file_handle; find_resource = FindResourceW(NULL, MAKEINTRESOURCE(IDR_DRIVER1), L"DRIVER"); if (!find_resource) { printf("FindResourceW Func err! gle : 0x%08x\n", GetLastError()); return FALSE; } global_resource = LoadResource(NULL, find_resource); if (!global_resource) { printf("LoadResource Func err! gle : 0x%08x\n", GetLastError()); return FALSE; } file_size = SizeofResource(NULL, find_resource); file_ptr = (unsigned char*)LockResource(global_resource); if (!file_ptr) { printf("LockResource Func err! gle : 0x%08x\n", GetLastError()); return FALSE; } file_handle = CreateFileW(L"driver.sys", FILE_ALL_ACCESS, 0, NULL, CREATE_ALWAYS, 0, NULL); if (INVALID_HANDLE_VALUE == file_handle) { int err = GetLastError(); if ((ERROR_ALREADY_EXISTS == err) || 32 == err) { printf("CreateFileW:Alway exist or running Func err! gle : 0x%08x\n", GetLastError()); return FALSE; } printf("CreateFileW:%s decompress Func err! gle : 0x%08x\n", GetLastError()); return FALSE; } while (file_size--) { unsigned long written; WriteFile(file_handle, file_ptr, 1, &written, NULL); file_ptr++; } CloseHandle(file_handle); return 0; } | cs |
생성된 드라이버를 로더하고 정상적인 실행을 확인을 하였다.
'My Study > Driver' 카테고리의 다른 글
Windows7 Driver 개발 시작!! (0) | 2016.08.31 |
---|