CrackMe 3번 문제 풀이
최초 프로그램을 실행하면 이런 창이 뜨게 된다.
올바른 값을 넣으면 풀 수 있는 문제 인 것 같다.
올리디버거로 실행해 보자.
먼저 올리디버거로 접근 후 F8을 통해 실행되는 부분까지 가보았다.
0040152B에서 실행되는 것을 확인했고, 아까와 같은 창이 떴다. 아무 값이나 입력해 보았다.
바로 wrong word!가 뜬 후 종료된다.
유일한 단서인 main으로 접근해봤다.
메인에서 프로그램이 실행되는듯한 함수를 발견했다.
CreateWindowExA, ShoWWindow, GetMessageA 등등
이 후 계속해서 F8로 진행 하였을 시,
무한루프에 빠지는 부분을 발견했다.
여기서 저번에 풀었던 문제와 유사함을 느꼈고,
GetDlgltemTextA라는 저번문제에서도 풀었던 함수가 똑같이 있었다.
여기에 BP를 걸고 다시 시도해 보았다.
아무값이나 입력했을떄 ,
이 부분에 내가 입력한 값이 쌓이는 것을 확인했다.
이후 쭉 실행해 보았을때, Wrong Word!!!가 나왔다.
다시 이 쪽으로 돌아와서
어느 부분에서 Wrong word로 가는지 확인을 해봤는데, 004011DE였다.
어떻게 하면 안 넘어갈 수 있을지 구문들을 해석해봤다.
먼저 위에서 부터 말을 하면
[esp+18]의 값을 EDX 레지스터에 로드한다. --> 내가 입력한 값
[esp+C]의 값을 EAX 레지스터에 로드한다. --> infinity 라는 문구 삽입 되는거 확인
이후 push를 통해 스택에 쌓이게 된다.
이후 004012D0함수에 접근하게 되는데 ,
요약을 해보면 , ebx exi 에 저장된 값을 각각 dl과 bl에 넘겼을때 , 바이트수가 같으면 eax를 0으로 보내는 함수 같았다.
가설을 근거로 infinity를 입력을 해보았다.
EAX값이 0이 되면서 004011DC를 만족해 wrong word!!로 가는 구문으로 향하지 않았다.
계속해서 진행을 해보았다.
maxmin이라는 구문이 뜨면서 종료되었다.