본문 바로가기

High Level Technique/Reversing

Native API

Native API


Native API는 윈도우 NT 시스템의 실질적인 인터페이스입니다.


Win32 API는 Native API에 대한 상위 계층일 뿝이고 NT 커널은 GUI와 아무런 관련이 없기 때문에 Native API는 그래픽관련 서비스를 포함하지 않습니다.


메모리 관리자, I/O 시스템, 객체 관리자, 프로세스와 스레드 등에 직접 접근할 수 있는 인터페이스를 제공하므로 윈도우 커널에 대한 가장 직접적인 인터페이스 입니다.



Native API는 NTDLL.DLL과 NTOSKRNL.EXE에서 익스포트된 함수들의 집합입니다.



Navtive API는 Nt나 Zw로 시작하는 API가 존재하는데 Nt로 시작하는 API는 API를 실질적으로 구현하는 함수이고, Zw는 시스템 콜 메커니즘이 수행되는 함수 입니다.



시스템 콜 메커니즘을 통해서 커널 모드 API를 호출하는 이유는 API를 커널 모드에서 호출한다는 것을 알려주기 위한 것입니다. 그렇지 않으면 API는 자신이 유저 모드에서 호출됐다고 판단해서 

유저 모드 주소를 포함하고 있는 모든 파라미터를 조사하게 되는데 유저 모드에서 커널 메모리 주소를 전달함으로써 발생할 수 있는 시스템 충돌을 방지하기 위한 메커니즘입니다.




시스템 콜 메커니즘


시스템 콜은 유저 모드에서 커널 모드 함수를 호출할 필요가 있을 때 발생하고 애플리케이션이 운영체제 API를 호출할 때 자주 발생합니다.


Windows 2000 이전 버전에서는 int 2E를 이용해서 커널을 호출합니다.


EAX에 서비스 번호가 로드되고, EDX에 커널 모드 함수에 전달되는 첫 번째 파라미터 주소가 들어갑니다.


최신 운영체제에서는 int 2E를 사용하지 않고 SYSENTER라고 하는 명령을 사용합니다.


SYSENTER_EIP_MSR이라는 특별한 Model Specific Register 레지스터에 저장된 주소를 호출합니다.



'High Level Technique > Reversing' 카테고리의 다른 글

Obfuscation (난독화)  (0) 2016.09.07
C++ 분석  (0) 2016.08.13
Debug Blocker  (0) 2016.08.10
PE Image Switching  (2) 2016.08.10
Self Creation Debugging  (0) 2016.08.09