https://dreamhack.io/wargame/challenges/14
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾는 문제입니다.
제공된 chall0.exe파일을 실행하면 input : 이라는 문자열이 출력되며 사용자의 입력을 받는 프로그램임을 알 수 있습니다. 플래그 값을 입력하면 "Correct"가 뜨는 구조입니다.
x64dbg을 이용해 chall0.exe 파일을 열어봅니다.
우클릭 후 다음을 찾기 > 모든 시스템 모듈 > 문자열 참조 을 통해 "Correct" 문자열을 검색합니다.

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

input : 을 출력합니다.[rsp+20] 주소에 저장합니다.[rsp+20]을 검사합니다.eax == 0 라면 wrong, 같다면 correct을 출력합니다.입력한 값이 정답인지 검사하는 함수인 00007FF6689C114E | call chall0.7FF6689C1000 이 핵심함수임을 알 수 있었습니다.
더블클릭해 그 함수에 들어가 보았습니다. 플래그로 의심되는 문자열을 찾아낼 수 있었고, 이를 chall0.exe에 입력해보니 correct 메세지가 출력되어 플래그임을 알 수 있었습니다.


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

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

chall0.exe) prompts for user input and prints either "Correct" or "Wrong" based on the input.call chall0.7FF6689C1000).chall0.exe and confirmed it prints "Correct".