https://dreamhack.io/wargame/challenges/14/
문제 파일을 받으면 이렇게 실행 파일이 존재한다.
터미널에서 실행해 보면
사용자의 입력을 받고 Wrong을 출력하는 걸 볼 수 있다.
IDA로 열어 보자!!
강의를 보긴 했지만 처음 해 보는 거라 막막하기만 하다…
우선 사용자의 입력으로 인해 correct, wrong 이 결정되고 출력되므로 단축키 Shift + F12
를 사용해 correct 문자열을 찾아 보자!!
Ctrl+F
를 통해 correct를 찾아 주고 더블 클릭해 주면 아래와 같은 화면이 뜬다.
View → Open Subviews → Cross References
를 누르면 이 문자열이 참조되는 함수를 볼 수 있다. 사실상 위의 사진에서도 correct는 main+57에서 쓰인다는 것을 알 수 있다.
Functions에서 main
을 누르고 f5를 통해 디컴파일해 보자
디컴파일된 main
함수이다.
sub_14001190
함수를 두번 클릭하면
디컴파일된 sub_14001190
함수를 볼 수 있다.
va_start()
→ 가변 인자 처리
__arct_iob_func()
→ 스트림을 가져옴
- 인자로 들어오는 1은 stdout을 의미
따라서 sub_14001190
함수는 문자열 인자를 받고 stdout
스트림을 내부적으로 사용하는 가변 함수인 printf
함수라고 추정할 수 있다.
다음은 sub_140011F0
함수이다. 위의 함수와 똑같은 va_start()
를 통해 가변 인자를 받는다. __acrt_iob_func()
함수의 인자가 0으로 stdin
스트림을 가져온다. 따라서 이 함수는 scanf
라고 추측할 수 있다.
마지막으로 sub_140001000
함수이다. 인자로 받은 값과 “Compar3_the_str1ng을 비교해 같으면 1을, 다르면 0을 반환한다. 이 함수는 Compare
함수라고 이름을 바꿔 주겠다.
분석된 전체 코드는 이러하다.
printf()
함수를 통해 Input: 을 출력한다.scanf()
함수를 통해 입력을 받는다.- 이 입력값을
Compare
함수의 인자로 넣어 “Compar3_the_str1ng”과 비교한다. - 둘이 같으면 Correct, 다르면 Wrong을 출력한 후 종료한다.
따라서 플래그는 DH{Compar3_the_str1ng} 이라는 것을 알 수 있다.
'드림핵 워게임' 카테고리의 다른 글
[드림핵/워게임] rev-basic-2 (0) | 2023.09.09 |
---|---|
[드림핵/워게임] rev-basic-1 (0) | 2023.09.09 |
[드림핵/워게임] basic_exploitation_002 (0) | 2023.08.17 |
[드림핵/워게임] out_of_bound_000 (0) | 2023.08.17 |
[드림핵/워게임] off_by_one_001 (0) | 2023.08.17 |