본문 바로가기

Reversing/DreamHack

[DreamHack_wargame] rev_basic_1번

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

 

 

1. 메인 함수

아래 그림의 위 박스 아래에서 세번째 줄을 보면, call을 통해 함수를 호출하고,

eax0이면 wrong, eax0이 아니면 correct로 감을 확인할 수 있다.

따라서 위의 call 함수가 주어진 값과 입력받은 값을 확인하는 함수임을 알 수 있고,

해당 문제에 따라 correct가 되기 위해서는 eax값은 0이 아니어야 한다.

 

2. 비교 함수

:rax를 계속 증가시키면서 cmp를 통해 주어진 문자열의 문자와 입력받은 문자열의 문자를 하나씩 비교한다.

, 문자열이 같으면 다음 문자로 넘어가는 식으로 동작한다.

그렇게 끝까지 내려가면, eax1을 넣고 비교 함수는 종료된다.

위의 main 함수에서 언급한 것과 같이, correct가 되기 위해서는 eax0이 아니어야 하므로,

위의 어셈블리 코드에서 비교하는 문자열들을 다 합치면 "Compar3_the_ch4ract3r"이다.

 

* 이때, 비교하는 43, 6F 등의 값은 16진수 표기법이므로, 주석이 없더라도 찾을 수 있음.

 

 

정답 : "Compar3_the_ch4ract3r"

'Reversing > DreamHack' 카테고리의 다른 글

[DreamHack_wargame] rev_basic_5번  (0) 2021.05.15
[DreamHack_wargame] rev_basic_4번  (0) 2021.04.13
[DreamHack_wargame] rev_basic_3번  (0) 2021.04.13
[DreamHack_wargame] rev_basic_2번  (0) 2021.04.12
[DreamHack_wargame] rev_basic_0번  (0) 2021.04.12