본문 바로가기

악성코드 분석

PE 분석

반응형

오늘은 PE 분석에 대해 알아보는 시간을 가져보도록 할게

생소한 단어들이 많이 나올 텐데 하나씩 정리해가면서 공부해보도록 하자!

 

 

1. PE는 뭔가요??

 

 

- PE (Portable Executable) file
==> 실행파일에 대한 구조를 가지고 있는 파일이야
윈도우 실행파일, 객체 코드, DLL이 PE 파일을 포맷하고 있고,
윈도우 OS 로더가 래핑(wrapping)한 실행코드를 관리하는 필수 정보를 갖고 있어

 

- wrapping --> DLL이나 API를 한 곳에 모아주는 기능을 말해

 

 

DLL이랑 API는 또 뭔가요...?? ㅜㅜ

 

 

- DLL(Dynamic Link Library) --> 동적 라이브러리, 필요할 때마다 불러오는 함수
라이브러리는 일종의 해석기 모듈이야
즉, 프로그램에서 자주 쓰이는 표준 함수나 data를 모아놓은 묶음을 뜻하지

 

 

- API(application program interface) --> 프로그램을 사용하기 위한 종합 protocol set
즉, 일종의 통신규약을 묶어놓은 것..!!

 

 

 

- PE File을 통해 알 수 있는 것


1. application 유형
2. 필요한 함수 (import함수, export함수)
3. 메모리 공간
4. resource data (program에 내장되어 있는 program )

 

 

 

 

- 정적/runtime/동적 link

보통 웬만한 함수들은 import에 들어가 있는데...
- 정적: 실행파일로 라이브러리의 모든 코드를 복사 (실행파일이 증가하겠지..??) 
- 런타임/동적: 필요할 때만 라이브러리를 연결 (인형 뽑기처럼 하나씩 가져다 쓰는 느낌..!)

 

 

동적 링크 구동방식은 프로그램이 link 된 라이브러리 함수를 호출하는 방식이기 때문에
라이브러리 내의 함수가 실행돼
그에 반해서, 정적 링크는 그 라이브러리 자체를 그냥 모두 가져오는 방식이야

 


따라서 PE 파일 헤더를 봐야 하는 이유는
로드할 모든 라이브러리와 프로그램이 사용할 함수 정보를 저장하고 있기 때문이야...!!! 

 

 

 

 

 

2. PE 분석하기

 

자, 이쯤 왔으면 우리가 직접 PE 분석을 시도해볼 때가 된 것 같지?? window xp 가상 환경에서

Dependency Walker를 실행하고 악성코드인 nuguri.exe 파일을 한번 분석해보자

깊게 분석은 하지 않고 PE 분석의 시작이 이런 거구나...!라는 것을 알아보도록 할게

 

 

왼쪽 상단에 보면 nuguri.exe 밑으로 kernel32.dll, user32.dll등 exe 파일에서 사용되는 dll들을 볼 수 있어

 

 

현재 nuguri.exe를 구성하고 있는 DLL들을 볼 수 있는데 크게 다음과 같이 나눌 수 있어


KERNEL32.DLL
USER32.DLL
GDI32.DLL
MSIMG32.DLL
WINMM.DLL

 

 

확대해서 보자...!!

 

우린 여기서 KERNEL32.DLL과 USER32.DLL을 한번 보도록 할 거야
살펴보니까 화살표로 된 DLL이 있고 그렇지 않은 DLL이 있네..? 무슨 차이일까?


화살표 = Dynamic DLL
화살표 없는 것 = STATIC DLL

 

자 그러면 KERNEL32.DLL을 클릭하고 안에 어떤 내용들이 있는지 확인해볼까??

오른쪽 상단에 GetProcAddress GetProcAddressLoadLibraryA 함수들이 들어 있어

 

KERNEL32.DLL을 들어가 보니 옆에 process들이 보이네..!
우리가 process들을 분석하기에 앞서서

먼저 DLL 별로 하는 역할들이 무엇인지 알고 가는 게 좋을 것 같아! 하나씩 살펴보자~

 

 

- KERNEL32.DLL --> 거의 대부분 파일에서 다 쓰는 DLL, 

메모리나 파일, 하드웨어 접근과 조작과 같은 핵심기능을 가진 공용 DLL이다.

 

 

- NTDLL.DLL --> 윈도우에서 가장 중요한 DLL

실행 시 NTDLL이 안나온다..?? windows 프로그램이 아닌 거야
윈도우 커널 인터페이스로 NTDLL.DLL은 일반적으로 접근 허용이 안돼

 

 

[사용자]           ||           [shell]         ||          [kernel]         ||         [OS]

 


시스템은 위와 같은 구조이기 때문에 프로그램은 실행되면 kernel을 통과해야 해

따라서 프로그램들은 kernel32.dll을 통과해서 프로그램이 실행이 되어야 정상이야

따라서 실행 파일 자체에 ntdll이 나올 경우 90%가 악성 code라고 생각하면 돼....!!
NT = New Technology


- USER32.DLL  --> 사용자의 interface와 관련된 dll

모든 사용자의 interface companent (인터페이스를 구성하는 요소들)
버튼이나 스크롤바, 사용자 동작 제어 등에 사용되는 dll이야

 

 

- ADVAPI32.DLL --> 서비스 관리자나 레지스트리 같은 추가 핵심 윈도 컴포넌트에 접근

레지스트리, 시스템 종료와 재시작, 윈도의 서비스의 시작/종료/생성, 계정 관리 등의 기능 지원

 


- GDI32.DLL --> 그래픽 보기 조작 관련 (그래픽을 지원하는 프로그램이구나...!)

 


- WSock32.dll (WS2_32.DLL) --> 윈도우 소켓, 즉, 네트워크 연결 및 관련 동작에서 사용하는 네트워킹 DLL

 


- wininet.dll --> 윈도우 프로토콜 구현 함수 (윈도우 서비스 구현(http, ntp, ftp))

 

 

 

 

 

 

다시 돌아와서 user32.dll 밑으로 gdi32.dll 밑에 kernel32.dll이 호출된 것을 볼 수 있어
어떤 함수들이 실행되는지 한번 살펴보자...!!

 

 

오른쪽 상단에 나온 함수들 중에서 중요한 핵심 함수들을 보도록 하자!



[주요 함수]


copyfile: 파일 복사


createfile: 파일 접근 (파일 생성의 의미도 있으나 접근의 의미도..!!)


deletefile: 파일 삭제


findfirstfile: 첫 번째 검색 (처음에 resource 불러오거나 찾아낼 때 사용)


findnextfile: 다음번 검색 (처음 검색에서 찾지 못했을 때 넘어가라)

findfirstfile과 findnextfile을 통해서 resource를 불러오도록 하는 방식


getcurrentproc: 파일 생성 및 접근할 때 사용 (createfile과 유사)


loadlibrary: 라이브러리 load 하는 함수


sleep: 프로그램을 잠시 멈추기


lstrcat: (문자 묶음) --> 문자 붙이기에 대한 함수, 

예를 들어 경로를 붙여오고 싶을 때 사용

(해당 디렉터리를 가져오는 문자에다가 해당 파일의 경로를 가져다 올 때 사용하는 함수)

- EX)

A = c:\windows\system32
B = sevas.exe
A B ==> 묶어..!! c:\windows\system32\sevas.exe

 


lstrcmp: 문자 비교


lstrcpy: 덮어 씌우기


lstrlen: 길이 확인하기

 

 

함수들 보면 뒤에 A, W, EX 붙는 경우가 있지? 이게 뭐냐면..!

ex) RegSetValueExA, FindResourceA, RegCreateKeyExA 등


A --> ascii

W --> wild character set

EX --> 새로 갱신 or update 시 사용

 

 



 


자 오늘은 이 정도까지 살펴보도록 하고

다음 시간에 PE view라는 PE 분석 tool을 사용해서 exe 파일을 분석해보도록 할게

한꺼번에 많은 정보가 들어가면 복잡하니까 한 번 끊고 가도록 할게...!!

 

 

반응형

'악성코드 분석' 카테고리의 다른 글

LAB1-2 (악성코드분석)  (1) 2023.01.12
PE 분석(2)  (0) 2023.01.12
악성코드란..??  (1) 2023.01.12
Key Logger 분석  (0) 2022.08.04
동적분석 (LAB 3-1)  (0) 2022.08.01