EPROCESS 와 KPROCESS 구조체에 대해 한번 공부해봅시다.
프로세스는 무조건 이해해야한다.
우리가 운영체제를 이용하는 이유는 무엇인가.. 작업을 하고자 함이다.
게임을 하든 문서를 작성하든 인터넷을 이용하든 이 모든 것들을 작업이라고 통칭 가능하다.
작업들을 하기 위해서 우리는 응용 프로그램들을 사용한다. 이 응용 프로그램들이 프로세스 그 자체라는 말
프로그램들을 실행시키고 관리하는게 프로세스다. 그리고 프로세스에서 실질적으로 작업하는 것은 스레드라고 했으니,
프로세스와 스레드에 대해서는 개념을 잡고 있는 것이 필요하다.
EPROCESS를 통해 알 수 있는 정보들은 참으로 방대하다.
이를 통해 알 수 있는 주요 정보를 한번 알아보자.
그럼.. EPROCESS의 전체 구조체를 한번 보겠다.
필요한 부부을 하나씩 설명 해줌. 위에서 부터.ㅋㅋ
Pcb : PCB, 즉 KPROCESS를 의미함.
CreateTime : 프로세스 생성 시간
ExitTime : 프로세스 종료 시간
UniqueProcessID : 프로세스 ID
ActiveProcessLinks : 모든 프로세스를 관리하는 데 사용하는 LIST_ENTRY (후에 이를 이용해 프로세스 보호기법 공부)
QuotaUsage : Nonpaged pool 사용량
QuotaPeak : Nonpaged pool peak 사용량
CommitCharge : 프로세스가 사용하는 물리적 공간
PeakVirtualSize : 프로세스가 사용하는 최대 메모리 양
VirtualSize : 프로세스가 사용하는 메모리 양
SessionProcessLinks : 세션 내 프로세스를 관리하는데 사용되는 LIST_ENTRY
DebugPort : 디버깅 예외처리 시 사용되는 LPC포트
ExceptionPort : 예외처리 포트에 대한 데이터
ObjectTable : 프로세스으 핸들 테이블 포인터를 가르킨다.
Token : 프로세스 토큰 정보
WorkingSetPage : 워킹셋 페이지 수
SectionBaseAddress : 세션 베이스 주소
QuotaBlock : 프로세스 할당 블록
Win32WindowStation : 윈도우 스테이션 ID
PageDirectoryPte : PTE 페이지 디렉토리 정보
Session : 터미널 연결시 세션 id로 사용
ImageFileName : 프로세스 이름
ThreadListHead : 프로세스 내 동작 중인 스레드를 가르키는 포인터
Peb : PEB를 가르키는 포인터
ReadOperationCount : 여기 값들은 I/O에서 읽기를 수행한 횟수
WriteOperationCount : 쓰기를 수행한 횟수
CommitChargeLimit : 사용가능한 최대 메모리양
CommitChargePeak : 사용된 메모리양
Cookie : 현재 시간값, 그외에 연산을 통해 고유 값을 생성한다.
이제는 KPROCESS의 구조를 한번 봅시다
Header : 디스패치 개체입니다 가지고 있는 헤더. 동기화, 우선처리와 같은 대기상황 허용을 위해 사용된다.
DirectoryTableBase : 프로세스 별로 관리되는 가상 메모리의 CR3 레지스터의 값을 저장한다.
ActiveProcessors : 현재 활성화된 프로세서 수
KernelTime : 프로세스가 커널 레벨에서 사용된 시간
UserTime : 프로세스가 유저 레벨에서 사용된 시간
ReadListHead : 현재 준비 상태의 스레드 리스트
SwapListEntry : 현재 스왑되고 있는 스레드 리스트
ThreadListHead : 프로세스가 가지고 있는 스레드 리스트를 가르킨다.
ProcessLock : EPROCESS 접근 시 사용될 동기화 개체
Affinity : 멀티 프로세서에서 이 프로세스가 선호하는 프로세서
BasePriorty : 기본 우선 순위
DisalbeBoost : 부스트 기능 비활성화 유무
DisalbeQuantum : 퀀텀 비활성화 유무, 비활성화 시 시스템 기본 퀀텀값으로 설정
KPROCESS는 커널에서 스레드 스케줄링, 프로세스에 포함되는 스레드 기본 설정 값, 스레드 관리에 필요한 정보등을
확인할 수 있다. taskmgr에서 우선순위 프로세스를 바꿀 수도 있다.
출처 : 리버싱 윈도우 - 로드북
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
윈도우 스레드 스케줄링 그리고 컨텍스트 스위치 (0) | 2021.04.13 |
---|---|
윈도우 ETHREAD와 KTHREAD 구조 (0) | 2021.04.13 |
윈도우 프로세스와 스레드 생성과 동작 원리 (0) | 2021.04.13 |
윈도우 ntdll.dll (0) | 2021.04.13 |
윈도우 유저 세션 초기화 프로세스 (userinit.exe) (0) | 2021.04.13 |