ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOF 준비운동 (2)
    Wargame Site/BOF 2019. 4. 22. 15:37

     

    STEP3 > Stack Frame

     

    BOF 준비운동 (1) 에서 설명했던 것처럼 새로운 프레임에 접근할 때, Prolog 가 발생한다고 했다.

    우선 이 Prolog 가 갖는 의미를 생각해보자.

    Prolog 를 하는 근본적인 이유는 주소에 대한 효율적인 접근에 있다.

     

     

     

    중요한 한가지 사실은 프로그램에서는 EBP 를 기준으로 변수를 지칭한다.

    다음 그림에서와 같이 EIP 가 int a = 3, int b = 5, float c =7 이 실행됨에 따라 해당 Stack 에서는 다음과 같이 해당 정보들이 쌓인다.

    EBP - 8, EBP - 12 와 같은 방식으로 a, b, c 를 지칭한다.

     

     

    자, 만약 프레임이 교체되지 않는다면 어떤일이 발생할까?

     

    프레임이 구분되어있지 않은 경우에 프로그램내의 변수들에 접근하기 위해서 offset 을 계산하는데 너무 많은 리소스를 사용하게 될 것이다.

     

     

     

    이번엔 Prolog 가 있는 Stack 의 상황을 살펴보자.

    만약 위 상황에서 n Frame 이 실행된다면,

     

    다음과 같은 형태로 바뀌며, 변수 접근을 효율적으로 할 수 있다.

     

     

     

    STEP4 > Call

     

    하나의 프레임에서 다른 함수들을 호출하는 것을 종종 볼 수 있다.

    이번 섹터에서 이해해야할 내용은 Call 이 발생하면서 Stack 에는 어떤 일이 일어나는지 파악하는 것이다.

     

     

    자 결론부터 이야기하면 Call 을 하기 위해 기존 프레임의 다음 실행위치를 저장한 뒤, 해당 프레임으로 이동한다.

     

     

    즉 Call 이라는 함수는 ' Push $eip + 5 ' 와 ' jmp n Frame ' 의 의미를 함축적으로 지니고 있다.

    이 때 5인 이유는 Call  [    ]  의 형태가 대부분 5 bytes 를 지니고 있기 때문이다.

    만약 OP Code 가 5 바이트가 아닐 경우는 달라진다.

     

     

    자, 이제 본격적으로 이해해보자.

     

     

    우선 1 번인 Push $eip + 5 가 실행될 때 105 의 위치가 스택에 쌓이면서 ESP 에 변화가 생긴다.

    2 번 jmp 0x800 을 실행하게 되면 EIP 가 0x800 으로 바뀌면서 Call 함수 실행이 끝난다.

     

     

     

    STEP5 > Prolog

     

    ESP, EBP 를 옮겨주기 위해 필요한 과정은 어떤 것들이 있을까?


    PUSH EBP

    MOV EBP, ESP

    SUB ESP, N


     

    1. PUSH EBP

    기존의 실행중이던 프레임의 EBP 를 저장( PUSH )하는 과정이다. 

    함수를 빠져나갈시 돌아가야하는 EBP 를 적절히 다시 돌아가기 위함이다.

     

    2. MOV EBP, ESP

    스택의 꼭대기를 가르키는 ESP 를 프레임의 바닥을 담당하는 EBP 에 저장한다.

    새로운 프레임의 시작을 알리는 구문이다.

     

    3. SUB ESP, N

    스택의 꼭대기에서 N 만큼의 공간을 확보한다.

    본격적인 새로운 프레임 구조가 완성되는 순간이다.

     

     

     

    이번엔 그림으로 이해해보자.

     

     

    1번 PUSH EBP 를 실행하면 기존의 EBP 값이 저장되며, ESP 에 변화가 생기고,

    2번 MOV EBP, ESP 이 실행되면 EBP 의 값이 ESP 와 같이진다. 

    마지막으로, SUB ESP, N 이 실행될 때 비로소 n Frame 의 스택구조가 완성이된다.

     

     

     

     

    'Wargame Site > BOF' 카테고리의 다른 글

    BOF ASLR  (0) 2019.04.24
    BOF 들어가기 앞서  (0) 2019.04.24
    BOF 준비운동 (4)  (0) 2019.04.23
    BOF 준비운동 (3)  (0) 2019.04.22
    BOF 준비운동 (1)  (0) 2019.04.21

    댓글

Designed by Tistory.