◾문제 파악
프로그램을 실행시키면 문자열을 입력하라는 Input 메시지가 뜨게 되고
아무 문자열이나 입력하면 Wrong 이라는 결과 값이 표시가 된다
고로 Correct를 표시하게 하는 문자열도 존재한다는 것을 알 수 있다
◾정적 분석
IDA 프로그램을 사용하여 chall0.exe 파일을 분석해본다
우선 Correct라는 문자열이 사용된 위치를 찾기 위해 문자열 검색을 하자
shift + F12를 누르면 문자열 리스트가 나오게 된다
여기서 Correct라는 문자열을 쉽게 찾을 수 있다
더블 클릭하여 어셈블리 코드에서 문자열을 출력하는 위치를 찾는다
버퍼에 Correct가 저장되어 출력되는 것이므로
Buffer를 선택하고 x 단축기를 눌 상호참조를 해본다
그러면 이런식으로 메인 함수로 이동하게 되고,
F5를 눌러 디컴파일을 진행한다
디컴파일을 하게되면 읽기 쉬운 상태가 되는데
우리는 if 문 안에서 sub_140001000 함수로 입력한 값을 보내어
리턴된 값에 따라 Correct와 Wrong 중 하나를 출력하는 구조임을 확인할 수 있게 되었다
그렇다면 sub_140001000 함수가 어떻게 생겼는지 확인해 볼 필요가 있겠다
◾문제 해결
strcmp 함수로 전달 받은 인자가 "Compar3_the_str1ng"과 같으면 1을 반환하고
다르면 0을 반환하는 구조임을 확인할 수 있었다
따라서 flag는 "Compar3_the_str1ng" 임을 알 수 있었다