2. Reversing (리버싱)/2) 개념 정리

[2025.04.05] 리버싱난다_3주차 활동

diary7766 2025. 4. 10. 19:03

11 DOS HEADER & DOS STUB

-dos header 달리 dos stub은 옵션이다

ms dos에서만 실행되는 코드 windows os에서는 실행안함.

 

pe NT HEADER의 시작점

 

(첨부그림 빨간 동그라미 위에서 아래로 순서대로)

DOS HEADER

DOS STUB

NT HEADER

 

12 NT HEADER

채트 엔진

mz= 시작부분

 

앤티헤더란?

image_nt_headers file headers

image_file_header

<WORD MACHINE, WORD NUMBEROFSECTION, WORD SIZEOFOPTIONALHEADER, WORD CHARACTERISTICS)이 네가지가 file header에 있고 file headerimage_nt_headers에 멤버고 image_nt_headernt header에 구성체다.

 

1. WORD MACHINE

cpu 호환칩의 고유한 번호를 저장

4c 01

014c

 

2. WORD NUMBEROFSECTION

pe파일은 코드,데이터,리소스 등의 각각 부분에 나뉘어 저장되는데

numberofsections는 그 pe파일 섹션의 개수를 알려준다.

이값은 무조건 0보다 커야한다.

-섹션의 개수와 실제 섹션이 다르면 실행이 안된다.

 

3. WORD SIZEOFOPTIONALHEADER

image_optional_header3264비트일 때 값이 달라진다.

그래서 mage_optional_header32의 크기를 명시한다.

 

4. WORD CHARACTERISTICS

파일 속성을 나타내는 값이다

파일 속성- 실행 가능한 형태 혹은 dll파일인지 정보를 저장한다(bit or)

 

**charateristics 이 값이 없는 파일이 존재한다.

(obj res dll)

 

13 NT HEADER

1. magic

image_optional_header32 10b

image_optional_header64 20b

 

2. addressofentrypoint

ep의 상대주소(rva)값을 가지고 있다

프로그램의 최초로 실행되는 코드에 시작주소로 매우 중요하다

 

3. imagebase

프로세스의 가상 메모리는 0-ffffff범위이다(32bit)

ib이렇게 광활한 메모리에서 pe 파일이 로드되는 시작 주소를 나타낸다<---imagebase

pe로더 pe파일을 실행하기 위해 프로세스를 생성하고 파일을 메모리에 로드한후 elp(rip)reg 값을 imadebase+addressofentrypoint point 값으로 세팅한다.

 

 

4. sectionalignment & filealigment

pe파일의 바디 부분은 섹션으로 나뉜다.

파일에서 섹션의 최소단위를 나타내는 것이 filealignment이고 메모리에서 섹션의 최소 단위를 나타내는 것이 sectionalignment이다.

 

5. sizeofimage

pe파일이 메모리 로딩되었을 때 가상메모리 pe image가 차지하는 크기를 나타낸다.

일반적으로 파일의 크기와 메모리의 로딩된 파일의 크기는 다르다

 

6. sizeofheader

pe파일 전체의 크기를 나타낸다

 

7. subsystem

.sys인지 dll or exe 구별한다.

 

8. numberofrvaandsizes

image_optional_header32의 마지막 멤버인 datadirectory의 배열의 크기를 나타낸다.

 

9. datadirectory

image optional header32 배열한다.

 

ep&ib 차이점

** lb는 실행파일이 로드될 때 baseaddress를 나타내는 값이다

ep는 실행파일이 시작될 때 실행되는 함수의 주소를 나타내는 값이다.

-->둘다 모두 파일의 메모리에 로딩과 관련있지만 lb는 실행파일의 기본주소를,ep는 실행파일 내의 시작 함수의 주소를 나타낸다

 

 

** 핵심 포인트

NT HEADER--->OPTIONAL HEADER-->IMAGE_OPTIONAL_HEADER

--->FILE HEADER-->IMAGE_FILE_HEADER

 

14

setion header

각 섹션의 속성을 정의한 것이 섹션헤더이다

code data rsrc 3가지로 나누어서 섹션을 저장하는 이유가 있을 것이다

프로그램 복잡함 감소

2.프로그램 안정성

따라서 code data rsrc 마다 각각의 섹션별로 권한이 주어져 있다.

code ; 실행, 읽기 권한

data 비실행 읽기 권한

rsrc 비실행 읽기 권한

 

-->따라서-code data rsrc을 관리해줌

 

1. DWORD VIRTUALSIZE

메모리에서 섹션이 차지하는 크기

 

2. DWORD VIRTUALADDRESS

메모리에서 섹션의 시작주소

VA= 절대주소가 아니다

 

3. DWORD SIZEOFRAWDATA

파일에서 섹션이 차지하는 크기

 

4. DWORD POINTERTORAWDATA

파일에서 섹션의 시작주소

 

5. DWORD CHARACTERISTICS

섹션의 속성을 BIT OR