Process Handle
커널 오브젝트를 공부하던 중 커널 오브젝트에 직접 접근이 불가능하고 핸들로 참조하여 사용한다는 것을 알았으니 이번에는 핸
들에 대해서 공부해보았다.
핸들이란 커널 오브젝트를 가리키는 포인터이다. 라고 공부를 했는데, 틀리면 지적을 해주세요!
커널 오브젝트가 생성되고 개발자가 커널 오브젝트에 참조하기 위해서 핸들 값을 얻어 사용하는데 이 핸들 값이 해당하는 커널 오브젝트를 가리킨다는 정보는 어디에 있을까?? 그건 바로 프로세스의 핸들 테이블이란 곳에서 관리한다. 이 핸들 테이블은 핸들 정보를 저장하고 있는 테이블로 프로세스 하나당 하나 구성하여 가지고 있다.
[출처 : somma님 기술 문서 중...]
위 그림은 핸들 테이블이 어떻게 접근하는지 간략히 표현한 그림이다. 좋은 그림이라 가져왔다....
이번에는 핸들 상속에 대해서 이야기 해보자. 예를 들어서 CreateProcess 5번째 인자가 TRUE면 부모 프로세스에서 자식 프로세스로 상속이 가능하다.
BOOL WINAPI CreateProcess( _In_opt_ LPCTSTR lpApplicationName, _Inout_opt_ LPTSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bInheritHandles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCTSTR lpCurrentDirectory, _In_ LPSTARTUPINFO lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation );
이때 핸들테이블에서 핸들의 상속 여부를 확인한 뒤 핸들을 상속하는데 상속 여부까지 전부 상속이 된다. 말로는 어려울거 같으니 그림으로 보는게 좀 더 쉬울거 같다.
상속 여부를 확인하고 상속을 하게 되면 상속할 핸들을 선택하는 것이 아닌 상속 가능한 모든 핸들이 상속이 된다.
어떠한 내용이 부족하거나 틀린 내용이 있으면 알려주시면 추가하겠습니다.
'My Study > System' 카테고리의 다른 글
Critical Section(임계 영역) - CRITICAL_SECTION (0) | 2016.07.04 |
---|---|
Critical Section(임계 영역) 개념 (0) | 2016.07.04 |
Kernel Object (0) | 2016.06.29 |
API Hooking x86 x64 (0) | 2016.05.23 |
DLL Injection (3) - Injector 사용 (0) | 2016.05.23 |