zj3t

email: euntaejang@gmail.com

Latest Posts

IAT 입력 과정(실습)

By 오전 2:14 ,

IMAGE_IMPORT_DESCRIPTOR 구조체의 위치(PE 바디에 위치)

>IMAGE_OPTIONAL_HEADER32.DataDirectory[1].Virtual Address =IMAGE_IMPORT_DESCRIPTOR 구조체 배열의 시작 주소


RVA가 7604 이다. 이는 .text섹션에 포함
RAW를 구하는 공식: RAW-Pointer to Raw Data = RVA - Virtual Address
text섹션 헤더의 Pointer to Raw Data=400
                     Virtual Address =1000

따라서.

RAW=7604-1000+400=6A04

어떻게 text 섹션에 포함된 줄 알았냐하면 text섹션을 봤을 떄 RVA가 1000이고 Virtual Size가 7748이라 7604가 이 안에 포함되기 때문입니다.


00007990: OriginalFirstThunk
FFFFFFFF:  TimeDateStamp
FFFFFFFF:  ForwarderChain
00007AAC: Name
000012C4: FirstThunk


-Name(임포트 함수가 소속된 라이브러리 파일의 이름 문자열 포인터)
RVA:7AAC RAW: ????

7AAC 또한 text섹션에 포함되어 있으므로 아까와 공식은 같다.

RAW=7AAC-1000+400=6EAC

따라서 RAW:6EAC이다.


comdlg.dll IID구조체의 첫번째 원소의 라이브러리 이름이다. 그 밑 두번째 원소의 라이브러리 이름도 이와 같은 방법으로 찾을 수 있다.

-OriginalFirstThunk(INT)

RVA:7990 RWA:6D90


저 빨간 박스가 INT이고, 각은 박스하나하나가 저번포스팅에서 언급한 IMAGE_IMPORT_BY_NAME구조체의 시작 주소입니다. 예를 들어 저기서 00007A7A를 보면 

RVA:7A7A RAW:6E7A


임포트하는 API의 이름을 볼 수있었습니다.

하나 더 보자면

RVA:7A5E RAW:6E5E

역시 임포트하는 API의 이름을 볼 수 있었습니다.

-FirstThunk

RVA:12C4 RAW:6C4


저 부분이 comdig32.dll 라이브러리에 해당하는 IAT 배열 영역이다. INT와 마찬가지로 구조체 배열로 되어있어 NULL로 끝난다.

지금 보이는 이 763249006, 763185CE 등은 의미 없는 값으로, 프로그램이 메모리에 로딩될 때 이 값은 정확한 주소 값(API의 주솟값 INT의 값)으로 대체됩니다.


ollydbg로 확인할 수 있다.


-출처: 리버싱핵심원리
















You Might Also Like

0 개의 댓글