취약점 분석/windbg

Mutex 뮤텍스 API 함수 정리

night-Ohl 2019. 2. 23. 13:39
반응형

Mutex  뮤텍스 API 함수 정리

뮤텍스는 커널 모드 동기화 오브젝트 이다.


동기화를 위해 사용되는 API 함수들은 아래와 같다.

1) CreateMutex  : 뮤텍스 생성 (핸들 획득)

2) OpenMutex : 뮤텍스 핸들 획득 (핸들 획득)

3) ReleaseMutex : 뮤텍스 반환



[사용]

WaitForSingleObject(hMutex, INFINITE);  //뮤텍스 획득까지 기다림. ( 기다릴 뮤텍스의 핸들, 기다리는 시간 )

//사용//

ReleaseMutex(hMutex);



API 함수들을 하나씩 살펴 보자.

1) CreateMutex

Syntax

출처 : https://docs.microsoft.com/ko-kr/windows/desktop/api/synchapi/nf-synchapi-createmutexa

파라미터는 3개를 받는다.


lpMutexAttributes

SECURITY_ATTRIBUTES 구조체 주소를 받는다. null 이라면 child process로 상속될 수 없다.


bInitialOwner

: 뮤텍스를 생성한 스레드가 첫번째 소유권(Ownership)을 가지는 지의 여부. 1(True) or 0(False)


lpName

: 뮤텍스 이름 지정. ( null 이라면 이름 없이 생성됨 )

- 길이는 MAX_PATH characters 만큼으로 제한된다.

- 이미 있는 이름으로 호출할 경우 MUTEX_ALL_ACCESS 권한을 요청하며, 첫 생성자가 아니므로 당연히 bInitialOwner 파라미터는 무시된다.


2) OpenMutex

현재 msdn 페이지 접근이 안돼서 생략.


3) ReleaseMutex

Syntax

출처 : https://docs.microsoft.com/ko-kr/windows/desktop/api/synchapi/nf-synchapi-releasemutex

파라미터는 1개를 받는다


ReleaseMutex

: CreateMutex 혹은 OpneMutex 함수로 얻은 뮤텍스 핸들 값을 인자로 받는다.


⚠︎ 호출하는 스레드가 해당 뮤텍스의 소유권(Ownership)을 가진 상태에서만 동작. (아니라면 fail)



반응형