IT 그리고 정보보안/Knowledge base

윈도우 EPROCESS와 KPROCESS 구조

plummmm 2021. 4. 13. 07:13
반응형

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에서 우선순위 프로세스를 바꿀 수도 있다.

 

 

출처 : 리버싱 윈도우 - 로드북 

반응형