*/ 학교 수업을 바탕으로 배운 내용을 정리합니다. 오류가 있을수 있습니다. /*
정보보호 - Buffer Overflow에 대해서 배운다.
이것을 이해하기위해서는 어셈블리어의 이해가 있어야한다. < 특히, call 과 return>

이것의 실행파일을 만들고 실행하면
당연하게도 x is 30이 출력된다.


vi 명령어를 이용해 ex1의 txt를 볼수있다.
txt에는 main의 기계어, 명령어를 볼수있다.
컴파일러가 ex1.c의 코드를 기계어로 바꾼다. (아래 사진에서 55, 89, e5,...등)
그리고 그 기계어들이 해당하는 어셈블리 명령어가 존재한다.

-> 예를 들면 55는 push ebp에 해당하고 89 e5는 mov ebp, esp에 해당한다.
여기서 이해해야하는 것은 각 명령어가 실행될때, 시스템에는 어떤 변화가 발생하느냐 이다.
일단 push, pop 을 살펴보겠다,.
1) push x
-> 이 명령어의 뜻은 x를 저장하라는 뜻이다!
2step으로 이루어져있는데
1 step : esp = esp - 4
2 step : mem[esp] = x 이다.
esp는 스택의 어떤 영역을 가리키고있다.
그 공간은 위로 갈수록 주소가 커진다.
esp = esp - 4 -> 이것을 4를 줄인다는 것은 4byte의 공간을 stack에 만드는 것이다.
mem[esp] = x -> 이것은 방금 만든 esp가 가리키는 공간에 x를 넣겠다는 뜻이다.

숫자는 모두 16진수이면 2개의 16진수는 1byte이다.
만약 x가 20 이라면

esp가 가리키는 공간( mem[esp] )에 0x20을 넣는다.
-> 이것이 바로 push!
stack에 esp가 가리키는 공간을 4byte를 확보하고, 16진수의 수를 리틀 엔디안 방식으로 넣는다
2) pop x
-> 이 명령어의 뜻은 y에 데이터를 넣고 stack에서는 제거하는 의미이다.
2step으로 이루어져있는데
1 step : y = mem[esp]
2 step : esp = esp + 4 이다.
esp가 가리키고 있는 주소의 값 (mem[esp]) 을 y라는 변수에 저장한다.( y = 0x20)

그 값을 빼면서 esp가 가리키는 주소의 값을 4 증가시킨다.
앞서 push에서 확보한 4 byte의 공간을 없애는 것이다!
간단하게 오늘은 push, pop을 배웠다.
다음 포스팅에는 mov, sub, and, call, ret을 다뤄볼것이다.
'3-2 > 정보보호론' 카테고리의 다른 글
Buffer Overflow - 기본적인 어셈블리어(mov, sub, and)(2) (0) | 2021.10.18 |
---|