tmxklab

Window API 관련 본문

Security/02 Reversing

Window API 관련

tmxk4221 2021. 4. 18. 00:15

DLL 정리


  • 악성코드는 일반적으로 윈도우 API(Application Programming Interface)함수를 사용해 파일 시스템, 프로세스, 메모리, 네트워크 작업 수행을 위해 OS와 상호작용한다.
    • 상호작용을 위해 필요한 기능 대부분을 동적 DLL(Dynamic Link Library)파일로 Export한다.
  • 실행 파일은 다른 기능을 제공하는 다양한 DLL에서 이들 API 함수를 임포트한 후 호출한다.
  • 따라서, 악성코드가 의존하고 있는 DLL과 임포트하고 있는 API함수를 조사하면 악성코드의 기능을 분석할 수 있다.

1) Kernel32.dll

  • 부팅시 로드되어 모든 프로그램에 사용되고 커널이 애플리케이션에게 제공할 수 있는 서비스 함수 형태로 존재
  • 프로세스, 메모리, 하드웨어, 파일 시스템 작업과 관련된 함수를 익스포트
  • 악성코드는 파일 시스템, 메모리, 프로세스 관련 작업을 처리하고자 해당 DLL에서 API함수를 임포트한다.

2) ntdll.dll

  • kernel32.dll과 함께 부팅 시 로드되어 모든 프로그램에 사용되며 유저 모드에서 동작 중이던 프로그램들을 위해 커널 모드의 요청을 대신 처리한 후 결과 값을 반환해주는 역할
  • 윈도우 내장 API 함수를 익스포트하고 유저 모드 프로그램과 커널 사이에서 인터페이스 같은 역할을 한다.
  • 프로그램은 일반적으로 ntdll.dll의 API함수를 직접 임포트하지 않으며 ntdll.dll의 API함수는 kernel32.dll과 같은 DLL에 간접적으로 임포트된다.
  • 예를 들어 프로그램이 kernel32.dll(또는 kernelbase.dll)에 있는 API함수를 호출하면 API는 차례로 ntdll.dll안에 있는 짧은 스텁(stub)을 호출한다.

3) Advapi32.dll

  • 서비스와 레지스트리 관련 기능 포함
  • 악성코드는 서비스와 레지스트리 관련 작업을 하고자 해당 DLL에서 API함수를 사용한다.

4) Gdi32.dll

  • 그래픽 관련 함수 익스포트
  • 윈도우에서 마우스 움직임, 그림, 화면 등 GUI의 가장 기본이 되는 DLL

5) User32.dll

  • 데스크톱, 윈도우 메뉴, 메시지 박스, 프롬프트 등과 같은 윈도우 유저 인터페이스 컴포넌트를 생성하고 조작하는 함수를 구현
  • 일부 악성코드 프로그램은 해당 DLL의 함수를 이용해 DLL Injection과 키보드(키로깅)와 마우스 이벤트 모니터링을 한다.

6) MSVCRT.dll

  • C 표준 라이브러리 함수 구현을 포함

7) WS2_32.dll, WSock32.dll, wsgtpip.dll

  • 네트워크 통신을 위한 함수를 포함
  • 악성코드는 네트워크 관련 작업을 수행하고자 이들 DLL에서 함수를 임포트한다.

8) Wininet.dll

  • HTTP와 FTP 프로토콜과 상호작용하기 위한 고급 수준의 함수를 노출한다.

9) Urlmon.dll

  • WinInet.dll을 둘러싸는 래퍼(wrapper)로 MIME 형식 처리와 웹 콘텐츠를 다운로드하는 역할을 수행한다.
  • 악성코드 다운로더는 추가 악성 콘텐츠를 다운로드하고자 이 DLL의 함수를 사용한다.

10) Comctl32.dll

  • 상태바, 진행바, 툴바 등과 같은 운영체제에서 지원하는 기능에 대한 응용 프로그램의 접근을 지원

11) Netapi32.dll

  • 운영체제에서 지원하는 다양한 통신 기능을 응용 프로그램이 접근할 수 있도록 지원하는 기능

12) winmm.dll

  • 멀티미디어 관련 기능들 포함

Window API 함수 볼 때 참고


MSDN(Microsoft Developer Network)나 구글링을 통해 윈도우 API함수에 대해 자세히 알아볼 수 있다.

데이터 타입

data typedescription
Byte(b)부호없는 8비트
WORD(w)부호없는 16비트
DWORD(dw)부호없는 32비트
QWORD(qw)부호없는 64비트
Char(c)8비트 ANSI문자
WCHAR16비트 유니코드 문자
TCHAR일반 문자(1byte ASCII문자 또는 와이드, 2byte 유니코드 문자)
Long Pointer(LP)다른 데이터 타입에 대한 포인터, 예를 들어 LPDWORD는 DWORD, LPCSTR은 상수 문자열.
Handle(H)핸들 데이터 타입. 핸들은 객체에 대한 참조로 프로세스가 객체(파일, 레지스터, 프로세스, 뮤텍스 등)에 접근하기 전 객체에 대한 핸들을 먼저 열어야 한다.
Untitled

ANSI, 유니코드, 확장된 API 함수

간혹 API함수명 끝에 접미사로 A 또는 W, Ex가 붙은 것을 볼 수 있다.

ex) CreateFileA, CreateFileW

  • (API함수명)A : ANSI 문자열을 입력으로 받음
  • (API함수명)W : 유니코드 문자열을 입력으로 받음
  • (API함수명)Ex : 확장 버전, MS가 이전 함수와 호환되지 않는 함수를 업데이트하면 업데이트 함수 이름 뒤에 붙임

'Security > 02 Reversing' 카테고리의 다른 글

EAT(Export Address Table)  (0) 2021.08.06
IAT(Import Address Table)  (0) 2021.08.04
RVA to RAW  (0) 2021.08.04
ARM Assembly 정리 (기초)  (0) 2020.12.18
[리버싱] 어셈블리어 설명 및 종류  (0) 2020.02.03
Comments