Reversing/Reversing.kr

[reversing.kr] Easy Crack

Roronoa 2022. 9. 27. 02:09
반응형

문제 설명

[그림 1] Easy Crack 실행

 Easy Crack을 실행하면 문자열을 입력받을 수 있는 창이 뜨고 확인을 누르면 문자열이 키와 맞는지 검증하는 프로그램이다.

[그림 2] Password가 틀렸을 시

Password가 틀렸을 경우 Incorrect Password라는 경고창을 띄운다.

flag값은 올바른 Password값이다.

문제 풀이

x64디버거를 사용하여 리버싱해보도록 하겠다.

[그림 3] x64dbg 실행

처음에 실행하면 이런 화면이 뜬다.

f9번을 눌러 entry포인트로 진입하도록 하겠다.

[그림 4] entry포인트 진입

라이센스 키를 검증하는 방법은 여러가지가 있지만 콜스택을 이용하여 검증부분을 찾는 방법을 선택하겠다.

첫 번째, f9번을 눌러 프로그램을 실행한 후 아무값이나 입력을 넣어서 경고창을 띄운다.

두 번째, 중지버튼을 누른다.

마지막 호출 스택에 들어간다.

 

[그림 5] 호출 스택

호출 스택에 들어가면 최근에 불러온 easy_crackme.00401148을 확인할 수 있다.

여기 부분이 경고창을 띄우는 부분일것이라고 생각하고 더블클릭한다.

 

[그림 6] msgbox 부근

더블클릭하여 확인해보니 메시지박스 검증부분에 도달하였다. 주석을 보면 Incorrect Password와 Congratulation이라는 문자열을 확인할 수 있다.

Congratulation부분이 올바른 키값을 입력하였을 때 나오는 것을 알 수 있다.

먼저 이 함수부분의 젤 위로 들어가서 하나씩 살펴보겠다.

 

[그림 7] 키 검증 함수 시작부근

시작부근에 브레이크포인터를 건 후 살펴보겠다.

입력값으로 1234를 넣었다.

[그림 8] 첫번째 검증 부근

이 부근에서 esp+5의 값과 0x61과 비교를하고 있고 같지 않으면 실패부근으로 점프를 한다.

메모리에서 ctrl+g를 눌러 esp+5의 값을 확인하면 2가 들어있고 내가 입력한 문자열의 두번째와 0x61(a)과 비교한다.

두번째 글자가 a인것을 알아냈다.

 

[그림 9] 두번째 검증 부근

call을 하기전에 push로 두개의 값을 입력받고 있다.

첫번째로는 5y라는 값을 입력받고 두번째 ecx의 값을 입력받고있다.

ecx값을 확인해보면 내가 입력한 문자열의 세번째인것을 알 수 있다. 따라서 세번째와 네번째 문자열이 5y라는 것을 알 수있다.

 

[그림 10] 세번째 검증 부근

dl과 bl을 검증하고 있는데 bl의 값은 R3versing이고 dl은 다섯번째 위치인것을 확인할 수 있다.

계속실행하면 다섯번째부터 하나씩 검증을 한다. 따라서 다섯번째부터 문자열이 R3versing인 것을 알 수 있다.

 

[그림 11] 마지막 검증 부근

우리는 아직 첫번째를 검증을 하지 않았다. 근데 이 부분은 마지막 검증 부근이기 때문에 첫번째라는 것을 예측할 수 있다.

하지만 혹시 모르니 살펴보겠다.

cmp로 esp+4의 위치의 값과 45(E)를 비교하고 있다. esp+4를 찾아보면 첫번째 부분인것을 알 수 있다.

역시 예상대로 첫번째가 맞았다.

첫번째 문자 : E

두번째 문자 : a

세네번째 문자 : 5y

다섯번째부터 마지막까지의 문자 : R3versing

다 합치면 Ea5yR3versing이다.

 

정답은 Ea5yR3versing이다.

반응형