Challenge에 들어가면 Easy Crack이란 문제가 있다.
누르면 아래와 같은 실행파일을 다운받게 된다.
이 실행파일을 실행하게 되면 아래와 같이 Password를 입력하는 창이 실행된다.
ABCDEFGH를 입력해보았다.
그랬더니 아래와 같이 오류 창이 뜬다.
OLLydbg 툴로 리버싱 해보겠다.
먼저 OLLydbg툴로 실행파일을 열어서
Log data 탭을 실행시켜 아래 그림처럼 빨간 네모를 누른다.
그럼 아래 그림처럼 실행이 되는데 빨간 네모가
아까 다운받은 Easy_Crack me 실행파일의 첫 부분이다.
그런 다음 마우스 오른쪽을 눌러 아래 그림처럼 빨간 네모를 누른다.
다음으로 아래 그림처럼 또 빨간 네모를 누른다.
그럼 아래 그림처럼 실행파일의 주요 기능들을 볼 수 있다.
우리가 확인해야 될 것은 아래 빨간 네모이므로 이 부분을 누른다.
그 이유는 실패하는 곳을 확인해 실패 요인을 알아내면 성공을 얻을 수 있기 때문이다.
Incorrect Password 부분은 00401135부터 시작하는 부분이므로 위로 올라가면서
00401135로 이동하는 부분들을 모두 확인해둔다.
우선 004010B5 부분을 보게되면 그 위에 CMP 명령을 확인 할 수 있다.
CMP 명령은 비교하는 명령이므로 ESP+5와 0x61을 비교하는 것이다.
0x61은 아스키값으로 a이다.
그럼 ESP+5의 위치를 알아보자.
위 그림의 네모 부분에 Break Point( F2 )를 걸어놓고
실행( F9 )하게 되면 Password를 입력하는 창이 뜨는데
ABCDEFGH를 입력해준다.
그 후 Registers 영역을 보게되면 ESP의 위치를 확인 할 수 있다.
다음으로 Stack 영역에서 마우스 오른쪽을 누른후 아래 그림들과 같이 하게되면
아래 빨간 네모와 같은 결과가 나온다.
이것으로 쉽게 ESP구간을 확인 할 수 있다.
아래 그림의 빨간 네모를 누르게 되면
아래 그림과 같이 내가 입력한 값들도 확인 할 수 있다.
자 이제 ESP 구간을 보게되면 ESP 시작주소는 0019F7D4라고 나와있다.
ESP+4 = 0019F7D4+4 이므로 0019F7D8이 된다.
따라서 ESP+5 = 0019F7D9가 된다.
입력한 값과 ESP 주소를 맞춰보면 아래 표가 된다.
ESP 주소 | 0019F7D4 | 0019F7D5 | 0019F7D6 | 0019F7D7 | 0019F7D8 | 0019F7D9 |
값 | 10 | 60 | 00 | 80 | 41 | 42 |
따라서 ESP+5의 값은 입력한 값의 두번째 자리인 것을 확인 할 수 있다.
그럼 두번째 자리의 문자는 a라는 것을 알게 되었다.
이제 다음으로 004010CD 부분을 보자.
이 부분도 BreakPoint를 걸고 재실행 시켜보자.
단 Password로는 AaBCDEFG를 입력한다.
그럼 아래 그림과 같은 Registers 영역이 나올것이다.
입력한 Password 중에서 CDEFGH만 나타나는데
아마 이 부분은 입력한 문자의 3번째 자리부터 비교하는 것 같다.
그럼 세번째부터 5y가 Password라는 것을 알 수 있다.
다음으로 아래 그림 부분을 본다.
위 그림의 빨간 박스 전 명령들을 보게되면
먼저 EBX와 ESI를 PUSH 하고나서 ESI에 0040606C주소에 해당하는 값을 MOV 한다.
DUMP영역을 보게되면
이렇게 나와있다.
00406068주소에 해당하는 Hex dump값은 00이므로
0040606C주소에 해당하는 Hex dump값은 52, 즉 아스키 값으로 R이 된다.
다음으로 LEA 명령으로 EAX에 ESP+10의 위치를 담는다.
아래 그림의 파란 네모를 보면 004010DA의 주소에는 DL에 EAX를 담고
004010DC의 주소에는 BL에 ESI를 담는다고 되어있다.
Registers 영역을 확인한 아래 그림의 네모박스 2개는 EAX와 ESI의 값을 보여준다.
결국 004010DA부터 004010FC까지 반복문을 돌면서 입력한 Password 값과 R3versing이
일치하는지 확인하는 반복구문이다.
그렇다면 현재까지 알아낸 Password는 a5yR3versing이다.
이제 마지막으로 아래그림의 빨간 네모를 확인하자.
빨간 네모를 보게되면
ESP+4의 부분과 0x45를 비교하는 CMP 명령이 있다.
ESP+4는 입력하는 Password의 첫번째 자리이므로 0x45의 아스키 값은 E
즉. Password는 Ea5yR3versing이 된다.