일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- node.js
- ab 벤치마크
- Apache Benchmark
- node.js ec2 ip접속
- sns 샌드박스 종료
- filezilla
- 스트레스툴
- node.js ec2
- sms 휴대폰 인증
- EC2
- SMS sandbox
- npm 글로벌 설치 삭제 했는데 실행됨
- aws sdk v3
- COALESCE함수
- sms 샌드박스
- 자바
- Primary key(기본 키)
- sql 데이터 추가
- node.js ec2 배포
- Apache ab
- Foreign Key (외래 키)
- 이것이 자바다
- HTML
- AWS SDK for JavaScript v3
- npm 전역 설치 삭제
- Java
- HTML 태그
- sql 데이터 삽입
- PostgreSQL CAST
- html tag
- Today
- Total
망각에 재주 있는 나를 위해 기록하는 곳.
[리버싱] 섹션 헤더, 섹션 데이터 본문
섹션 헤더
섹션 헤더에는 로더(Loader)가 섹션 데이터를 메모리로 로딩하고 속성을 설정하는데 필요한 정보가 저장되어 있다. 각각의 섹션 헤더는 IMAGE_SECTION_HEADER 구조체 형식으로 데이터를 저장하고 있다. PE 파일에는 다양한 섹션 데이터가 포함될 수 있으며, 각각의 섹션 데이터에 해당하는 섹션 헤더가 존재한다.
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union{
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
// IMAGE_SECTION_HEADER (winnt.h)
이름에서도 기능을 유추할 수 있듯이 섹션 헤더에는 섹션 데이터를 사용하기 위한 기본 정보가 들어가 있다. 섹션 데이터가 물리적으로 어디에 저장되어 있고 메모리 어디에 로드되며 섹션 데이터의 특징이 무엇인지 기록되어 있다. 시스템은 이 정보를 이용해서 섹션 데이터에 저장된 정보에 접근할 수 있다.
abexcm1.exe 파일에는 모두 5개의 섹션 헤더 정보가 존재한다. 이 헤더 정보는 아래에 나오는 섹션 데이터와 일대일로 매칭할 수 있다. 모든 PE 파일에서 섹션 헤더와 섹션 데이터가 정확하게 일치하는 것은 아니다. PE 파일의 특성에 따라서 일부 섹션 데이터가 누락될 수도 있다.
섹션 헤더에는 다양한 성격이 있지만, 모든 섹션 헤더에는 IMAGE_SECTION_HEADER 구조체라는 동일한 형식으로 데이터가 저장되어 있다.
섹션 데이터
섹션 데이터에는 PE 파일에서 사용하는 각종 데이터들이 들어 있다. PE 헤더(섹션 헤더 포함)에 데이터에 접근하기 위한 설정 정보만 들어 있다면, 실제로 프로그램을 실행하기 위한 데이터는 섹션 데이터에 들어 있다고 생각하면 된다. PE 헤더와 달리 섹션 데이터는 일정한 구조체 형식으로 데이터를 저장하지 않고 데이터가 자유롭게 분포되어 있다. 단지, PE 헤더에서 지정한 구조체 형식으로 섹션 데이터의 특정 영역을 지정하면, 해당 영역에는 구조체 형태로 데이터가 조직화되어 저장된다.
SECTION CODE를 보면, 데이터가 일정한 형식을 가지고 있지 않고 바이너리로 저장되어 있다. 단지 시작 주소와 데이터의 크기만을 CODE 영역과 관련이 있는 섹션 헤더에서 지정하고 있다.
SECTION.idata를 살펴보면 데이터가 구조체로 조직화되어 저장된 것을 확인할 수 있다. 이 영역에 저장되는 데이터는 'IMAGE_NT_HEADERS' -> 'IMAGE_OPTIONAL_HEADERS' -> 'IMPORT Table'에서 지정하고 있다. 즉 PE 헤더에서 섹션 데이터의 각 영역에 어떤 형식의 데이터가 저장될 것인지를 지정하느냐에 따라서 저장되는 데이터의 종류가 달라진다.
'리버싱' 카테고리의 다른 글
[리버싱] 어셈블리 기초 정리 (0) | 2022.05.06 |
---|---|
[리버싱] IAT (0) | 2022.05.03 |