반응형

일단, fd를 들어간 후, 어떤 파일들이 설치되어 있는지 ls명령어를 사용하여 확인한다.

위의 화면을 보면, fd 실행파일과, 소스, flag가 있는 것을 알수 있다.

우리가 얻어야 할 것은 이 flag에 저장되어 있는 키값이다.


이 문제는 소스 분석만 잘한다면 쉽게 풀수 있는 문제이다.(물론 나한텐 어렵지만ㅜㅜ)


cat [파일이름] 명령어를 써주면 파일의 속내용을 화면으로 뿌려주는데, cat fd.c를 하면 fd의 소스를 볼수 있다.

우리가 어떤 값을 입력했을 때, 입력한 개수는 argc에 저장되고 그 값은 배열 argv[]에 저장된다는 것을 알고 있을 것이다.


위에서 부터 천천히 분석해보면 입력하는 값이 2개 이하면 "pass argv[1] a number"가 출력되고 프로그램이 종료된다. 입력하는 값이 두개 이상이되어야 된다는 것을 알 수 있다.


변수 fd에는 atoi(argv[1])-0x1234를 연산한 값이 저장되고, len에는 read(fd, buf, 32)가 저장된다. 여기서 read() 함수를 잘 살펴보아야 한다.

read함수의 첫번째 인자에는 파일 디스크립터가 들어간다.

- 0 : stdin // 1 : stdout // 2 : stderr

두번째인자에는 파일을 읽어드리는 버퍼가 들어가고, 세번째엔 버퍼의 크기가 들어간다.


>>파일 디스크립터에는 파일이 입력되야하므로 fd값은 0이 되어야한다. 어떤 값에서 16진수 0x1234를 뺀 값이 0이 되어야 하므로, 0x1234 즉 십진수로 변환한다면 4660값이 들어가야 한다. (첫번째 입력값은 4660!!!!)

>>두번째 입력값과 문자열 "LETMEWIN"을 비교하였을 때 같아야 하므로!!!답은??ㅋㅋㅋㅋ


소스를 천천히 분석하고 답을 알았으니 fd를 실행시켜 값을 입력하면~~~

flag에 들어있는 키값을 볼 수 있다.


반응형

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

PE헤더-NT Header  (0) 2014.08.03
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07

+ Recent posts