OpenProcess() API의 사용 목적은 [프로세스의 핸들값을 알아내기 위함이다.]
OpenProcess API는 프로세스의 핸들값을 알아내기 위해 쓰이는데, 핸들이란 것은 자원에 직접접근을 하지 못하는 환경에 의해 생겨난 개념이다.
어떠한 자원의 주소로 바로 접근하지 못하게 구성되었기 때문에, 어떤 자원에 접근을 하기 위해서는 그 자원의 주소와 핸들값을 매핑시킨다.
0x1111FFFF의 주소에 30이라는 핸들값이 설정되어있다면, 30이라는 값을 전송하면 이에 매핑되어있는 0x1111FFFF주소의 자원을 가져올 수 있는것이다.
따라서 프로세스를 다루기 위해 그 프로세스는 어떤 핸들값을 가지고 있는지 파악해야한다.
OpenProcess API의 문법은 다음과 같다.
HANDLE OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId );
반환 형식은 HANDLE로 위 API함수가 정상적으로 수행되었다면 해당 프로세스에 대한 핸들값을 리턴하게 된다.
정상적으로 수행되지 않는다면? 그렇다면 NULL이 반환되며, 만약 왜 실패했는지에 대한 이유를 알고 싶다면 GetLastError() API를 사용한다.
파라미터에 대한 설명은 아래와 같다.
1. 첫번째 파라미터(dwDesiredAccess)는 접근 권한을 의미하는데, 대체로 PROCESS_ALL_ACCESS를 사용한다. 이를 사용하면 편리하게 모든
접근이 가능하지만 Window Server 2008,Window Vista에서는 PROCESS_ALL_ACCESS 플래그의 사이즈가 크게 컴파일되기 때문에, 이를
Window Server 2003, Window XP에서 실행하게되면 ERROR_ACCESS_DENIED 에러가 난다. 하지만 일단은 PROCESS_ALL_ACCESS가 매우 편하다.
2. 두번째 파라미터(bInheritHandle)는 상속여부를 나타내는 파라미터인데, False를 사용하면 된다.
3. 세번째 파라미터(dwProcessId)는 0 내지 NULL로 입력하였을 경우 모든 프로세스에 접근하며 특정 프로세스에 접근하고 싶은 경우
Process Id(PID)를 입력하면 된다.
'리버싱 > Win32 API' 카테고리의 다른 글
DebugActiveProcess() API (0) | 2018.11.18 |
---|