chipkkang9's story

[Reversing.kr] Easy Crack 문제 write-up 본문

CTF/Reversing

[Reversing.kr] Easy Crack 문제 write-up

chipkkang 2022. 2. 7. 20:46

문제소개


[Reversing.kr] Easy Crack

 

문제풀이


이번에 푼 문제는 리버싱 스터디에서 과제로 정해진

Reversing.kr의 Easy Crack 문제이다.

 

문제를 들어가보면, Easy_CrackMe.exe 파일을 다운받아진다.

 

「리버싱 핵심원리」도서에 있는대로 ollydbg를 사용하고 싶었지만,

오래된 프로그램이라 UI가 익숙하지 않아 x32dbg를 사용하였다.

 

x32dbg로 Easy_CrackMe.exe 파일을 열어본 화면

디버거로 파일을 열고 F9버튼을 누르면 

프로그램이 시작되는 지점으로 넘어간다.

 

F9를 한 번 누른 화면

EntryPoint라고 주석처리되어있는 부분이 프로그램의 시작점이다.

 

여기서 한 번 더 F9을 눌러주면 프로그램이 켜진다.

 

Easy CrackMe

 

그리고 입력창에 아무 문자열이나 입력해주면

 

EasyCrackMe를 입력해준 후 화면

 

이렇게 팝업창이 뜨게 된다.

이렇게 저렇게 봐도 입력창에 올바른 문자열을 넣어주면

문제가 해결되는 간단한 문제같다.

 

그럼 다시 디버거로 돌아와서

디버거의 최상단으로 올라가보겠다.

 

Easy_CrackMe.exe의 디버거 최상단

 

가장 낮은 주소인 00401000부터 BP(BreakPoint)를 걸고

F8을 통해서 하나하나 내려가보면,

00401010의 call ~~ &DialogBoxParamA

위의 그림처럼 프로그램 창을 띄우는 함수이다.

 

그리고 00401070 주소의 함수 뒤에 이어지는

00401080 주소에도 BP를 걸고 다시 처음부터 프로그램을 실행시키면,

(프로그램 창이 띄워지면 확인 버튼을 누르는 단계를 거쳐야 한다.)

 

문자열을 비교하는 함수들

 

00401080의 함수 주소부터 내려가면서 분석해보면,

004010B5, 004010CD, ... 등등 문자열을 비교하는 jne(비교 함수)가 있는 것으로 보아

 

문자열을 입력해준 후, 해당 주소에 함수들이 문자열을 비교하여

옳을 때는 Congratulation !!, 틀릴 때는 Incorrect Password

를 출력하는 것을 알 수 있다.

 

문제의 생김새는 쉬운 것이라 생각되지만,

여기서 살짝 내가 시간이 걸렸던 것은 문자열을 차례대로 비교하는 것이 아니라

2번째 문자부터 끝까지 비교하고, 다시 처음으로 돌아온다는 것이다.

 

004010B0에서 esp+5 주소에 0x61(a)와 비교한다.

004010CD에서 esp+A 주소에 406078(5y)와 비교한다.

004010F2에서 esp+10주소에 40606C(R3versing)과 비교한다.  

그리고 0040110D에서 esp+4 주소에 0x45(E)와 비교한다.

 

키워드들을 주소의 순서에 맞게 나열해주면,

Ea5yR3versing

이 정답임을 알 수 있다.

 

이를 입력해주면,

정답!

예쁘게 정답이 나오는 것을 알 수 있다.

Comments