일단 실행하면 입력창 하나가 주어진다
임의로 abcde를 넣으면 'Incorrect Password'가 뜨며 중단된다
먼저, 올리로 문자열검사를 해보면 입력값이 맞았을때 넘어갈 곳으로 추측되는 코드가 보인다
성공창을 띄우는 코드와 그 밑에 실패할 경우 창을 띄우는 코드가 있다
실패의 경우로 넘어오는 코드는 004010B5, 004010CD, 0040110B, 00401112가 있다
이 부분에 주의하며 위로 넘어가자
입력한 값을 문자열로 받아오는 함수가 있으며 이를 통해 우리가 입력창에서 입력한 값을 받아오는 것을 알 수 있다
문자열을 받아오는 부분 밑으로 입력값에 대한 판단을 하는 부분이 있다
옆에 나온 ASCII값때문에 정답에 대한 의심을 해 볼 수 있지만 코드를 보며 해결해보자
먼저, 004010B0에서 CMP문이 보인다
여기서는 [ESP+4]의 값과 61가 동일한지 비교하는데, 올리 창의 우측 하단을 보면 스택창이 있다
현재 진행중인 상황에서 ESP를 기준으로 표시해주는 Relative to ESP를 통해 [ESP+5]는 입력값의 2번째 문자임을 알 수있다
따라서, 정답 문자열의 2번째문자는 0x61, a임을 알 수 있다
다음으로 LEA ECX,DWORD PTR SS:[ESP+A]가 있다
여기서는 입력한 문자열의 3번째 문자부터 끝까지 ECX에 들어가는 것을 볼 수 있는데, 이 이후 "5y"와 ECX가 PUSH된다
문자열의 3,4번째 자리가 "5y"가 맞는지 판단하고, 맞지않다면 FFFFFFFF을 뱉어내서 TEST문에서 걸려 실패로 넘어가는 모습을 볼 수 있다
다음으로는 루프가 등장하는데, 입력값의 5번째 문자부터 끝까지 따온 후 "R3versing"과 비교하는 과정이다
두 문자열에서 한 글자씩 따오고 하나하나 비교하는 과정이 담겨있다
마지막으로, [ESP+4]와 0x45를 비교하는 구문이 있다
0x45 == "E"
끝