Reversing >> mess

 

 

문제는 아래 버튼을 클릭하면 파일을 다운 받을 수 있다.

 

Mess.zip
0.01MB

 

 

  • Running a file

파일을 실행하면 ‘비밀을 찾아라’ 하면서, 난독화된 문장이 있다.
test 라고 입력하니 fail. 이라고 출력하고 프로그램이 끝난다.

 

  • Write up

ollydbg로 위 프로그램을 디버깅 했을때 아래 사진에서 멈추었다.

 

Entry point를 찾기 위해 시도 해본 결과, 주소가 00CD2040 인 Entry point 를 찾았다.

 

 

이제 프로그램이 시작할때 출력되는 문자열이 어디 있는지 찾아보자.
00CD218B에서 어떤 함수를 call 하게 되는데, 여기서 문자열이 출력이 되었다.
call 하는 주소에 들어간다.

 

해당 주소로 들어오니 여러개의 함수를 호출하고 있는데, 그 중 맨 아래 있는 call에서 문자열이 출력이 되었다.
해당 주소로 들어간다.

 

 

드디어 우리가 찾던 문자열이 아래 사진의  노란색 박스 에 보이게 된다.
F8을 눌러보면서 하나씩 실행 해보니,   초록색 박스 에서 몇번의 반복을 하게 된다.
 초록색 박스 는 무언가를 한다는 생각이 들었다.

그런데 생각을 해보면   노란색 박스 에 ASCII 문자로 S3CRe7PA5sW0rD 라는 문장과 또 다른 문장을 stack에 push 하고
00CD1352 라는 함수를 호출한다. 밑에도 똑같은 함수를 호출하는 것으로 보아, 이 주소는 printf 함수 임을 알 수 있다.

stack에는 함수에 값을 전달 할때 인자를 거꾸로 전달하게 된다.
S3CRe7PA5sW0rD 라는 문장을 먼저 stack에 넣고 또 다른 문장을 넣는 것으로 보아, S3CRe7PA5sW0rD 이 문장은 실행할때 본적이 없는 문장이므로
flag라는 생각이 들었다.

초록색 박스는 S3CRe7PA5sW0rD 이 문장을 난독화 하기 위한 작업 이었다.
실제로 위 반복문을 돌려보니 아까 프로그램을 실행할때 봤던 난독화된 문장이랑 똑같은 것을 알 수 있다.

 

그래서 프로그램을 실행한 뒤 S3CRe7PA5sW0rD 값을 넣었더니 flag를 얻을 수 있었다.

 

'CTF > TRUST' 카테고리의 다른 글

[TRUST] – mess write up  (0) 2019.04.06
[TRUST] – Easy Taebo write up  (0) 2019.04.06