ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOF 준비운동 (1)
    Wargame Site/BOF 2019. 4. 21. 12:06

    STEP1 > EIP

     

    BOF 를 접하기 앞서 우선 프로그램이 작동하는 원리를 대략적으로 살펴보도록하자!!

    하나의 프로그램은 여러개의 프레임으로 구성이 되어있다. 함수단위 쯤으로 생각해도 무방할 거 같다. 

     

     이 때 3가지 레지스터에 대한 이해가 필요한데,

    그것은 바로 EIP, EBP, ESP 이다.

     

    우선, EIP 는 프로그램의 다음 실행위치를 가르키는 포인터이다.

     

    결론적으로, EIP 만 조절할 수 있다면 프로그램을 마음대로 이끌어 갈 수 있다는 것이다.

    이러한 EIP 를 바꾸어 놓는 것이 BOF 의 핵심이다.

     

     

    특정 프레임안에서 다른 프레임을 호출하는 경우 EIP 의 변화가 생긴다.

    EIP 는 프로그램의 다음실행위치를 뜻하기 때문에 특정 프레임을 호출했을 때,

     

     

    우선 특정 프레임 (B,C Frame) 의 주소 ( Next EIP ) 를 알아야하며,

    기존의 실행하던 프레임 (A Frame) 의 다음 실행위치 ( Save EIP ) 또한 파악해두고 적절하게 값을

    변경해주어야한다.

     

     

     

     

    STEP2 > STACK

     

    프로그램 내부적으로 정보를 저장하거나 빼낼 때 '스택' 이라는 자료구조로 접근한다.

    "LIFO(Last In First Out)" 후입선출의 방식을 말하는 자료구조이다.

    스택은 EIP 가 코드를 실행하면서 내용과 크기가 달라진다. (PUSH, POP .. )

     

    기본적으로, 스택의 밑바닥의 역할을 하는 녀석과 맨 꼭대기 역할을 하는 녀석이 있다.

    이러한 레지스터들이 바로 EBP, ESP 이다.

    ESP 는 단순히 스택의 꼭대기를 지칭하는 녀석이고,

    EBP 는 스택의 바닥으로 스택내의 정보(지역 변수, 인자)에 접근할 때 기준으로 사용되는 녀석이다.

     

    이러한 EBP, ESP 는 프레임이 바뀔 때마다 갱신된다.

    프레임 실행시 스택 생성과정과 프레임 실행이 끝났을 때의 스택 소거과정이 필요하고

    우리는 이러한 과정을 'Prolog', 'Epilogue' 라고 부른다.

     

     

     

     

     

     

     

    뉴비라서 잘은 모르지만, 현재 내가 이해하고 있는 사항들을 정리해보면서 공부하는게 좋을거 같다는 생각이들어서 정리한 것으로,

    틀리거나 잘못된 개념이 있다면 댓글로 남겨주셨으면 좋겠습니다. ^^

    '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 준비운동 (2)  (0) 2019.04.22

    댓글

Designed by Tistory.