My Study/Driver

리소스 파일에서 파일 추출

리소스 파일에서 파일 추출을 하는걸 하다보니 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
,

최근 댓글

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.