Wargame/reversing.kr

[Reversing.kr] Easy_Crackme 풀이

Omoknooni 2020. 2. 22. 18:03

일단 실행하면 입력창 하나가 주어진다

 

 

 

 

임의로 abcde를 넣으면 'Incorrect Password'가 뜨며 중단된다

 

 

 

 

마우스 우클릭 - [Search for] - [All referenced tet strings]

먼저, 올리로 문자열검사를 해보면 입력값이 맞았을때 넘어갈 곳으로 추측되는 코드가 보인다

 

 

 

 

메시지박스를 띄우는 함수 MessasgeBox

성공창을 띄우는 코드와 그 밑에 실패할 경우 창을 띄우는 코드가 있다

실패의 경우로 넘어오는 코드는 004010B5, 004010CD, 0040110B, 00401112가 있다

이 부분에 주의하며 위로 넘어가자

 

 

 

다이얼로그 대화상자에서 얻어온 값을 문자열로 받는 함수 GetDlgItemText

입력한 값을 문자열로 받아오는 함수가 있으며 이를 통해 우리가 입력창에서 입력한 값을 받아오는 것을 알 수 있다

 

 

 

 

문자열을 받아오는 부분 밑으로 입력값에 대한 판단을 하는 부분이 있다

옆에 나온 ASCII값때문에 정답에 대한 의심을 해 볼 수 있지만 코드를 보며 해결해보자

 

먼저, 004010B0에서 CMP문이 보인다

여기서는 [ESP+4]의 값과 61가 동일한지 비교하는데, 올리 창의 우측 하단을 보면 스택창이 있다

 

 

마우스 우클릭 - [Address] - [Relative to ESP]

현재 진행중인 상황에서 ESP를 기준으로 표시해주는 Relative to ESP를 통해 [ESP+5]는 입력값의 2번째 문자임을 알 수있다

따라서, 정답 문자열의 2번째문자는 0x61, a임을 알 수 있다

 

 

 

 

 

 

다음으로 LEA ECX,DWORD PTR SS:[ESP+A]가 있다

 

 

 

 

입력값 == 1a23456

여기서는 입력한 문자열의 3번째 문자부터 끝까지 ECX에 들어가는 것을 볼 수 있는데, 이 이후 "5y"와 ECX가 PUSH된다

문자열의 3,4번째 자리가 "5y"가 맞는지 판단하고, 맞지않다면 FFFFFFFF을 뱉어내서 TEST문에서 걸려 실패로 넘어가는 모습을 볼 수 있다

 

 

 

 

다음으로는 루프가 등장하는데, 입력값의 5번째 문자부터 끝까지 따온 후 "R3versing"과 비교하는 과정이다 

두 문자열에서 한 글자씩 따오고 하나하나 비교하는 과정이 담겨있다

 

 

 

마지막으로, [ESP+4]와 0x45를 비교하는 구문이 있다

0x45 == "E"