CodeEngn malware 06
코드엔진 malware 06번 문제풀이
악성코드 6번째 문제를 풀어보자 Thread Mutex는 무엇인지 구하는 문제이다.

살펴보면 CreateMutex함수로 Mutex를 생성하는 것을 볼 수 있는데 어떻게 구성되어 있는지 살펴보면 아래와 같다.
HANDLE CreateMutexA(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCSTR lpName
);
IpMutexAttributes 매개변수는 SECURITY_ATTRIBUTES구조에 대한 포인터이고 이 매개변수 값이 NULL이면 자식 프로세스가 핸들을 상속할 수 없다.
bIntialOwner 매개변수는 이 값이 TRUE(1)이고 호출자가 Mutex를 만든 경우 호출 스레드는 Mutex 개체의 초기 소유권을 얻는다. 즉 Mutex를 생성한 스레드가 첫 번째 소유권을 가지는지 여부를 판단한다.
IpName 매개변수는 Mutex 개체의 이름을 지정한다. 이름의 길이는 MAX_PATH characters 만큼 제한되고 이름 비교는 대소문자를 구분한다. 이미 사용하고 있는 이름으로 호출하면 MUTEX_ALL_ACCESS 액세스 권한을 요청한다. 이 경우 bInitialOwner 매개변수는 생성 프로세스에서 이미 설정되었기 때문에 무시한다.
CreateMutex함수에 대하여 공부를 하였으니 다시 위로 돌아가서 분석을 해보면 중간에서 CreateThread함수를 호출하고 난 뒤 CreateMutex함수를 호출하는 것을 볼 수 있었고 이 구간이 Thread Mutex임을 확인할 수 있다. Thread Mutex가 무엇인지 구하는 문제였으므로 답은 CreateMutex함수의 IpName 매개변수의 값인 smtp_bagla_1000임을 확인할 수 있다.
