본문 바로가기
Reversing/Wargame

abex' crackme #1

by sseddi 2021. 2. 16.
728x90

먼저 문제를 풀기 위해 사용한 디버거는 immunity Debugger이다.

처음엔 잘 몰라서 F8, F2, F7, F9로 막 들어가 봤다.

종단점 설정해준 부분에서 한번 메시지 박스가 뜬다.

메시지 박스를 닫으면 이건 CD-ROM이 아니라는 메시지가 뜬다.

이 문제를 해결하려면 CD-ROM이 맞다는 메세지 창이 출력되어야 한다.

 

계속 코드 속으로 들어가보다가 아닌 것 같아서 맨 처음 화면을 찬찬히 보기로 했다.

첫 이미지 바로 밑의 코드이다. 오른쪽 부분을 보면 ASCII 코드가 보여서 추측할 수 있다.

어셈블리어 배웠는데 다 까먹어서 다시 찾아서 본 결과

INC : 1증가

DEC : 1감소

CMP : 비교

JE : 같으면 jump

 

근데 저기 JE 부분을 보고 그 주소로 가봤더니

오른쪽 ASCII 코드를 보니 CD-ROM이 맞다는 메시지가 나온 것으로 봐서 내가 가야할 주소였다. 

근데 왜 이동을 안했을까 생각해보니 JE라는 명령어는 같아야 jump 이므로 EAX와 ESI 레지스터 값이 서로 같지 않아 저 주소로 이동하지 않고 실패 메시지 창을 띄운 것이다.

그래서 나는 JE를 JMP(무조건 jump) 명령어로 바꾸어 주었다.

그랬더니 성공 !!

 

/

+) 다른 라업들을 확인해보니 이 방법 말고도 코드를 추가로 작성해 EAX와 ESI 값을 같게 만들어주는 방법이 있었다.

 

++) 분석

JE로 EAX, ESI 레지스터 값이 동일한지 검증한 후 같으면 CD-ROM이 맞다는 메시지가 나오는 코드였는데 EAX와 ESI 값이 어디서 가지고 온 값인지 궁금하다.

코드를 보면 호출되는 함수가 GetDriveTypeA, ExitProcess, MessageBoxA로 3개가 있는 것을 볼 수 있다.

각 함수들을 하나씩 호출되는 순서대로 살펴보자

 

#MessageBoxA

 

 

이렇게 첫 메시지 창을 띄워주는 것이 바로 MessageBoxA

문제에서 일단 이 창이 제일 먼저 뜨는데, 이 창을 띄워주는게 MessageBoxA이다.

 

#GetDriveTypeA

이 함수가 내가 아까 궁금해했던 EAX와 ESI와 관련된 함수인 것을 알 수 있다.

 

#ExitProcess

함수 명만 봐도 종료 함수인 것을 알 수 있다.

759F410D 부분을 거치면 프로그램이 꺼진다.

 

 

 

728x90

'Reversing > Wargame' 카테고리의 다른 글

[CodeEngn] Basic RCE L06  (0) 2021.02.19
abex's crackme #2  (0) 2021.02.18
[suninatas] REVERSING 9  (0) 2021.02.17
[XCZ.kr] Prob.9 Easy Reversing  (0) 2021.02.17
abex' crackme #3  (0) 2021.02.16

댓글