본문 바로가기

[Riversing]/[코드엔진] MALWARE

[코드엔진] malware06

코드엔진 사이트에 들어가 malware06 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn)

 

 

6번 프로그램의 Thread Mutex가 무엇인지 물어본다.

 

우선 Thread Mutex를 간단하게 설명하면

 

멀티 쓰레드 환경을 구축 할 때에는 공유 자원 영역에 대한 동기화가 필요하다.

 

이 동기화를 하는 방법에는 여러가지 방법이 있는데, 이 중 하나가 Mutex 라고 할 수 있다.

 

쉽게 얘기하면 Mutex는 화장실이 하나 있는 식당이다.

 

ThreadA , ThreadB 가 식당의 손님이라고 가정하면, 화장실은 공유 자원 영역이 될 것이고, 화장실의 key는 하나 뿐이다.

 

A가 화장실을 이용하는 중이라면, B는 당연히 화장실에 못들어가고 밖에서 기다려야 한다.

 

이러한 방식으로 critical section(임계 영역, 위에선 화장실로 설명) 에 한번에 하나의 쓰레드(손님)만 이용 할 수 있게

 

lock 하는 방식을 Mutex 라고 한다.

 

이정도로 이해하고 파일을 열어보자.

 

 

위 그림과 같은 PDF 파일이다.

(IDA로 분석한건가?)

 

분석을 해보자.

 

제일 위에를 보면 createmutex 함수가 보인다.

 

위 사진이 CreateMutex함수의 원형인데,

 

lpMutexAttributes는 뮤텍스의 보안 속성을 지정하는 것인데 일반적으로 null 값이 들어간다.

 

bInitialOwner는 뮤텍스를 생성하면서 사용권한을 가지는지를 결정한다.

True일 경우 생성되면 본인이 뮤텍스의 사용 권한을 가지고,

False일 경우 뮤텍스를 생성하기만 하고, 사용권한을 얻으려면 대기함수를 사용해야 한다.

 

lpname은 뮤텍스 이름이라고 볼 수 있다.

 

 

함수의 중반쯤에서 CreateMutexA 함수를 호출해서 Mutex를 생성한다.

 

위에서 설명한 인자들을 살펴보면,

 

lpMutexAttribute = 0                        // 보안속성, 보통 0

bInitialOwner = 1                            // 본인이 뮤텍스의 사용권한을 가짐

lpName = smtp_bagla_1000              // 뮤텍스 이름 = smtp_bagla_1000

 

으로 생성되었다.

 

문제에서 이 프로그램의 Thread Mutex는 무엇인지를 물었고,

 

Mutex의 이름이 무엇이냐? 로 해석한다면

 

이 문제의 답은 위에 적은 문자열이 될 것이다.

 

'[Riversing] > [코드엔진] MALWARE' 카테고리의 다른 글

[코드엔진] malware05  (0) 2020.04.29
[코드엔진] malware04  (0) 2020.04.29
[코드엔진] malware03  (0) 2020.04.29
[코드엔진] malware02  (0) 2020.04.27
[코드엔진] malware01  (0) 2020.04.21