Tiny Bunny

동아리/팀 스터디

[8기 기초] 리버싱 팀 05

bento 2023. 11. 10. 23:36

NT header

typedef struct _IMAGE_NT_HEADERS {
  DWORD                   Signature; //PE
  IMAGE_FILE_HEADER       FileHeader;
  IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

Signature → 50450000

  • FileHeader
typedef struct _IMAGE_FILE_HEADER {
  WORD  Machine;
  WORD  NumberOfSections;
  DWORD TimeDateStamp;
  DWORD PointerToSymbolTable;
  DWORD NumberOfSymbols;
  WORD  SizeOfOptionalHeader;
  WORD  Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

주요 4가지

1. Machine: cpu 호환칩의 고유한 번호(값)를 저장

Machine값 → 14C (리틀엔디안방식) → 32비트 intel x86

 

2. NumberOfSections: 코드, 데이터, 리소스 등이 각 섹션에 나뉘어 저장되는데, 그 섹션의 개수를 나타냄 → 값이 반드시 0보다 커야하고, 실제 섹션의 개수와 다르면 에러가 발생

NumberOfSections값 → 0005(리틀엔디안방식) → 5개의 섹션

 

3. SizeOfOptionalHeader: IMAGE_OPTIONAL_HEADER32의 크기를 나타냄

SizeOfOptionalHeader의 값 → 00E0(리틀엔디안방식)

 

4. Characteristics: 파일의 속성 명시 (실행 가능한 형태, DLL 파일 등 의 정보를 저장) → bit OR 형식으로 조합으로 표기

Characteristics값 → 010E(리틀엔디안방식)

Characteristics값 → 18E8(리틀엔디안방식)

 

  • Optional Header
typedef struct _IMAGE_OPTIONAL_HEADER {
  WORD                 Magic;
  BYTE                 MajorLinkerVersion;
  BYTE                 MinorLinkerVersion;
  DWORD                SizeOfCode;
  DWORD                SizeOfInitializedData;
  DWORD                SizeOfUninitializedData;
  DWORD                AddressOfEntryPoint;
  DWORD                BaseOfCode;
  DWORD                BaseOfData;
  DWORD                ImageBase;
  DWORD                SectionAlignment;
  DWORD                FileAlignment;
  WORD                 MajorOperatingSystemVersion;
  WORD                 MinorOperatingSystemVersion;
  WORD                 MajorImageVersion;
  WORD                 MinorImageVersion;
  WORD                 MajorSubsystemVersion;
  WORD                 MinorSubsystemVersion;
  DWORD                Win32VersionValue;
  DWORD                SizeOfImage;
  DWORD                SizeOfHeaders;
  DWORD                CheckSum;
  WORD                 Subsystem;
  WORD                 DllCharacteristics;
  DWORD                SizeOfStackReserve;
  DWORD                SizeOfStackCommit;
  DWORD                SizeOfHeapReserve;
  DWORD                SizeOfHeapCommit;
  DWORD                LoaderFlags;
  DWORD                NumberOfRvaAndSizes;
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

주요 10가지

 

1. Magic: 32bit의 경우 10B, 64bit의 경우 20B

2. AddressOfEntryPoint: EP의 RVA값

3. ImageBase: PE 파일이 로드되는 시작 주소, EIP = ImageBase + AddressOfEntryPoint

4. SectionAlignment: 메모리에서 섹션의 최소 단위

5. FileAlignment: 파일에서 섹션의 최소 단위

6. SizeOfImage: 가상 메모리에서 PE Image가 차지하는 크기

7. SizeOfHeaders: PE header의 전체 크기

8. Subsystem: 실행 파일인지 구별 (.sys / .dll / .exe)

9. NumberOfRvaAndSizes: DataDirectory의 배열의 개수

10. DataDirectory: _IMAGE_OPTIONAL_HEADER 구조체의 배열

DataDirectory[0] = EXPORT Directory 
DataDirecotry[1] = IMPORT Directory 
DataDirectory[2] = RESOURCE Directory 
DataDirectory[3] = EXCEPTION Directory
DataDirectory[4]=  SECURITY Directory
DataDirectory[5] = BASERELOC Directory
DataDirectory[6] = DEBUG Directory
DataDirectory[7] = COPYRIGHT Directory
DataDirectory[8] = GLOBALPTR Directory
DataDirectory[9] = TLS Directory
DataDirectory[A] = LOAD_CONFIG Directory
DataDirectory[B] = BOUND_IMPORT Directory
DataDirectory[C] = IAT Directory
DataDirectory[D] = DELAY_IMPORT Direectory
DataDirectory[E] = COM_DESCRIPTOR Directory
DataDirectory[F] = Reserved Directory

CodeEngn


실행시키면 해당 창이 뜬다

아무 문자나 넣으면 not correct 창이 뜬다

  • GetVolumeInformationA 함수 → 드라이브 정보를 검색

https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationa

  • lstracat 함수 → 문자열 합치기

이름을 CodeEngn으로 변경해주면

GetVolumeInformationA 이후 40225C에 CodeEngn이 들어간 것을 볼 수 있고

4562-ABEX 와 합쳐진다

이후 연산을 통해 EqfgEngn4562-ABEX로 바뀌고

L2C-5781이 EqfgEngn4562-ABEX와 합쳐져 시리얼 넘버는 L2C-5781EqfgEngn4562-ABEX이 된다

구하는 값은 EqfgEngn

728x90

'동아리 > 팀 스터디' 카테고리의 다른 글

[9기 심화] 웹 취약점 분석 01  (0) 2024.03.11
[8기 기초] 리버싱 팀 06  (0) 2023.11.10
[8기 기초] 리버싱 팀 04  (0) 2023.10.14
[8기 기초] 리버싱 팀 03  (0) 2023.10.11
[8기 기초] 리버싱 팀 02  (0) 2023.09.29