Try Attack/Malware Analysis[basic]

악성코드 분석[2]

D4tai1 2019. 8. 28.

악성코드는 패킹과 난독화 기법을 사용합니다.

 

패킹은 압축돼서 분석할 수 없도록 난독화된 것을 말합니다.

난독화는 바이너리에 대한 은폐한 것을 의미하죠.

 

패킹되고 난독화 된 코드는 적어도

LoadLibrary()와 GetProcAddress()함수를 포함해요.

이 함수들은 추가함수를 로딩해 접근할 때 사용합니다.

 


 

PE파일은

코드에 대한 정보, 애플리케이션의 유형,

필요한 라이브러리 함수, 메모리 공간 요구사항 등을

포함한 헤더로 시작합니다.

 

그러므로 악성코드 분석가에게

PE헤더는 가치있는 포장지같은 느낌이겠죠?

 


 

라이브러리 링크에 대해 볼까요?

 

import하는 함수 목록은

실행파일에서 수집할 수 있는 

유용한 정보입니다.

 

import는 실제로 다른 프로그램에 저장되어 있지만 

외부프로그램이 사용할 수 있도록 한 함수를 말합니다.

 

악성코드를 이해하기 위해서는

PE헤더의 

라이브러리 코드의 링크 형태를 아는 것이 중요하지요.

 


 

링크의 종류에는

정적링크와 동적링크와 런타임 링크가 있어요.

하나씩 알아볼까요?

 

먼저 정적링크는 

실행파일에 정적으로 라이브러리를 연결하는 방법입니다.

즉, 파일에 필요한 모든 라이브러리 코드를 복사하므로

실행파일의 크기가 증가하겠죠?

 

또한 PE헤더에서 파일에 링크코드 정보가 없으므로

정적으로 붙인 코드와 실행파일 자체 코드를 확인하기가

어렵습니다.

 

두 번째로 런타임링크는

악성코드에서 패킹이나 난독화를 할 때 주로 사용합니다.

동적링크된 프로그램과 마찬가지로

프로그램이 시작할 때가 아니고!!!

함수가 필요할 때만 라이브러리에 연결하는 방식입니다.

 

마지막으로 동적링크는

악성코드 분석가가 사용하는 방식이지요.

라이브러리를 동적으로 연결하면 호스트 운영체제는 

프로그램을 로드할 때 필요한 라이브러리를 검색합니다.

 

프로그램이 링크된 라이브러리 함수를 호출하면

라이브러리 내의 함수를 실행하지요.

 

위에서도 말했지만

PE헤더에는 로드할 모든 라이브러리와

프로그램이 사용할 모든 함수에 대한 정보를

저장하고 있기 때문이죠

 


 

추가적으로 함수에 대한 이름은

CreateWindowEx() 와 같이

함수 뒤에 Ex가 붙는 경우 

CreateWindow()함수가 버전업 된 함수라고 생각하면 된다.

그리고 이전버전과의 호환성을 위해

기존의 CreateWindow()와

업데이트 된 CreateWindowEx()를 

동시에 사용하도록 하지요.

또한 중요한 업데이트가 여러번 된 함수는

Ex가 여러번 붙을 수 있답니다.

 

그 외에도 함수명 뒤에

A가 붙거나 W가 붙는 경우가 있는데

문자열을 인자로 받는 함수의 경우들이

대체로 그렇습니다.

 

A는 ASCII 문자열이고,

W는 Wide CHARacter strings를 사용하지요.

변수선언 시에도 WCHAR 타입을 사용합니다.

 

MSDN을 찾아볼 때에는

A나 W를 빼고 검색하세요.

 


 

DLL과 EXE는 다른 프로그램과 코드가 상호작용할 수 있도록

함수를 Export합니다.

 

보통

DLL은 하나 이상의 함수를 구현하며

DLL을 import해서 재사용할 수 있는 실행파일이 

사용할 수 있도록 해당 함수를 Export하지요.

 

그리고 PE파일은 Export하는 함수의 정보를 담고있구요.

 

DLL은 EXE가 사용하는 기능을 제공하기 위해

특별히 주문제작했다고 생각해도 됩니다.

 

그러기 때문에 DLL에서는 Export 함수를

많이 찾아볼 수 있지요.

 

반대로 EXE는 다른 EXE에 기능을 제공하기 위해

만들어진 용도가 아니므로 Export가 상대적으로 드물지요.

 

쉽게말해 여러분들은 코딩하실 때 Export 함수를 사용하시나요?ㅎㅎ

 

 

'Try Attack > Malware Analysis[basic]' 카테고리의 다른 글

Anti-VM 기법  (0) 2019.09.13
[논문요약] 악성코드 정적탐지를 위한 PE의 Rich헤더 활용방법  (0) 2019.09.04
악성코드 분석[4]  (0) 2019.09.01
악성코드 분석[3]  (0) 2019.08.30
악성코드 분석[1]  (0) 2019.08.28

댓글