해보자고

[드림핵]rev-basic-2 본문

리버싱

[드림핵]rev-basic-2

초코맛동산 2024. 4. 27. 16:14

# 문제

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

 

rev-basic-2

Reversing Basic Challenge #2 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!

 


 

1. main 함수 찾기 

 

가장 먼저 main 함수를 찾아주는데, BP만 잘 걸 수 있다면 이제 main 함수는 금방 찾을 수 있다. f9로 쭉 실행하다가 exe 터미널이 활성화 되는 함수에 BP를 걸어준다. 

 

 

2. 실행 흐름 파악하기

 

전체적으로 wrong과 correct로 분기하는 로직은 rev-basic-0, 1과 같다. 

이제 살펴봐야 할 부분은 test eax, eax 전 무엇을 eax에 담는지, 즉 call cha112.7FF638CE1000을 살펴봐야 한다. 

 

 

3. 디버깅

 

 

call cha112.7FF638CE1000 함수로 들어오면 가장 눈에 띄게 작동하는 부분은 r8+rdx 주소의 값을 edx에 저장하고 edx에서는 이 값을 rcx+rax*4 주소의 값과 비교해주고 있다. 

 

 

나는 input에 LOVE를 입력했다. 그리고 위의 두 명령어를 실행하면 RDX에는 L이 있는 것으로 보아 r8+rdx 주소의 첫 글자를 edx에 저장해주고, 이 값을 rcx+rax*4 주소의 값과 비교해주는 것 같다. 

 

심지어 비교를 한 후 두 값이 같으면 jmp cha11.7FF638CE1012를 통해 계속계속 비교를 해주는 것 같다. 그렇다면 비교해주는 rcx+rax*4에 저장된 값이 플래그일 것이라고 추측해볼 수 있고 해당 주소로 이동해보자. 

 

 

확인하고 싶은 주소를 따라가기 위해 해당 명령어를 마우스로 우클릭 -> follow in Dump -> Address: RCX+RAX*4 를 클릭 클릭해주면 된다. 

 

 

그럼 해당 주소의 dump로 이동을 할 수 있다. 해당 문자열을 모아보면 Comp4re_the_arr4y 플래그가 나오는 것을 확인할 수 있다. 

 

레지스터 윈도우를 통해 RCX+RAX*4와 input값이 비교되는 것을 확인하고 있다.
레지스터 윈도우를 통해 RCX+RAX*4와 input값이 비교되는 것을 확인하고 있다.

 

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

[리버싱] rev-basic-4  (0) 2024.04.28
[드림핵]rev-basic-3  (0) 2024.04.27
[크랙미 ] crackme1  (1) 2024.04.21
[드림핵]rev-basic-1  (0) 2024.04.12
[드림핵] rev-basic-0  (0) 2024.04.11