본문 바로가기
리버싱(Reversing)/CTF(reversing.kr)

Easy Crack - 미완성

by LIZ0904 2020. 9. 21.
반응형

reversing.kr/challenge.php

 

Reversing.Kr

Copyright © 2012-2020 Gogil All Right Reserved.

reversing.kr

Challenge에서 Easy Crack을 클릭하면 Easy_CrackMe.exe 파일을 다운로드 받을 수 있다.

 

 

 

파일 실행 화면

이 파일을 실행해보자!

위와 같은 창이 하나 나오고 아무 값이나 입력하면 에러창이 뜬다. 맞는 비밀번호를 입력해야 풀 수 있는 문제같다.

 

 

 

 

Ollydbg를 이용해 열어주었다. 아까 패스워드를 입력했을 때 'Incorrect Password' 라는 문구가 떴었다. 일반적으로 윈도우 환경에서 메시지 박스를 출력할 때는 MessageBox() API 함수를 이용한다. MessageBox() 함수가 사용됐는지 확인하기 위해 Entry Point 부분에서 마우스 우클릭 -> Search for -> all intermodular calls 기능을 이용해주었다.

 

 

 

 

그 결과로 MessageBoxA 함수를 사용하는 두개의 영역을 확인할 수 있었다. 위 주소(00401121)로 가보자!

 

 

 

 

 

첫번째 메시지 박스는 'Congratulation!!'을 출력해주고, 두번째 메시지 박스는 아까 우리가 봤던 'Incorrect Passwrod'를 띄워주는 역할을 한다. 아마도 패스워드가 맞으면 전자를, 틀리면 후자를 출력해주는 것 같다. 그러기 위해서는 입력한 값과 패스워드를 비교해주는 명령어가 쓰였을 것이다.

 

 

 

 

입력한 값과 패스워드를 비교하는 부분을 찾기 위해 계속 위로 올리다 보면, GetDigitemTextA API 함수를 찾을 수 있다. 이 함수는 다이얼로그 박스에 입력된 텍스트 값을 가져올 때 사용되는 함수이다. 여기(004010AA)에 BP(F2)를 걸고 실행을 시키면, 패스워드를 입력하자마자 저 부분에서 멈추게 된다.

 

 

 

 

그 후 스택 영역을 확인해보면 함수 인자값을 볼 수 있다. 이때 세번째 Buffer 인자값이 패스워드 값을 저장할 포인터를 가리키고 있다.

 

이해가 안간다...

반응형

댓글