해보자고

[CodeEngn] Malware L06 본문

리버싱

[CodeEngn] Malware L06

초코맛동산 2025. 4. 28. 21:29

# 문제

문제 링크 | https://dreamhack.io/wargame/challenges/373

 

[CodeEngn] Malware L06

다음은 악성코드 Flow의 일부분이다. 이 프로그램의 Thread Mutex는 무엇인가

dreamhack.io

다음은 악성코드 Flow의 일부분이다.
이 프로그램의 Thread Mutex는 무엇인가

 

1. Thread Mutex란 무엇인가? 

여러 스레드가 동시에 자원에 접근하는 것을 막기 위한 잠금 장치. 한 스레드가 자원을 사용 중일 때 다른 스레드는 기다리게 하여, 자원이 동시에 수정되거나 손상되지 않도록 보호하는 원리. (워게임에 필요한 지식은 아니지만.. 정의를 알면 무엇을 찾아야 하는 지 알 수 있으니까..)

 

아래는 절대적인 Thread Mutex 구현 순서는 아니지만, 이런식의 흐름을 생각해볼 수 있다. 이를 참고하여 워게임 파일의 흐름을 살펴보자. 

 

1. 스레드 생성 → 2. Mutex 생성 → 3. Mutex 잠금 → 4. 자원 사용 → 5. Mutex 잠금 해제 → 6. 스레드 종료

 

2. 실행 흐름 살펴보기(Thread와 관련한)

 

2.1 Start() 

HANDLE CreateMutexA(
  [in, optional] LPSECURITY_ATTRIBUTES lpMutexAttributes,
  [in]           BOOL                  bInitialOwner,
  [in, optional] LPCSTR                lpName
);

 

createMutexA 함수를 호출하여, 새로운 뮤텍스를 생성하는데, 위의 CreakMutexA의 매개변수 값을 push로 call 전에 넣어주는 것을 확인할 수 있다. bInitialOwner 값이 True 임으로, 생성되자마자 잠겨진 것을 확인할 수 있다.(문제는 thread mutex니까...) 함수가 성공적으로 실행되면 이에 대한 반환 값은 새로 만든 뮤텍스 개체에 대한 핸들러이다. 이 핸들러 반환값을(eax에 저장된) [ebp+h0bject] 위치에 저장하고, GetLastError를 다시 호출한다. 이후 GetLastError의 반환값과 0B7h(183)을 비교해서 false와 true로 분기하는 것이 흐름이다. 

 

그럼 분기하는 조건, 0B7h는 무슨 값일까? 10진수로 변환 시 183, (ERROR_ALREADY_EXISTS)를 뜻하는데, 벌써 존재하는 오브젝트의 핸들을 돌려줄 때 발생하는 오류라고 한다. 

 

 

2.2 loc_401911()

   

HANDLE CreateThread(
  [in, optional]  LPSECURITY_ATTRIBUTES   lpThreadAttributes,
  [in]            SIZE_T                  dwStackSize,
  [in]            LPTHREAD_START_ROUTINE  lpStartAddress,
  [in, optional]  __drv_aliasesMem LPVOID lpParameter,
  [in]            DWORD                   dwCreationFlags,
  [out, optional] LPDWORD                 lpThreadId
);

 

 

thread의 ID 매개변수를 flag로 입력하면...? 

 

 

 

 

 

 

 

 

 

 

 

# 출처


https://learn.microsoft.com/ko-kr/

 

Microsoft Learn: 커리어의 문을 여는 기술 구축

대화형 수업과 기술 설명서를 통해 학습하고, 전문 개발 시간과 인증을 취득하고, 커뮤니티에서 소통합니다.

learn.microsoft.com

 

'리버싱' 카테고리의 다른 글

[드림핵] please, please, please  (0) 2025.04.25
[드림핵] Easy Assembly  (0) 2025.04.24
[CodeEngn] Malware L07  (0) 2025.04.22
[드림핵] Simple Patch Me  (0) 2025.04.21
[드림핵] Small counter  (0) 2025.04.10