Ntdll.dll은 사용자의 요청을 의도에 맞게 조정하여 커널 처리 요청으로 보내주는 것은
처음에 언급해서 다들 알고있을거라 생각한다.
각각의 요청들을 서브시스템이 수집하여 Ntdll.dll로 보내어 커널로 요청을 보내는 과정.
지금까지 포스팅하며 공부했던 내용의 큰 그림은 이것이다.
커널 모드 이용 권한이 필요한 시스템 명령들을 System Service API 즉, 네이티브 API라 한다.
서브시스템이 필요에 맞게 수집하고 구분지어놓은 명령들을 Ntdll.dll을 통해 진행된다.
Ntdll.dll 처럼 통일된 인터페이스를 제공하여 자원 관리의 효율성을 증대시키기 위해서 고안된 구조이다.
그럼 커널 모드에 진입은 어떻게 하는 것일까.
int 0x2e (혹은 Sysenter) 명령을 통해 커널모드로 진입하게 된다
이렇게 커널에 진입하여 처리할 때, 디스패치 과정을 거치는데.. 이건 나중에 설명함.
그럼 일단 Ntdll.dll 이녀석이 중간다리 역할을 하는 과정은 어떤지 위에 그림 보다 상세히 알아보겠음.
위에 설명을 잘 이해했다면 큰 그림은 그리 어렵게 보이지 않을 것입니다
다음으로.. 하나 알아두면 좋은 팁? 은 아니고, 윈도우 API 함수들 접두어 의미에 대해 한번 말씀드리께요
함수 의미별로 접두어를 나누어 둔 것을 볼수 있는데. 이것들을 알면 수많은 API함수들의 의미를 알기 쉬워(?)
이 중에서 자주나오는 것은 단연 Zw, Nt 이다.
Zw는 Nt의 미러 포인트이다. 같은 기능을 하는 다른 함수다 이말.
Zw는 유저모드에서 요청한 경우 처리하기 전에 입력한 인자에 대한 검증을 한다. ( int 0x2e.. sysenter)
이 과정으로 권한이나 인자 검증과 같은 과정을 처리한다.
근데 커널 내에서 호출되는 Nt는 검증 과정이 없다.
요약하면
유저모드에서 Nt, Zw 둘 다 검증을 진행하고
커널모드에서 Zw만 검증을 한다.
출처 : 리버싱 윈도우 - 로드북
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
윈도우 EPROCESS와 KPROCESS 구조 (0) | 2021.04.13 |
---|---|
윈도우 프로세스와 스레드 생성과 동작 원리 (0) | 2021.04.13 |
윈도우 유저 세션 초기화 프로세스 (userinit.exe) (0) | 2021.04.13 |
윈도우 서비스 관리자 (services.exe) (0) | 2021.04.13 |
윈도우 도메인, 엑티브 디렉토리 (0) | 2021.04.13 |