본문 바로가기

System/windows

ch3. #1 프로세스 핵심 구조체

Windows Internals 7/e

 

# Windows 프로세스 내부 구조:: 핵심 데이터 구조체 알아보기

# 윈도우 프로세스 핵심 데이터 구조체에 대해서 알아보기

 

익스큐티브 프로세스 (EPROCESS)

  • 모든 윈도우 프로세는 EPROCESS로 표현됨.
  • 프로세스의 여러 속성 뿐만아니라 연관된 다른 구조체를 가리키는 포인터도 존재함.
  • 시스템 주소 공간에 위치함

dt nt!_eprocess 명령 통해 EPROCESS 구조체 필드 확인

KPROCESS

  • EPROCESS 구조체의 첫 필드인 PCB의 타입.
  • 커널 프로세스를 위한 구조체 타입이다.
  • 익스큐티브 루틴은 EPROCESS에 정보 저장, 그러나 운영체제 커널은 KPROCESS에 정보를 저장
  • 커널의 일부로서 디스패처, 스케줄러, 인터럽트, 시간관리코드 등이 존재
    • —> 계층 간 원치 않는 종속성이 생기지 않도록 함.
    •  익스큐티브 상위 레벨 기능과.. 해당 기능의 구현을 위한 하위 레벨 함수의 구현 간에 추상화 계층을 제공

 💡  KPROCESS는 EPROCESS의 첫번째 필드. EPROCESS 주소를 KPROCESS로 이용하여 dt _kprocess 명령 이용 가능 💡

 

 

실습: 커널 디버거 !process 명령 사용

  • 커널 디버거 !process 명령으로 프로세스 객체 내의 정보 및 그와 연관된 구조체 확인이 가능.
  • 따로 명시하지 않았기 떄문에 CPU 0 에서 실행 중인 스레드를 소유한 프로세스 모두 확인

프로세스 정보 다음에는 프로세스 내의 스레드 목록 표시.

 

실습: PEB 살펴보기

  • !peb 명령으로 CPU 0에서 실행 중인 스레드를 소유하는 프로세스의 PEB 구조체 확인 가능.

 

CSR_PROCESS

  • 윈도우 서브시스템 프로세스(Csrss.exe)가 관리하는 프로세스마다 대응되는 구조체.
  • 윈도우 애플리케이션만이 자신과 연관된 CSR_PROCESS 구조체 가짐
  • CSR_PROCESS 구조체는 각 세션 내의 Csrss프로세스에 의해 관리됨

1) 해당 구조체를 살펴보기 위해.. 존재하는 csrss.exe 나열

 

2) 그 중 하나를 선택해서 디버거 컨텍스트가 해당 프로세스를 가리키게 변경.

→ 프로세스의 유저 모드 모듈 확인 가능

  • /r : 유저 모드 심블 로드를 요청
  • /p : 디버거의 프로세스 컨텍스트를 제공한 프로세스 객체(EPROCESS)로 변경

3) lm명령(로드된 모듈 나열) 사용

 

W32PROCESS

  • 커널모드 쪽의 윈도우 서브시스템(Win32k.sys)가 관리하는 프로세스별 데이터 구조체.
  • 커널 내에서 윈도우 그래픽이나 윈도우 관리 코드가 GUI 프로세스의 상태 정보를 관리하기 위해 필요한 모든 정보를 가짐
  • Win32k 구조체 타입 (공개 심볼로는 이용 불가능)

DXGPROCESS

  • 커널모드 윈도우 서브시스템은 DirectX 기반의 하드웨어 가속 그래픽을 과중하게 사용하기 때문에..
  • 그래픽 다비이스 인터페이스(GDI) 컴포넌트 인프라가 DirectX 그래픽 커널(Dxgkrnl.sys)로 하여금 DXGPROCESS 구조체를 초기화하게 함.

실습: Process Explorer에서 보호 프로세스 살펴보기

process exploer > 칼럼 Protection 체크 > 오름차순 정렬


p.216

트러스트릿 (IUM Process)

https://docs.microsoft.com/ko-kr/windows/win32/procthread/isolated-user-mode--ium--processes