리버싱/잡지식

정적분석 : PE파일 구조, 스택, 힙

Goblebin 2022. 3. 24. 23:55
반응형

https://learn.dreamhack.io/209#1

 

로그인 | Dreamhack

 

dreamhack.io

공부는 이곳에서 했다. 이미 알고 있는 지식도 같이 정리했다.

 

전체적인 틀

 

PE HEADER와 PE BODY(SECTION)으로 구분되는데 세부적으로 살펴보면

 

PE HEADER

PE HEADER -> IMAGE_DOS_HEADER
                    MS-DOS Stub Program
                    IMAGE_NT_HEADERS
SECTION HEADER -> .text .data .rdata등 섹션에 대한 정보가 들어있다.

PE BODY

SECTION -> .text .data .rdata등 여러개의 섹션이있다. SECTION과 SECTION HEADER의 섹션의 개수는 같아야 한다.

SECTION에 세부적으로 알아보자.

.text setion

실행코드가 들어가는 부분이다. x64dbg로 F8을 눌러가며 실행시키는 부분이 아마 .text section?

 

읽기 권한 정적분석을 통해 각 섹션마다 권한을 확인하는 방법도 알아보자. 이전에 공부한 것 같지만 기억이 안난다.

 

 

 

.data section

프로그램이 컴파일 될 때 미리 생성해둔 전역변수가 들어간다.

아마 지역 변수도 이곳에서 생성되고 사라질 것으로 추정된다. 내일 확인해보자.

지역 변수는 스택에 저장된다.

 

읽기/쓰기 권한

 

 

 

.rdata section

프로그램이 컴파일 될 때 미리 생성해둔 전역상수가 들어간다.

예를 들면 C언어에서 #define으로 정의된 변수나

const int a = 100; <- const로 선언되면 a의 값은 고정되므로 전역상수이다.

그리고 char *a = "abcd"; <- 이것또한 전역상수가 된다. a가 상수 문자열로 취급됨.

 

이전에는 .idata section에 DLL함수나 외부 함수들이 저장되었지만 현재는 .rdata section에 저장된다.

 

읽기 권한

 

 

.bss section

 

 

.edata

 

 

.idata section

 

 

.rsrc section


스택

윈도우즈의 프로세스는 각 쓰레드마다 스택을 가지고 있다고 한다. <- 이 말 이해 잘 안 됨. 쓰레드에 대해 알아보자.

스택은 지역변수나 리턴할 함수의 주소를 주로 저장한다.

x64dbg로 리버싱을 하면서 자주 보았는데 프로그램을 실행하면서 함수를 만나면 스택프레임을 형성할 때 스택은 아래로 자란다. 즉 낮은 주소로 확장된다. 그리고 함수 내에서 변수를 선언할 때마다 RSP는 증가한다.

 

읽기/쓰기 권한

 

 

 

동적으로 할당된 변수로부터 데이터를 받는다고만 알고 있었다.

용도가 다양하다고 한다. 모든 종류의 데이터가 저장될 수도 있다.

비교적 스택보다 큰 데이터를 저장할 수 있다. 

실행 중 동적으로 할당된 데이터를 저장한다. malloc(), calloc() 등

전역적으로 접근이 가능하다.

힙이 사용되는 걸 본 적이 없어서 머리 속에 잘 정리가 안 된다.

 

읽기/쓰기 권한 상황에 따라 실행 권한도 가짐.

반응형