: 프로그램이 어떤 라이브러리의 어떤 함수를 사용하고 있는 지 기술한 테이블
: 동적 연결 라이브러리
: DOS에서 Windows OS로 넘어오며 Multi-Tasking을 지원하게 되어 이전에는 실행 파일에 삽입돼있던 함수의 Binary Code를 별도의 파일인 DLL로 구성하여 필요할 때마다 불러 쓸 필요성이 생김
: 한 번 로딩된 DLL의 code, resource는 Memory Mapping 기술로 여러 프로세스에서 공유, 라이브러리 업데이트 시 해당 DLL 파일만 교체
: 프로그램에서 사용되는 순간 로딩 후 사용이 끝나면 메모리에서 해제
: 프로그램 시작 시 같이 로딩되어 종료 시 메모리에서 해제
* 이후의 내용은 DLL Injection 공부 시 순차적인 이해를 위해 추후에 포스팅 예정
: Implicit Linking에 대한 매커니즘 제공
: 함수를 직접 호출하지 않고 주소에 있는 값을 가져와서 호출
∵ OS, 언어, Service Pack에 따라 dll의 버전이 달라지고 함수 주소가 달라짐
→ 모든 환경에서의 실행을 보장하기 위해서는 해당 API 함수의 실제 주소가 저장될 위치를 준비하고 call dword ptr ds:[010010CC]의 명령어를 적어 둠
∵ DLL Relocation : 다른 DLL 파일이 해당 ImageBase를 사용 중일 경우
: 어떤 라이브러리를 import하고 있는 지 명시
: 보통 여러 개의 라이브러리를 import하므로 라이브러리 개수만큼 배열 형식으로 구조체 존재
: 라이브러리(다른 프로그램에서 불러 쓸 수 있도록 관련 함수들을 모아 놓은 파일_DLL/SYS) 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 매커니즘, 해당 라이브러리에서 export하는 함수의 시작 주소를 구할 수 있게 함
: DataDirectory[0]의 VA가 export 구조체 배열의 시작 주소
: 라이브러리에서 함수 주소를 얻는 API, EAT를 참조해 원하는 API 주소 구함
010 고급 리버싱 (0) | 2020.09.25 |
---|---|
009 Packer (0) | 2020.09.20 |
007 PE File Format (0) | 2020.09.20 |
006 Calling Convention (0) | 2020.09.19 |
005 Stack (0) | 2020.09.19 |