▣ 객체와 핸들
- 원도우 커널은 객체 관리자에 의해서 객체가 관리됨
- 커널 관련 객체만 관리(섹션, 파일, 디바이스 드라이버, 동기화 객체, 프로세스, 쓰레드 등)
- 모든 객체는 단순희 nonpaged pool 커널 메모리에 저장된 데이터 구조체임
- 객체는 해당 객체의 표준 객체 헤더만 알고 있음
● 핸들
- App는 객체 데이터 구조체에 직접 접근 못함 → 핸들을 이용해 객체 접근
- 프로세스 안에서 객체를 구별하기 위한 숫자로 이뤄진 구분자
- 핸들 값은 프로세스 핸들 테이블에서의 해당 객체에 대한 인덱스 값
[객체와 프로세스 핸들 테이블]
○ 액세스 마스크(Access Mask) : 두개의 16bit 액세스 플래그 워드로 구성(32bit)된 정수
- 상위워드 : GENERIC_WORD, GENERIC_WRITE와 같은 일반적인 액세스 플래그를 포함
- 하위워드 : PROCESS_TERMINATE(핸들을 이용해서 프로세스를 종료시킬 수 있음)
KEY_ENUMERATE_SUB_KEYS 플래그(레지스트리 키 안의 하위 키들을 열거)
○ 커널은 모든 객체에 대해 두개의 레퍼런스 카운트를 관리함
- 커널 레퍼런스 카운트(kernel reference count)
- 핸들 카운트(handle counter)
위의 두개 카운트 모두 0일 때 삭제됨
'Security > Reverse Engineering' 카테고리의 다른 글
[Reversing]프로세스와 쓰레드 (0) | 2010.05.04 |
---|---|
[Reversing]네임드 객체 (0) | 2010.05.03 |
[Reversing]색션 객체, VAD트리, User mode Mem, Mem 관리 API (0) | 2010.04.29 |
[Reversing]윈도우 커널 메모리 주소 공간 (0) | 2010.04.25 |
[Reversing]compiler, JavaVM, Mem Structure (0) | 2010.04.22 |