2018. 4. 10. 00:19ㆍ악성코드 분석
EXE나 DLL파일 실행시 개발자가 만든 코드가 실행되기 전에 PE의 정보부터 읽어와서 바이너리를 메모리에 올리기 위한 각종 데이터를 설정하는 작업을 한다.
PE는 파일이 실행되기 위한 정보가 기록된 것
PE 구조 ( 32bit 환경 )
[ IMAGE_DOS_HEADER ]
e_magic - 현재 파일이 PE파일인지 체크한다 ( * MZ헤더를 통해 MS-DOS의 시작을 알린다 )
e_lfanew - IMAGE_NT_HEADER 구조체의 위치를 가리킨다
[ IMAGE_NT_HEADER ]
SIGNATURE ( 변수 ) - PE\0\0
IMAGE_FILE_HEADER ( 구조체 )
IMAGE_OPTIONAL_HEADER ( 구조체 )
[ IMAGE_FILE_HEDAER ]
* Machine (2byte) : 어떤 CPU에서 이 파일이 실행될 수 있는지를 알려준다 ( 데스크톱이나 노트북은 별로 눈여겨볼 필요 없다 )
* NumberOfSection (2byte) : 보통 .text , .rdata, .data, .rsrc 4개의 섹션의 개수를 가리키지만 패킹이나 프로텍팅에 의해서 증가할 수 있다.
* TimeDateStamp (4byte) : obj파일이 컴파일러를 통해 exe파일로 생성한 시간 ( 델파이 => 항상 1992년 )
* SizeOfOptionalHeader (2byte) : IMAGE_OPTIONAL_HEADER 구조체 크기
* Characteristics (2byte) : 현재 파일이 DLL인지 EXE인지 구분하는 용도
[ IMAGE_OPTIONAL_HEADER ]
* Magic (2byte) : 32bit => 0x10B , 64bit => 0x20B
* Major&Minor LinkerVersion : 1byte씩 어떤 버전으로 컴파일 되어졌는지
* SizeOfCode (4byte) : 코드 양의 전체 크기, 코드 섹션의 무결성 검사수행시 사용
* AddressOfEntryPoint (4byte) : 메모리에서 실제 파일이 실행되는 시작 지점
* BaseOfCode (4byte) : 실제 코드가 실행되는 번지라고 할 수 있다.
ImageBase + BaseOfCode = 코드영역이 시작되는 베이스 주소
* ImageBase (4byte)
- 해당 파일이실행될 경우, 실제 가상메모리에 올라가는 번지, 보통 exe파일의 경우 0x40000000이 된다.
- PE파일이 실제 메모리의 번지에 매핑되는 번지주소
ImageBase + AddressOfEntryPoint = OllyDBG 등 디버거를 통해 파일을 실행했을 때 위치가 첫 실행지점이 된다
ImageBase + BaseOfCode = 코드 영역이 시작되는 베이스 주소
* Section&File Alignment (각 4byte) : 섹션 정렬에 대한 최소단위 ( .text ~ .rdata 사이의 간격지정 )
* SizeOfImage ( 4byte )
- EXE/DLL이 메모리에 로딩됐을 때의 전체크기
- 로더가 PE를 메모리에 올릴 때해당 필드를 보고 이 공간만큼 할당
* SizeOfHeader ( 4byte ) : PE헤더의 크기를 알려주는 필드
* Subsystem : 이 프로그램이 GUI인지 console인지 알려주는 역할 ( 0x2 - windows GUI , 0x3 : console )
* DataDirectory 구조체 ( VirtualAddress , Size 필드를 포함 )
export&import*resource directory, IAT 등 각각의 가상주소와 크기를 알 수 있다
( IAT : Import Address Table )
* 32bit환경에서의 DataDirectory
각종 DLL파일들의 이름들이 무작위 나열되어 있다.
데이터들은 IMPORT Name Table에서 정리된다
DLL파일이름들이 정리되어 있음
DLL파일들과 각 데이터들의 주소가 매치되어 있음
[ IMAGE_SECTION_HEADER ]
각 섹션에 대한 이름, 시작주소와 사이즈 등의 정보를 관리하는 구조체
'악성코드 분석' 카테고리의 다른 글
FSG 수동언패킹 [ Lena21 ] (0) | 2018.04.14 |
---|---|
Upack 수동언패킹 [ Lena21 ] (0) | 2018.04.14 |
UPX 수동언패킹 [ Lena 21 ] (0) | 2018.04.10 |
Packing & Unpacking (0) | 2018.04.10 |
어셈블리어 정리 ( cmp & TEST & ZF & CF ) (0) | 2018.04.04 |