네이티브 API
1. 개요
네이티브 API는 C 런타임 함수와 윈도우 운영체제 커널에 직접 접근하는 함수들을 포함하는 광범위한 함수 집합이다. 이 API는 `Nt`, `Zw`, `Rtl`, `Csr`, `Dbg`, `Ki`, `Ldr`, `Nls`, `Pfx`, `Tp`, `NtUser`, `NtGdi` 등의 접두사를 가진 다양한 함수 그룹으로 구성되어 있으며, 각 그룹은 시스템 호출, 유틸리티 함수, 디버깅 기능, 로더 함수, NLS 지원 등 특정 기능을 담당한다. 네이티브 API는 권한 관리, 프로세스 및 스레드 관리, 시스템 제어, 디버깅 등 다양한 작업에 활용된다.
-
운영 체제 API -
도스 API
도스 API는 응용 프로그램이 MS-DOS 운영체제의 시스템 기능을 사용하도록 제공되는 인터페이스로, CP/M 호환성을 고려한 초기 설계 이후 유닉스 개념 도입, 네트워크 기능 추가 등으로 확장되었으며, 다양한 운영체제에서 에뮬레이터를 통해 지원된다. -
운영 체제 API -
GEM (소프트웨어)
GEM은 Digital Research가 개발한 GUI로, MS-DOS 환경에서 매킨토시와 유사한 경험을 제공하려 했으나, 애플과의 소송과 오픈 소스화 이후 FreeGEM, OpenGEM 등의 파생 프로젝트로 개발이 이어졌다. -
윈도우 NT 커널 -
장치 드라이버
장치 드라이버는 운영 체제와 하드웨어 장치 간 통신을 중재하는 소프트웨어로서, 하드웨어 종류에 상관없이 응용 프로그램이 코드를 작성하도록 추상화를 제공하고, 명령어와 API 호출을 해석하여 장치 제어를 가능하게 하지만 보안 취약점의 대상이 될 수 있다. -
윈도우 NT 커널 -
커널 트랜잭션 관리자
커널 트랜잭션 관리자(KTM)는 커널 모드에서 작동하며, 커널 및 사용자 모드 리소스와 분산 리소스 간의 데이터베이스 트랜잭션을 지원하여 시스템 안정성 향상과 데이터 무결성 보장에 기여한다. -
윈도우 NT -
윈도우 8
윈도우 8은 2012년 마이크로소프트가 출시한 운영 체제로, 터치스크린 기기 사용성을 개선하기 위해 메트로 디자인을 도입했으며, 윈도우 8.1로 개선되었고, 32/64비트 등 다양한 에디션으로 출시되었으나 2016년 지원이 종료되었다. -
윈도우 NT -
윈도우 10
윈도우 10은 마이크로소프트가 개발하여 2015년 출시된 운영 체제로, 통합 플랫폼을 지향하며 새로운 시작 메뉴, 가상 데스크톱, 엣지 브라우저 등을 특징으로 하고, 무료 업그레이드와 지속적인 업데이트를 통해 기능을 개선했으며, 다양한 에디션으로 제공되지만, 강제 업그레이드, 개인 정보 수집 등으로 비판받기도 했다.
2. 함수 그룹
네이티브 API는 다양한 기능을 수행하는 많은 함수들로 구성되어 있다. `strlen()`, `sprintf()` 등과 같이 기본적인 C 런타임 실행을 위한 C 런타임 함수들을 포함한다. 다만, `malloc()`, `printf()`, `scanf()` 같은 일반적인 함수들은 포함되지 않았다.
대부분의 네이티브 API 함수들은 기능에 따라 그룹화되며, 일반적으로 2~3글자의 접두사로 구분된다. 주요 함수 그룹은 다음과 같다.
| | 설명 | |
|---|---|
| Nt 또는 Zw | ntdll.dll과 ntoskrnl.exe에 선언된 시스템 호출 관련 함수. |
| Rtl | ntdll에서 두 번째로 큰 그룹으로, 확장된 C 런타임 라이브러리 관련 함수. |
| Csr | Win32 하위 시스템 프로세스(csrss.exe)와 통신하는 클라이언트-서버 함수. |
| Dbg | 디버깅 관련 함수. |
| Ki | APC 디스패칭 같은 이벤트를 위한 커널 모드 upcall. |
| Ldr | PE 파일 처리 및 새로운 프로세스 시작을 위한 로더 함수. |
| Nls | 네이티브 언어 지원 관련 함수. |
| Pfx | 접두사(prefix) 처리 관련 함수. |
| Tp | 스레드 풀 처리 관련 함수 |
| NtUser, NtGdi | 그래픽 서브시스템 관련 함수 (win32k.sys, user32.dll, gdi32.dll). |
과거에는 하드웨어 성능 문제로 인해 그래픽 서브시스템을 커널 모드로 옮겼기 때문에, user32.dll과 gdi32.dll에도 커널 모드로 들어가는 호출들이 있다. 이들은 0x1000~0x1FFF 범위의 시스템 호출을 사용하며, NtUser 및 NtGdi 접두사가 붙는다.
ntoskrnl.exe에는 커널 모드에서만 사용 가능한 여러 함수 그룹이 존재하며, 이들은 네이티브 API에 포함되기도 하고 되지 않기도 한다.
2.1. Nt 및 Zw 함수
Nt 및 Zw 함수는 ntdll.dll과 ntoskrnl.exe에 선언된 시스템 호출이다. 사용자 모드에서 ntdll.dll을 통해 호출될 경우, 이 함수들은 커널 모드로 전환되어 SSDT을 통해 ntoskrnl.exe 내의 동일한 기능을 가진 함수를 실행한다. ntoskrnl.exe에서 직접 호출될 경우(커널 모드에서만 가능), Zw 함수는 항상 커널 모드에서 실행됨을 보장하지만, Nt 함수는 그렇지 않다. Zw 접두사는 특별한 의미를 가지지 않는다.
2.2. Rtl 함수
Rtl은 ntdll.dll에서 두 번째로 큰 그룹이다. 이것은 C 런타임 라이브러리를 확장한 형태로, 커널 지원을 직접 포함하지 않지만 네이티브 애플리케이션에서 유용하게 사용되는 다양한 유틸리티 함수를 제공한다.
2.3. Csr 함수
Csr은 Win32 하위 시스템 프로세스(csrss.exe)와 통신하는 데 사용되는 클라이언트-서버 함수이다. csrss는 클라이언트/서버 런타임 서브시스템을 의미한다.
2.7. Nls 함수
국가 언어 지원(코드 페이지와 유사함)을 위한 것이다.
2.10. NtUser 및 NtGdi 함수
user32.dll과 gdi32.dll은 커널 모드로 들어가는 다른 호출도 포함한다. 이는 과거 하드웨어의 성능 문제로 인해 그래픽 서브 시스템을 커널 모드로 보내기로 결정했기 때문이다. 0x1000~0x1FFF 범위의 시스템 호출들은 win32k.sys용이며, user32.dll과 gdi32.dll에서 정의된다. 이런 함수들은 NtUser, NtGdi 접두사가 붙는다.
2.11. 기타 함수 그룹 (커널 모드 전용)
ntoskrnl.exe에서 제공되는 많은 함수 그룹이 있으며, 이러한 함수들은 커널 모드에서만 사용할 수 있다. 여기에는 다음이 포함된다.
* Cc: 캐시 컨트롤러
* Ex: Windows Executive
* FsRtl: 파일 시스템 런타임 라이브러리
* Io: I/O 관리자
* Ke: 코어 커널 루틴
* Ks: 커널 스트리밍
* Lpc: 로컬 프로시저 호출
* Lsa: 로컬 보안 인증
* Mm: 메모리 관리
* Ob: 객체 관리자
* Ps: Process management
* Se: 보안
* Po: 전원 관리
3. 사용 예시
네이티브 API는 다음과 같은 다양한 작업에 사용될 수 있다.