리버싱/리버싱 입문

리버싱 입문 1장 4. PE 파일

상세 2021. 3. 7. 20:56

컴파일러 : 고급 언어로 개발된 프로그램을 컴퓨터가 이해할수 있는 기계어로 번역해 주는 것 

쉽게 이야기하면 파*고처럼  고급 언어 -> 기계어와 같은 번역기이다. (물론 번역기 역할만 하는건 아님)

 

번역된 기계어가 파일(EXE, DLL)로 만들어지는데 이게 PE파일이다.

 

PE 파일

헤더와 보디로 구성된다.

헤더에는 동작에 대한 규칙이 담겨있고 보디에는 기계어들이 저장되어 있다.

 

구성은 PE 헤더, 섹션 헤더, 섹션 데이터로 구성된다.

 

PE 헤더는 모든 윈도우가 공통으로 가지고 있다. 

섹션 헤더는 PE파일마다 다 다르다. 1 PE파일에는 최소1 섹션헤더가 있다. 섹션 데이터도 마찬가지이다.

 

주소 지정 방법과 용어

pFile : PE 파일 내부에서의 오프셋 

물리적으로 하드디스크에 저장되었을때 의미 있는 값

 

RVA : 상대 위치로 기준값에서 얼마나 떨어져 있는지를 나타내냄

대충 수직선상에서 0으로부터 떨어져 있는 거리인 절대값이라고 생각하자 (맞나?)

 

VA : 가상 메모리상에 저장되는 실제 주소 

책에도 대충 이게 무슨 소리인지 말로만 알게 설명해두었는데 

c언어로 생각하면 int a = 0; int* p = &a; 에서 p의 값 같은거라고 생각된다.

 

IAT

실행 파일 안에 어떤 라이브러리의 어떤 함수를 가져다 쓰는지 기록해놓은 정보이다.

코드에서 라이브러리를 참조하는 부분은 IAT 내부에 있는 함수 주소를 이용한다.

 

대충 정의는 예를 들어 청소 당번이 빗자루와 대걸레를 빌려서 청소를 해야 하는데

이 물품들을 A청소용구함에서 빌려와야 할지 B청소용구함에서 빌려야 할지 기록해놓은 거랑 비슷하다.