IT 그리고 정보보안/Knowledge base

윈도우 커널 생성 (Ntos****.exe)

plummmm 2021. 4. 13. 06:28
반응형

Windows가 부팅 되는 과정을 순차적으로 따라가며 해부하는 방식이다. 

 

이후 BCD는 지정된 일정 시간 이상 입력이 없으면, 기본 설정된 OS로 선택하여 커널 초기화 작업을 진행한다.

이 때, 부트 파티션에서 커널 초기화에 필요한 커널 파일과 HAL이미지 등을 로드하고

레지스트리 %SystemRoot%\System32\Config\System 을 하이브(연결)하여 디바이스 드라이버를 로드하는

작업을 진행한다. 레지스트리에 대한 내용은 다음에 다루겠다.

 

커널 초기화에 필요한 파일들을 언급하였었는데, Ntos****.exe 이름이 뭐 요런 형식이다.

CPU 갯수, 메모리 PAE 활성화 여부에 따라 4개의 프로세스 중 하나가 실행이 된다. 흠 아래 설명

 

Ntoskrnl.exe : 1 CPU

Ntkrnlmp.exe : n CPU

Ntkrnlpa.exe : 1 CPU, PAE 활성화

Ntkrpamp.exe : n CPU, PAE 활성화

 

커널 생성을 위한 작업은 크게 0과 1 두단계로 나눌 수 있따. 0은 1을 위한 준비단계

0단계 에서 인터럽트를 비활성화 하고, Ntldr( or Winload.exe) 에서 온 정보를 통해 KiSystemStartup 커널 함수를 호출한다.

 

일단 말이 어려우니까 또 그림, 그림을 보자

한번에 길게 그릴 수 없어서.. 단계0 과 단계1을 따로 그렸다.

 

 

 

간단하게 그림을 설명하자면

* 단계 0

1. 각 CPU의 인터럽트 컨트롤러 초기화

2. 메모리 관리자 초기화

3. File System Cache 와 Non-paged Pool, Paged Pool 생성

4. 개체 관리자 (Object Manager)가 첫번째 프로세스를 할당하기 위해 Security token 초기화

5. 프로세스 관리자 (Process Manager)가 스스로 Idle Process System Process 생성

 

여기 까지가 단계0 입니당. 다음 단계1을 봅시다

 

* 단계 1

1. 다시 인터럽트 활성화

2. Bootvid.dll ( 윈도우 로그와 진행바 출력 )을 로드하여 윈도우 부팅 상태 스크린 출력

3. 기존에 Ntldr( or Winload.exe)에서 하이브(연결)한 시스템, 하드웨어 레지스트리 복사하여 로드

4. 필요한 드라이버들과 커널의 Executive 영역에 위치한 관리자들을 초기화

 

위의 내용을 전부다 외우거나 익힐 필요가 없다. 근데 돌아가는 흐름은 대충 알아야지.

커널 생성과정도 제대로 모르고 윈도우 커널 분석 한다는건 어불성설..

 

현재 내 커널의 정보를 알고 싶을 때는.. Windbg로 커널 디버깅 열어서

!lmi nt 혹은 lm vm nt 명령을 입력하면 확인가능하다.

 

아까 공부한 ntkrpamp.exe 를 확인할 수 있다.

반응형