반응형

reversing.kr 문제 풀이 / 1. Easy Crack - 100pt

Easy Crack을 실행해 보겠습니다. 

메시지 박스가 출력되는데, 여기에 "aaaaaaaaaa"을 입력하고 확인을 눌러보겠습니다.

아래와 같이 패스워드가 잘못되었다고 에러 팝업이 출력됩니다. 

우선 실행파일의 구조를 살펴보겠습니다. 

시작 주소는 00401188이고, C/C++ 언어로 만들어진 프로그램이란 걸 확인할 수 있습니다. 

 

이제 이 프로그램을 ollydbg로 리버싱해보겠습니다. 

처음부터 Step Over(F8)로 끝까지 한번 돌려보고 대충 파악한 해봅니다. 

그리고 search for > All referenced text string으로 "Incorrect Password" 문구를 찾습니다. 

이 문구에 대한 주소로 이동해 보겠습니다. 

그 주소에서 맨 위쪽 코드를 보면 확인 버튼을 눌렀을 때 발생하는 코드인 것을 추정할 수 있습니다. 

여기에 breakpoint를 걸고 tracing하면서 살펴보겠습니다. 

004010AA 주소에서 GetDlgItemTextA 함수를 수행해보면,

메시지 박스에서 입력한 텍스트인 "aaaaaaaaaa"를 스택에 넣는 것을 확인할 수 있습니다. 

그리고 입력값의 두번째([ESP+5]) 값과 61(a)를 비교하는 것을 확인할 수 있습니다.  

두번째 값이 a가 아니면 에러 팝업을 발생하는 코드로 분기됩니다. 

두번째 값은 a인 것을 알 수 있습니다.

두번째 값이 61(a) 라면 JNZ 바로 아래 코드를 수행하게 됩니다. 

그리고 전달인자로 2, "5y", ECX 값을 가지고 Easy_Cra.00401150 함수가 호출됩니다. 

여기서 ECX 값은 DWORD PTR SS: [ESP+A] 값으로 입력된 값의 3번째 값부터 마지막값으로 들어갑니다. 

그래서 ECX는 "aaaaaaaa" 의 값을 가집니다. (입력한 값은 "aaaaaaaaaa" (a가 10개)이고, ECX는 a가 8개) 

Easy_Cra.00401150 함수 내부로 들어가 동작을 살펴보겠습니다. 

00401176에 AL과 DS를 비교하게 됩니다. 

"5y"와 입력한 값의 세번째, 네번째 값과 비교하는 것을 알 수 있습니다. 

세번째, 네번째 값을 5y로 입력값을 넣고, 다시 수행해봅니다. 

 

다시 수행해보면 5y와 세번째, 네번째 값인 '5y'와 비교를 하고, EAX를 0으로 만드는 것을 볼 수 있습니다. 

함수를 빠져나오면, EAX가 0이라 JNZ에서 바로 아래 코드를 수행하는 것을 볼 수 있습니다. 

그 다음 코드는 'R3versing' 문구와 비교하는 것을 볼 수있습니다. 

입력값을 'aa5yR3versing'으로하고 다시 수행해보겠습니다. 

그리고 입력값의 첫번째 값과 0x45('E')과 비교를 합니다. 

하여 입력값을 'Ea5yR3versing'로 하여 다시 수행해보겠습니다.

 'Ea5yR3versing'를 입력값으로 하였을 때, 아래 구문이 수행되는 것을 볼 수 있습니다. 

그리고 Congrtulation !! 메시지 박스가 뜨는 것을 볼 수 있습니다. 

 

'Ea5yR3versing' 값을 아래 입력란에 입력하여 인증하면 Easy Crack 문제가 resolved됩니다.

 

Reversing.Kr

This site tests your ability to Cracking & Reverse Code Engineering. Now Challenge a problem for each environment. (Windows, Linux, .Net, Flash, Java, Python, Mobile..) Admin E-Mail: gogil@reversing.kr

reversing.kr

 

반응형

+ Recent posts