ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Proxy DLL
    kb 2011. 4. 20. 14:40

    윈도우 실행파일 구조인 PE (Potable Executable) 에는 EXPORT 라는 외부노출함수를 지원합니다. 일반적으로 DLL (Dynamic Load Library) 에서 사용되며 외부로 노출되는 함수는 일반적으로 (ASCII 기반의 문자열로 구성된) 이름을 기반으로 작성됩니다. 더불어 이 글에서 이야기 하고자 하는 “EXPORT 함수의 위치”는 일반적으로 해당 DLL 안에 존재합니다. 이러한 값들은 IMAGE_EXPORT_DIRECTORY 구조체에 AddressOfFunctions 라는 변수에 의해 RVA (Relative Virtual Address) 함수주소가 나열된 곳의 시작점을 가리키고 있습니다.

    typedef struct _IMAGE_EXPORT_DIRECTORY {
        DWORD   Characteristics;
        DWORD   TimeDateStamp;
        WORD    MajorVersion;
        WORD    MinorVersion;
        DWORD   Name;
        DWORD   Base;
        DWORD   NumberOfFunctions;
        DWORD   NumberOfNames;
        DWORD   AddressOfFunctions;    
    // RVA from base of image
        DWORD   AddressOfNames;         // RVA from base of image
        DWORD   AddressOfNameOrdinals;  // RVA from base of image
    } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

    이렇게 일반적일 경우 EXPORT 정보를 확인할 경우 아래 그림과 같이 나타납니다.

    [그림1] Non-Poxy DLL

    지금까지는 일반적인 경우에 대한 설명이었고 지금부터는 일반적이지 않은 경우에 대한 설명입니다. 그럼 어떤 부분이 일반적이지 않느냐! 그건 바로 EXPORT 함수의 실제 코드가 해당 DLL 에 존재하지 않고 다른 DLL 을 가리킬 수 있다는 것입니다. 이때는 아래 그림과 같이 해당 EXPORT 함수가 어떤 DLL 의 EXPORT 함수와 연결되는지 나타나게 됩니다.

    [그림2] Proxy DLL

    이렇게 프로그램 하기 위해서는 pragma 라는 컴파일 옵션을 사용하여 구연할 수 있다. 예를 들어 gid32.dll 에 BitBlt 함수를 내가 만든 DLL 에서 그대로 사용하고 싶을 때는 다음과 같이 기술하면 된다.

    #pragma comment(linker, "/export:BitBlt=gdi32.BitBlt")

    이러한 기능은 하위호환을 고려한 새로운 버전의 DLL 을 만들고 싶을 경우에도 사용될 수 있지만, 악성코드에서는 악의적인 목적으로 이러한 Proxy DLL 을 사용할 수 도 있겠습니다.

    'kb' 카테고리의 다른 글

    인케이스(EnCase) 에서 파일명이 한 자리인 파일들 확인하기  (0) 2012.05.01
    PDF 취약점 분석  (0) 2011.12.27
    Diffie-Hellman Key Exchange Protocol  (0) 2011.04.04
    Birthday Attack  (0) 2011.04.04
    HASH 의 세가지 성질  (0) 2011.04.03
Designed by Tistory.