동적 API에 뿐만 아니라 알려진 구조체일 경우에도 구조체 활용이 가능하다.

분석을 조금이라도 해본 사람이라면 바로 알 것이다. 바로 PE파일을 체크하는 것이다. 맨 처음 MZ부터 말이다. 그렇다면 word_18000BED0 자체가 PE구조체일 확률이 높다. 그럼 PE 구조체를 복사해서 구조체를 IDA에 만든다면 훨씬 편하게 코드를 읽을 수 있을 것이다.
https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_file_header
IMAGE_FILE_HEADER (winnt.h) - Win32 apps
Represents the COFF header format.
learn.microsoft.com
https://www.nirsoft.net/kernel_struct/vista/IMAGE_DOS_HEADER.html
struct IMAGE_DOS_HEADER
typedef struct _IMAGE_DOS_HEADER { WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp; WORD e_csum; WORD e_ip; WORD e_cs; WORD e_lfarlc; WORD e_ovno; WORD e_res[4]; WORD e_oemid; WORD e
www.nirsoft.net
MSDN을 보면 쉽게 구조체 형태로 써져 있는 걸 볼 수 있다. 이걸 약간만 바꿔주면 아래와 같이 구조체 형태로 바꾼다.
struct _IMAGE_DOS_HEADER
{
WORD e_magic;
WORD e_cblp;
WORD e_cp;
WORD e_crlc;
WORD e_cparhdr;
WORD e_minalloc;
WORD e_maxalloc;
WORD e_ss;
WORD e_sp;
WORD e_csum;
WORD e_ip;
WORD e_cs;
WORD e_lfarlc;
WORD e_ovno;
WORD e_res[4];
WORD e_oemid;
WORD e_oeminfo;
WORD e_res2[10];
LONG e_lfanew;
};
오리지널 형태를 위와 같은 IDA 구조체로 적용하기 위해 일부 수정한다.
Shife + F1으로 로컬 타입탭을 열어 준 후,
Insert로 구조체를 넣어보자.
그럴듯하게 들어갔는데 'Structures' 탭에는 보이지 않는다.
더블 클릭해서 적용시켜 보자.

구조체 탭에서 확인가능하다.

이제 이걸 그대로 적용해 주면 된다.
아까 확인했던 word_18000BED0에서 Y를 눌러 구조체를 적용시켜 보자.
__int16 word_18000BED0[30] // 오리지날
_IMAGE_DOS_HEADER word_18000BED0 // 변경 후
변경된 형태를 확인할 수 있다.

밑에 다른 PE 헤더들도 적용시켜 보자.
https://learn.microsoft.com/ko-kr/windows/win32/api/winnt/ns-winnt-image_nt_headers32
IMAGE_NT_HEADERS32(winnt.h) - Win32 apps
PE 헤더 형식을 나타냅니다. (32비트)
learn.microsoft.com
DOS헤더 다음 NT 헤더 구조체도 만들자.
char *v5 // 오리지날
_IMAGE_NT_HEADERS *v5 // 변경 후
이렇게 적용하면 엄청나게 다양한 정보를 한눈에 볼 수가 있다.

구조체를 적용한 후 PE파일을 빠르게 분석하는데 많은 도움을 준다.
'분석 TIP > 정적분석' 카테고리의 다른 글
| JavaScript 난독화 분석 (0) | 2025.04.23 |
|---|---|
| Autoit 샘플 분석 (0) | 2025.04.21 |
| 동적API 구조체로 IDA 함수명 매핑하기 (0) | 2025.04.19 |
| Visual Basic 6.0 샘플 분석 (0) | 2025.04.18 |
| PDF Deflate JavaScript 분석 (0) | 2025.04.17 |