반응형

15.exe
0.41MB

 


 

Basic 15번 문제는 Delphi로 작성된 언어이다.

 

 

x32dbg로 EP 코드 부분을 확인하면 위와 같다.

 

패킹이 되어 있지 않아 바로 EP 부분을 확인할 수 있다.

 

 

문자열 찾기 기능을 이용하면 위와 같이 문자열들이 뜨는데, "CRACKED" 문자열을 더블 클릭해 이동한다.

 

 

"CRACKED" 문자열 출력 이전에 "You cracked the UBC CrackMe#1 ! Please send your solution to ubcrackers@hotmail.com !" 문자열을 출력하는데, 이 부분은 Serial 값과 일치하는 값을 입력했을 때 출력되는 부분으로 458837 주소의 jne 명령어에 의해 조건 분기한다.

 

 

458837 주소에 BP를 걸고 F9로 실행하여 "CodeEngn" / "slayslay" 를 입력한 후 Check it!를 누른다.

 

 

그러면 위와 같이 어떠한 함수 내부에서 멈추게 되는데 위에서 프로그램 실행 했을 때 봤던 "is not a valid integer value" 문자열을 출력한다.

 

 

Ctrl + F2로 재실행 후 458837 주소의 BP를 삭제하고, 45882C 주소에 BP를 걸고 실행한 후 CodeEngn / slayslay 를 입력하고 Check it!를 누른다.

 

그리고 407774 주소의 함수의 반환값이 45B844 주소에 있는 값과 같으면 일치하는 Serial 값을 입력했을 때의 문자열이 출력된다.

 

그러므로 407774 주소의 함수 내부로 들어간다.

 

 

함수 내부로 들어가면 위와 같은 코드가 나오는데

 

402974 주소의 함수 호출 후 ebp-4 주소에 있는 값이 0이면 이 함수를 빠져나가 일치하는 Serial 값을 입력 했을 때 출력되는 문자열을 출력한다.

 

그렇다면 402974 주소의 함수 내부로 들어간다.

 

 

402974 주소의 함수는 입력된 Serial 값이 문자 형태인지 검사하는 함수이다.

 

즉, Serial 값은 숫자 형태라는 것이다.

 


풀이

 

 

Ctrl + F2 키로 재실행 후 이전에 BP를 걸었던 주소들의 BP는 모두 제거하고 458831 주소에 BP를 걸고 F9를 누른다.

 

 

CodeEngn / 1111을 입력한다.

 

 

그러면 407774 주소의 함수의 반환값과 45B844 주소의 값이랑 비교하여 같으면 "You cracked the UBC ~~~" 문자열을 띄운다.

 

 

EAX에 담긴 값은 457로 Serial 값으로 입력했던 1111이 16진수로 변환된 것이다.

 

그리고 45B844 주소의 값은 6160인데, 이는 24928을 16진수로 변환한 것이다.

 

cmp 명령어에서는 16진수와 16진수를 비교하는데 하나는 내가 입력했던 Serial 값이므로 다른 하나는 문제의 답이 되는 Serial 값이다.

 

 

반응형

'전쟁 > codeengn' 카테고리의 다른 글

[codeengn] Basic RCE 17  (0) 2022.10.12
[codeengn] Basic RCE 16  (0) 2022.07.31
[codeengn] Basic RCE 14  (0) 2022.07.30
[codeengn] Basic RCE 13  (0) 2022.07.29
[codeengn] Basic RCE 12  (0) 2022.07.29

+ Recent posts