kj0on

[Techniques] PE 섹션 추가 (로더 관용성 활용) 본문

Reversing/Techniques

[Techniques] PE 섹션 추가 (로더 관용성 활용)

kj0on 2025. 7. 9. 13:50
목차 접기

0. 로더 관용성

 

윈도우 로더는 모든 필드를 엄격히 검증하지 않기 때문에 일부 스펙을 벗어나더라도 실행에 지장이 없는 경우가 있다. 이러한 특성을 이용하면 표준 권장사항을 지키지 않아도 섹션을 추가할 수 있다.


1. IMAGE_SECTION_HEADER

 

1-1. Name[8]

[이미지1] Name[8]

Name[8] 멤버는 섹션을 사람이 식별할 수 있도록 돕는 레이블 역할을 하며 윈도우로더가 해당 값을 해석하거나 검사하지는 않는다. 따라서 이름 자체는 임의의 값으로 설정해도 무방하며 단지 8바이트 크기만 충족하면 된다. 또한 NULL로 종료하지 않아도 무방하다.


1-2. Misc.VirtualSize

[이미지2] Misc.VirtualSize

Misc.VirtualSize 멤버는 섹션이 메모리에서 실제로 점유할 크기를 나타내지만 이 값이 0x0으로 설정되거나 SizeOfRawData보다 작더라도 정상적으로 동작한다. 값이 너무 작게 설정된 경우 윈도우로더가 자동으로 SizeOfRawData의 값을 대신 사용한다. 또한 이 값은 반드시 SectionAlignment 단위로 정렬되어 있을 필요도 없다.


1-3. VirtualAddress

[이미지3] VirtualAddress

VirtualAddress에는 로더 관용성이 없다. 자동으로 보정해 주지 않기 때문에 반드시 스펙대로 SectionAlignment 단위로 정렬해 주고 전체 섹션 레이아웃을 고려해서 값을 설정해야 한다.


1-4. SizeOfRawData

[이미지4] SizeOfRawData

SizeOfRawData는 FileAlignment로 정렬되어 있을 필요가 없다. 윈도우로더는 이 길이만큼만 디스크에서 읽어오기 때문에 이 값이 파일을 벗어나지 않으면 실행에는 영향을 주지 않는다. 다만 다음 섹션과 겹치거나 주요 섹션의 값을 작게 설정하면 프로그램 오동작으로 이어질 수 있다.


1-5. PointerToRawData

[이미지5] PointerToRawData

PointerToRawData는 FileAlignment로 정렬되어 있을 필요가 없다. 또한 이 값은 윈도우로더에 의해 FileAlignment 단위를 적용해 자동으로 라운드 다운 된다. 따라서 0x2605로 설정하면 메모리에 로드될 때 0x2600 부터 파일에서 섹션을 읽게된다.


1-6. COFF

[이미지6] COFF

PointerToRelocations, PointerToLinenumbers, NumberOfRelocations, NumberOfLinenumbers 멤버는 PE 파일에서 사용되지 않는다. 따라서 아무런 값을 입력해도 실행에 영향을 주지 않는다.


1-7. Characteristics

[이미지7] Characteristics

Characteristics는 섹션의 실제 페이지 권한을 결정하므로 필요한 최소 권한(읽기/쓰기/실행)을 명확히 지정해 두는 편이 안전하다.


2. Section

[이미지8] Section

이후 섹션을 추가해준다. 파일의 끝은 FileAlignment 단위가 아니여도 된다.


3. IMAGE_OPTIONAL_HEADER

[이미지9] IMAGE_OPTIONAL_HEADER

IMAGE_OPTIONAL_HEADER에서 로더 처리에 관한 설정은 필수적이다. 이 값을 수정해 주지 않으면 오류가 발생하거나 추가된 섹션이 무시된다.


4. 실행

[이미지10] Hello World!

권장사항에 맞지않게 섹션을 추가해도 정상적으로 프로그램이 실행된다.

 

[이미지11] Process Hacker 2

PointerToRawData를 0x2605로 설정해도 0x2600부터 값을 읽어온다는 것을 알 수 있다. 오프셋이 0x2000인 이유는 권한이 같아서 .rsrc에 병합되었기 때문이다.


 

'Reversing > Techniques' 카테고리의 다른 글

[Techniques] PE 섹션 추가 (권장사항 준수)  (1) 2025.07.08