티스토리 뷰

반응형

DLL ?

 Windows에서 사용하는 동적 라이브러리파일이다. ( Linux계열에서 so파일정도..? )

 일단 한번 로드된 DLL의 코드 및 리소스는 Memory Mapping기술로 여러 Process에서 다같이 쓰자 !

 

  1. 프로그램이 사용되는 순간 Loading, 사용이 끝나면 UnLoading - Explict Linking

  2. 프로그램이 실행되는 순간 Loading, 프로그램이 종료되면 UnLoading - Implict Linking

              ( 이제 나올 IAT는 2번 항목에 해당하는 매커니즘을 제공한다. )

 

 

IAT & EAT ( Import Address Table, Export Address Table )

한다리 건너서 호출된다. 예를 들어 "Call [0x101104]"을 하게되면 0x7C0107F0이 최종적으로 호출된다.

왜 이렇게 한다리 건너서 호출하냐면 DLL 버전 혹은 환경에 따라서 또는 ImageBase가 이미 사용중이면 Relocation에 의해서 Load되는 실제 주소가 변경될 수 있어 0x7C0107F0에 해당 API가 존재하지 않을 수 있다.

 

때문에 0x101104이라는 고정주소를 적어두고 해당 PE파일이 로드되는 과정에서 IAT를 채우고, 0x101104라는 주소가 실제 코드에서 사용되면 IAT를 통해서 참조하게된다.

 

 

[ IMAGE_IMPORT_DESCRIPTOR ]

 어떤 Library로 Import하고 있는지에 대한 정보를 담고있는 구조체이다.

 하나의 PE파일은 여러개의 Library를 Import하기 때문에 배열로 처리된다.

                                ( 마지막은 NULL을 가리킨다. )

 

 사용되는 멤버

  - Import Name Table RVA (INT) : API의 이름 배열

  - Name RVA : DLL이름이 저장된 주소

  - Import Address Table RVA (IAT)

 

 PE로더가 IAT에 함수주소를 입력하는 과정.
  - IMAGE_IMPORT_DESCRIPTOR를 읽어 Name을 통해 이름을 얻는다. (kernel32.dll)
  - LoadLibrary("kernel32.dll")을 통해 해당 Library를 로딩한다.
  - IID의 INT의 주소를 얻는다.
  - INT에서 배열의 값을 하나씩 읽어서 IMAGE_IMPORT_BY_NAME주소를 얻는다.
  - IMAGE_IMPORT_BY_NAME의 Hint, Name 항목을 통해 해당 함수의 주소를 얻는다.
    GetProcAddress("GetCurrentThreadId");
  - IID의 IAT RVA를 읽어서 얻는다.
  - 해당 IAT 배열 인덱스에 구한 주소를 입력한다.
  - INT가 끝날때까지 반복하여 IAT를 완성한다.

 

[ IMAGE_EXPORT_DIRECTORY ]

 해당 PE파일의 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 매커니즘

 IMAGE_IMPORT_DESCRIPTOR와 다르게 단 한개만 존재한다는 것을 기억하자.

 

 사용되는 멤버

  - NumberOfFunctions

  - NumberOfNames

  - AddressOfFunctions

  - AddressOfNames

  - AddressOfNameOrdinals : 고유번호라고 한다. Address에서 해당 함수의 Index를 구하고,

                                        그 Index를 AddressOfNameOrdinals에 넣으면 고유번호가 나온다.

                                        이 고유번호를 AddressOfFunctions에 적용시 함수의 주소가 나온다.

 

 

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함