네이티브 API

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

네이티브 API는 C 런타임 함수와 윈도우 운영체제 커널에 직접 접근하는 함수들을 포함하는 광범위한 함수 집합이다. 이 API는 `Nt`, `Zw`, `Rtl`, `Csr`, `Dbg`, `Ki`, `Ldr`, `Nls`, `Pfx`, `Tp`, `NtUser`, `NtGdi` 등의 접두사를 가진 다양한 함수 그룹으로 구성되어 있으며, 각 그룹은 시스템 호출, 유틸리티 함수, 디버깅 기능, 로더 함수, NLS 지원 등 특정 기능을 담당한다. 네이티브 API는 권한 관리, 프로세스 및 스레드 관리, 시스템 제어, 디버깅 등 다양한 작업에 활용된다.

네이티브 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 또는 Zwntdll.dll과 ntoskrnl.exe에 선언된 시스템 호출 관련 함수.
Rtlntdll에서 두 번째로 큰 그룹으로, 확장된 C 런타임 라이브러리 관련 함수.
CsrWin32 하위 시스템 프로세스(csrss.exe)와 통신하는 클라이언트-서버 함수.
Dbg디버깅 관련 함수.
KiAPC 디스패칭 같은 이벤트를 위한 커널 모드 upcall.
LdrPE 파일 처리 및 새로운 프로세스 시작을 위한 로더 함수.
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.4. Dbg 함수

Dbg는 소프트웨어 브레이크포인트와 같은 디버깅 함수이다.

2.5. Ki 함수

APC 디스패칭과 같은 이벤트에 대한 커널 모드 업콜이다.

2.6. Ldr 함수

PE 파일 처리 및 새로운 프로세스 시작을 위한 로더 함수이다.

2.7. Nls 함수

국가 언어 지원(코드 페이지와 유사함)을 위한 것이다.

2.8. Pfx 함수

Pfx는 접두사 처리를 위해 사용된다.

2.9. Tp 함수

Tp 함수는 스레드 풀 처리를 위한 것이다.

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는 다음과 같은 다양한 작업에 사용될 수 있다.

👆
좌우로 밀어서 보기
함수명기능
RtlAdjustPrivilege권한 활성화 및 비활성화
RtlCreateUserThread다른 세션에서 실행 중인 프로세스 내에 원격 스레드 생성
RtlCreateUserProcess네이티브 애플리케이션 실행
NtShutdownSystem영어시스템 강제 종료
NtRaiseHardError영어사용자 모드에서 블루 스크린 오류 발생
NtDisplayString영어네이티브 모드에서 문자열 표시

3.1. 권한 관리

RtlAdjustPrivilege는 권한을 활성화하거나 비활성화하는 데 사용된다.

3.2. 프로세스 및 스레드 관리

RtlCreateUserThread는 다른 세션에서 실행 중인 프로세스 내에 원격 스레드를 생성하며, RtlCreateUserProcess는 네이티브 애플리케이션을 실행한다.

3.3. 시스템 제어

NtShutdownSystem영어 함수는 시스템을 강제 종료하는 기능을 수행한다.

3.4. 디버깅

NtRaiseHardError영어 함수는 사용자 모드에서 블루 스크린 오류를 발생시키고, NtDisplayString영어 함수는 네이티브 모드에서 문자열을 표시하여 디버깅에 사용된다.