일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 간단한 깃허브 블로그
- 드림핵 플래그
- 안드로이드 리버싱
- 깃허브 블로그 만들기
- 더오름
- 리버싱
- adb 옵션
- 인프런 깃허브 강의
- 안드로이드 모바일 앱 모의해킹
- 위니브
- adb
- 깃허브 블로그
- 잔디 심기
- dreamhack reversing
- 인프런 파이썬 강의
- 제주코딩베이스캠프
- 드림핵 리버싱
- 자바스크립트
- 리버싱 플래그
- 인프런 강의 추천
- 파이썬
- 티스토리챌린지
- 자바스크립트 강의
- 기드라
- 깃허브 포트폴리오
- 웃긴 파이썬
- 안드로이드 adb
- 오블완
- 강의 체험단 1기
- 제주ICT
- Today
- Total
해보자고
[CodeEngn] Malware L06 본문
# 문제
문제 링크 | 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 |