Whois 5주차 리버싱 문제 풀이 과제
1. rootME.exe
바이너리를 x32dbg로 연 다음 string 값을 확인해보면 다음과 같다.
여기서 "Gratz man :)" 문자열을 출력해주는 루틴으로 들어가보면,
사용자가 입력한 값이 "SPaCIoS" 면 "Gratz man :)"이라는 문자열을 출력해주고, 아니면 "wrong password"를 출력해준다.
위 "SPaCIoS" 문자열을 넣어주면 정상적으로 FLAG가 출력됨을 확인 할 수 있당
----------------------------------------------------------------------------------------------------------------------
2. EasyReverseMe.exe
문제를 실행시켜 보면 다음과 같다.
대충 값 입력 해서 맞으면 FLAG 주는 문제 같다. 바로 디버거로 까보자
string 값을 확인 해보면 위 문자열을 출력해주는 루틴의 주소를 알 수 있다.
바이너리를 처음 실행할때 출력해주는 문자열을 출력해주는 루틴을 이동하면 다음과 같이 나온다.
먼저 0x49(73)과 값이 같으면 첫 stage를 통과 한다.
그 다음은 문자열을 맞춰주면 된다.
어셈을 보면 알겠지만 puts로 "저는 지금 무슨 생각을 하고 있을까요? 문자열을 출력해준 뒤 fgets로 사용자로 부터 입력을 받은 다음 strcpy 함수로 "I'm so hungry\n"과 검사하여 둘이 같으면 "훌륭해요!"를 출력해줌을 확인 할 수 있다.
그러고 마지막으로 랜던값 하나를 맞춰주면 문제가 풀린당
사용자로 부터 scanf로 입력 받은 값과 랜덤값을 cmp 문으로 비교하는데 우선 사용자 입력 값은 [rbp-c]로 eax 담고 랜덤값은 [rbp-0x8]로 비교하기 때문에 rbp-8에 들어있는 값을 확인하여 input으로 주면 된다.
보니깐 다음과 같이 값이 들어가 있음을 확인 할 수 있다.
이 값을 10진수로 변환해서 넣어주면,
다음과 같이 FLAG를 얻을 수 있다.