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

+ Recent posts