jyamethyst21 님의 블로그

[DreamHack] Reversing : rev-basic-0 문제 풀이 본문

WARGAME 🔫

[DreamHack] Reversing : rev-basic-0 문제 풀이

jyamethyst21 2025. 9. 22. 16:56

문제:

요즘 워게임보다 코드에 집중을 했던 터라 오랜만에 다시 워게임에 손을 대봤다. 유료로 바뀐 드림핵.. 동아리 계정을 받게 되어 다시 들어가볼 수 있었다! 예전에 리버싱 처음 배울 때 풀었던 문제인데 요즘 통 리버싱을 안했어서.. 다시 감을 익히기 위해 기초 문제부터 손을 대볼까한다.

 

해당 문제는 correct를 출력하는 값을 찾으면 되는 아주 간단한 문제이다. 바로 풀이로 넘어가보도록 하겠다.

 

풀이:

파일 구조를 살펴보기 위해 IDA를 활용하여 구조를 살펴보았다.

if문과 같이 두 갈래로 나뉘는 곳에 "Correct"라는 문자열이 있는 것을 볼 수 있다. 아마 IDA도 x64dbg 처럼 문자열 검색이 있을거라 correct라고 검색해서 찾으면 좀 더 쉬울 것이다. 하지만 오랜만인만큼 정석대로 풀어볼까한다.

 

맥 기준 F5를 누르면 위와 같이 C코드로 보기 쉽게 만들어준다. 사용자로부터 입력값을 받고 sub_140001000이라는 조건을 통과하면 Correct라는 문자열이 출력되는 것을 알 수 있다.

sub_140001000 함수에 들어가보겠다.

a1과 "Compar3_the_str1ng" 문자열을 비교해서 일치하면 0이 출력되는데 이게 0이면 True를 반환해줄 것이다. (0==0 이므로)

그래서 이 값을 같게 만들어주면 puts("Correct")를 통해 우리가 원하는 Correct가 출력되므로 결국 flag는 "Compar3_the_str1ng"이다!