
문제가 남은 군생활이다...
현재 북한과 러시아의 전쟁 관련 소식 등등 여러가지 상황으로 조용한 날이 없다
현재 복무중인 모든 군인분들께 감사를 표한다
문제를 실행해보면

이러한 화면이 등장하는데 실제로 군생활이 오래 가는 것처럼 확인을 눌러도
프로그램이 종료되지 않고 숫자가 증가하며 메시지창을 계속해서 열어준다
언제까지 확인을 누를수는 없어서 작업관리자를 통해 강제종료하였다...ㅎㅎ
패킹 여부를 확인하기 위해 detect it easy에 올려보았더니 UPX패킹이 된 상태였다
(물론 pushad 명령어를 통해 패킹 여부를 확인이 가능하다)

터미널을 통해 UPX 언패킹을 해주자

그러고나서 Ollydbg에 올려서 실행을 해보는데, 중간에 다른 창이 등장한다

아마도 디버거를 감지하는 함수가 존재하는 듯 하다
함수의 목록을 확인해보니 IsDebuggerPresent 함수가 존재한다

세 함수를 직접 다 살펴본 후 제일 위에 위치한 함수에서 우회할 방법을 찾을 수 있었다

TEST EAX, EAX 부분이 존재하는데, 이를 CMP로 바꾸면 우회가 가능하다
CMP로 패치 파일을 만들어서 다시 Ollydbg로 파일을 확인해보자
함수 목록을 확인하면서 Messagebox 함수가 존재하는 것을 알 수 있었다
알림창을 열기 위해서 당연한 과정이지만, 우리에겐 힌트가 되는 함수이다

왜냐하면 박스를 출력하기 전 필요한 정보를 어딘가엔 저장을 할 거고,
그것을 Messagebox 함수가 우리에게 보여줄 것이기 때문이다
쉽게 확인하기 위해 모든 Messagebox에 breakpoint를 설정하고,

F9을 눌러 어느 부분에서 멈추는 지 확인해보자

이 부분에서 멈춘 뒤, F8을 눌러 실행을 계속해보면 여태까지 보았던 알림창을 볼 수 있었다
이제 이 함수를 실행하기 전 어떠한 루틴을 반복하는지 확인해보자
F4, F7, F8을 적절히 눌러가며 확인을 해보면 생각보다 루틴이 긴 것을 알 수 있고,
F8만 누르다보면 어느샌가 0045E071로 돌아와서 알림창을 보게 된다
그래서 F7을 중간에 눌러주면

이러한 주소에 들어올 수 있다 여기서도 천천히 인내심을 가지고 확인을 해보면
cmp 명령어로 비교하는 부분이 존재한다

ebp의 값이 316이다 16진수이므로 10진수로 변환해보자

790일임을 알 수 있다 정답인증은 MD5 해시값(대문자) 변환 후 인증하라고 했으므로
간단하게 파이썬 코드를 통해 해결 가능하다
import hashlib
data = str(790)
md5_hash = hashlib.md5()
md5_hash.update(data.encode('utf-8'))
result = md5_hash.hexdigest()
result = result.upper()
print(result)

'CodeEngn' 카테고리의 다른 글
| [CodeEngn]Advance RCE 05 Write Up (8) | 2024.10.30 |
|---|---|
| [CodeEngn]Advance RCE 04 Write Up (0) | 2024.09.11 |
| [CodeEngn]Advance RCE 03 Write Up (1) | 2024.09.11 |
| [CodeEngn]Advance RCE 02 Write Up (2) | 2024.09.09 |
| [CodeEngn]Advance RCE 01 Write Up (2) | 2024.09.07 |