1. homework
1.1 파일 분석
- homework 파일을 실행 결과를 보니 사용자가 입력한 값을 1~9까지 곱한 결과를 출력해주는 프로그램임
- gdb에서 i fu 명령어로 확인해보니 main함수와 func 함수가 존재하는 것을 알 수 있음
- pd main 명령어로 main함수의 코드를 볼 수 있음
- 함수 프롤로그 이후 main+6 코드줄에 sub esp,0x4는 스택에 4bytes 공간을 확보해주는 코드로, 사용자에게 입력받은 정수를 저장할 변수를 위해 공간을 확보함
- 그리고 scanf 함수를 호출하여 사용자로부터 입력값을 받게끔 하여 현재 분석중에는 10을 입력함
- x/10wx $ebp-0x4 명령어를 통해 ebp-0x4에 들어있는 값을 확인해보니 scanf함수 호출했을 때 입력했던 10이 들어가 있음(16진수a = 10진수 10)
- eax레지스터에 ebp-0x4의 값을 담아주고 func함수에 인자로 사용자가 입력한 값(10)을 전달함
- func함수 내부로 들어온 뒤 함수 에필로그를 지나 sub esp,0x4 코드로 4bytes공간을 확보한 뒤 1을 넣어줌
- func+46 주소로 점프함
- cmp, jle로 비교연산자가 나오며, ebp-0x4에 담겨있는 값(현재 1)이 9보다 작거나 같으면 func+15 주소로 이동하라는 코드임
- func+15 주소로 이동해보니 ebp+0x8과 ebp-0x4를 곱한(imul) 값을 eax레지스터에 저장하는 코드임
- ebp+0x8 에는 사용자가 입력한 값 a(10) 이 들어있고 ebp-0x4에는 1이 들어가 있음
- printf함수를 호출하기 전 3개의 인자를 넘겨 받아 %d * %d = $d\n를 출력함
- 이후 ebp-0x4에 1을 더해주며 아까와 같은 비교연산자로 되돌아 왔으며 이를 통해 반복된다는 것을 알 수 있음
- func함수가 끝나면 main함수 프롤로그가 나오며 프로그램이 종료됨
1.2 정리
main 함수에서 scanf함수로 사용자에게 입력 받은 임의의 값을 func함수에 인자로 전달하여 임의의 값 x 1, 임의의 값 x2 ~~~ 임의의 값 x9의 결과를 출력한 후 종료되는 프로그램임
1.3 결과
homework 프로그램은 위와 같은 코드라고 생각함
'SUA > 시스템 해킹' 카테고리의 다른 글
handray(64bit 바이너리 파일) (0) | 2021.08.30 |
---|