(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)



 악성코드나 특정 프로그램에서는 중복(다중) 실행을 방지하기 위해 뮤텍스를 사용합니다.


TEST 프로그램이 있습니다. 이 프로그램은 실행했을 때 CreateMutex( ) API를 호출해서 뮤텍스를 생성하고 정상 종료되었을 때 ReleaseMutex( ) API를 호출해서 핸들을 반환합니다. 그리고 중복 실행 방지 코드가 포함되어 있다고 보겠습니다.

여기서 TEST 프로그램이 정상적으로 종료된다면 추후 동작에 아무런 문제가 없습니다. 그러나 또 다른 TEST 프로그램을 다중으로 실행시키거나 동작하고 있는 TEST 프로그램을 강제로 종료시키고 난 뒤에 다시 실행시키려고 할 경우, 동작하지 않습니다.

그 원리는 다음과 같습니다. 뮤텍스는 커널 오브젝트이기 때문에 모든 프로세스를 통 틀어서 하나만 존재합니다. 동일한 뮤텍스가 이미 있는 상태에서 CreateMutex( ) 또는 OpenMutex( )를 호출하면 에러가 발생하고 GetLastError( )를 사용하면 ERROR_ACCESS_DENIED나 ERROR_ALREADY_EXISTS 값이 나옵니다. 이 값을 확인해서 프로그램 실행 여부를 결정하는 것이 Mutex를 이용한 중복 실행 방지 코드입니다. 다음은 간단하게 작성된 중복 실행 방지 코드 입니다.




출처 : http://securityfactory.tistory.com/296

'Analysis > Theory' 카테고리의 다른 글

Ollydbg_Back To User Mode  (0) 2019.01.06
Themida 단순 Unpack  (0) 2019.01.06
악성코드 'PlugX Dropper'의 설치 방식  (0) 2019.01.06
프로세스와 스레드(Process & Thread)  (0) 2019.01.06

+ Recent posts