안녕하세요. comalmot 입니다. 글로서 인사드리는 것은 오늘이 처음인 것 같네요.
앞으로도 포스팅 자주 하도록 노력하겠습니다. 감사합니다.

오늘은 Reversing.kr 의 Easy Crack 이라는 문제를 풀어보도록 하겠습니다.
우선 실행파일을 실행시켜 보아야겠죠? 실행시켜봤습니다.

위와 같이, Easy CrackMe라는 Title을 가지고 있는 프로그램이 나타납니다.
확인 버튼 옆에 있는 것은 EditBox인가보네요...
안에 'aa' 라는 문자열을 입력하고, 확인 버튼을 눌러보았습니다.

Incorrect Password라는 메시지박스가 나타납니다. 이것으로 추정해 보았을 때,
우리는 이 프로그램에 알맞는 어떠한 패스워드를 알아내야 할 것 입니다.
우선 프로그램이 실행되기 직전 상태의 코드까지 실행을 한 후,
OllyDBG의 기능인 Search for -> All referenced text strings로 프로그램 내부의 문자열에 접근합니다.
아래와 같이, 프로그램 내부의 문자열이 나오게 됩니다.
아까 우리가 봤던 String인 Incorrect Password도 있네요.

우선 저는 Congratulation !! 이라고 적힌 문자가 쓰이는 주소인, 0040111B로 이동하였습니다.
아마 이것은 우리가 올바른 패스워드 값을 입력하였을 때 실행될 분기로 추정됩니다.

그 후에, 저는 00401080 주소에 BP를 걸고, 프로그램에 'aa' 라는 입력값을 넣은 뒤에 분석을 진행했습니다.

004010B0 주소에서 값을 비교하는 것이 보입니다. 더 자세히 보도록 하겠습니다.

ESP+5 주소의 값과 0x61을 비교합니다. 여기서 0x61 == 'a' 이므로 저는 JNZ 문으로 인해 실패 분기로 JMP 하지 않았습니다.
ESP+5 주소를 확인해보니 a 가 있었습니다.

검사를 하는 구문은 하나 더 있었습니다.
'5y' 를 스택에 PUSH한 상태로 00401150 주소의 함수가 실행되는데, 함수 내부 코드에 비교하는 구문이 더 있었습니다.

그 구문은 바로 아래 구문입니다.



계속 문자열 '5y'와 입력값을 비교하는 것을 볼 수가 있습니다.
아앗.. 드디어 마지막 입니다.
문자열 R3versing과 입력값을 비교합니다.
반복문을 통해서 비교를 하고 있습니다.

아래와 같이.. 동적분석 중엔 표현이 되므로 쉽게 분석을 할 수가 있었네요..

이제 정말 마지막입니다. 입력값의 첫번째 값을 0x45 == 'E' 와 비교합니다.

모든 분석 결과를 종합해보면
Ea5yR3versing 이라는 결과가 나옵니다!!!

클리어!