Dreamhack - rev-basic-0 (리버스 엔지니어링 기초)

·2025년 7월 1일

Dreamhack-Writeups

목록 보기
9/52

rev-basic-0

문제 링크

https://dreamhack.io/wargame/challenges/14

문제 설명

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

풀이과정

  1. 제공된 chall0.exe파일을 실행하면 input : 이라는 문자열이 출력되며 사용자의 입력을 받는 프로그램임을 알 수 있습니다. 플래그 값을 입력하면 "Correct"가 뜨는 구조입니다.

  2. x64dbg을 이용해 chall0.exe 파일을 열어봅니다.

  3. 우클릭 후 다음을 찾기 > 모든 시스템 모듈 > 문자열 참조 을 통해 "Correct" 문자열을 검색합니다.

  4. "Correct" 문자열이 출력되는 코드 근처에서 다음과 같은 흐름을 확인할 수 있었습니다.

    • 먼저 사용자에게 input : 을 출력합니다.
    • 이후 사용자의 입력을 [rsp+20] 주소에 저장합니다.
    • 00007FF6689C114E | call chall0.7FF6689C1000 는 검사함수로, 입력을 저장한 [rsp+20]을 검사합니다.
    • 입력값이 플래그 값과 다르다면, 즉 eax == 0 라면 wrong, 같다면 correct을 출력합니다.
  5. 입력한 값이 정답인지 검사하는 함수인 00007FF6689C114E | call chall0.7FF6689C1000 이 핵심함수임을 알 수 있었습니다.

  6. 더블클릭해 그 함수에 들어가 보았습니다. 플래그로 의심되는 문자열을 찾아낼 수 있었고, 이를 chall0.exe에 입력해보니 correct 메세지가 출력되어 플래그임을 알 수 있었습니다.

+) ida로 푸는법
1. f5로 디컴파일해준다.

코드를 확인해보니 sub_140001000 이라면 correct가 나오는 것을 확인할 수 있다.
2. sub_140001000을 더블클릭하여 들어가보니 간단하게 정답을 획득할 수 있었다!


배운점

  • 기본적인 리버싱에 대해 익힐 수 있었습니다.
  • x64dbg 사용법을 익히고, 디버거를 통해 실제 실행 흐름을 분석할 수 있었습니다.
  • 어셈블리 언어로 입력된 언어를 해석하는 법을 배워볼 수 있었습니다.

Summary (English)

  • The given binary (chall0.exe) prompts for user input and prints either "Correct" or "Wrong" based on the input.
  • Opened the binary in x64dbg and searched for the "Correct" string through string references.
  • Traced the code that handles user input and identified a call to a verification function (call chall0.7FF6689C1000).
  • This function checks whether the input matches the expected flag.
  • Navigated to the verification function and found the correct input value (flag).
  • Entered the discovered value in chall0.exe and confirmed it prints "Correct".
profile
CTF 풀이 및 실습 중심 학습을 기록합니다.

0개의 댓글