2019. 2. 20. 23:32ㆍSystem Hacking/System Hacking Knowledge & Techniques
안녕하세요!
오늘은 메모리 구조에 대해서
간단하게 설명해보도록 하겠습니다!
시스템 해킹을 하기 위해선
이 메모리 구조와
작동 원리를 잘 알고 있어야 합니다!
[32bit CPU를 기준으로 합니다!]
[주소는 16진수로 표현되니!]
[0x00000000~0xFFFFFFFF의 범위를 갖습니다!]
우선 간단하게 프레임을 그려볼게요
<낮은 주소 0x00000000>
| ( 기 계 어 ) |
| 코 드 영 역 |
-------------------------------
| 초기화 된 데이터 영역 |
-------------------------------
| 초기화 안된 데이터 영역 |
-------------------------------
| 힙(Heap) 영 역 |
-------------------------------
| 공유 라이브러리 영역 |
-------------------------------
| 스택(stack) 영역 |
| |
-------------------------------
| 커 널 영 역 |
| |
<높은 주소 0xFFFFFFF>
1. 코드영역 (기계어)
코드영역에는 저희가 입력한 소스코드가
기계어로 변환되어 저장됩니다!
C언어로 작성했든, python으로 작성했든
그게 다 결국에 기계어로 변환되어서
CPU가 알아들을 수 있는 명령어로
여기에 저장 됩니다!
2. 초기화된 데이터 영역
여기는 저희가 초기화를 한 데이터를
저장하는 곳입니다!
근데 이 영역은
전역변수(Global variable)와 정적변수(Static Variable)만
해당돼요!
지역변수는 스택영역이에요!!
※초기화가 뭔데?
ex) C언어의 경우
static int a=1;
static int b=0;
이렇게 변수를 선언하고 값을 넣은거요!
즉, 변수 선언을 하고 값까지 넣어준
변수들이 있는 곳이 여기입니다!
3. 초기화 안된 데이터 영역
여기는 아까랑 다른게
딱 하나 있습니다!
똑같이 전역변수,정적 변수만 해당되는데!
여기는 변수 선언만 했을 때!
이 영역에 해당 됩니다!
static int a;
static int b;
이따구로 선언만 하면 여기 영역에
환영인사를 받습니다 ㅎ
4. 힙(Heap) 영역
필요할 때 마다
메모리 할당을 받아야 할 순간이 있죠?
그래서 동적 할당을 합니다!
흔히 malloc함수를 이용해서요!
그런 동적할당을
이 Heap 영역에다가 합니다!
5. 공유 라이브러리 영역
자 여기는 메인 프로그램이
사용하는 함수들의 백과사전이라고 보시면 됩니다!
저희가 C언어에서 사용하는
printf함수도 libc.so.6 사전 안에 들어가 있죠!
근데 이게 사전을 원하는 쪽만 찢어서
저장할 수 있는게 아니라
일단 조금이라도 사용하려면
사전(라이브러리) 전체를 이 영역에
담아야 합니다!
저희가 printf,scanf등을 사용한다면
그 함수들의 사전이
이 영역에 적재되는 것 입니다!
6. Stack 영역
스택 영역은
함수의 호출과 관련된 정보들이
저장되는 곳입니다!
함수의 복귀주소, 지역변수, 인자, 환경변수등이
여기에 저장됩니다!
특히 제일 기초적인 버퍼오버플로우를
이해하시려면 이 stack영역을
유심히 관찰하셔야 합니다!
간단히 설명드리자면!
스택 구조에서
[ 버퍼 ]
[EBP]
[RET ADDRESS]
이렇게 있을 때 버퍼에 입력을
엄청나게 많이 주면
입력값이 흘러넘쳐서
RET ADDRESS(복귀주소)에 영향을 줄 수 있거든요!
그리고 다른 영역과는 다르게 스택 영역만!
데이터 입력을
메모리가 높은 곳에서 낮은 곳으로
넣습니다!
그 이유는
1. 커널의 영역을 침범하지 않기 위해서
- 높은곳에서 낮은곳으로 향하면
데이터를 아무리 입력해도
커널 반대방향으로
데이터가 쌓이기 때문!
2. 메모리 공간의 효율적 사용을 위해!
힙 -----> 공유 라이브러리 <---- 스택
힙은 낮은 곳-> 높은 곳
스택은 높은 곳-> 낮은 곳
그렇다고 합니다!
7. 커널영역
마지막으로 커널영역은
저희가 어떻게 건드릴 수가 없는 부분이에요!
RAM이 4기가라고 하면
끝 쪽의 1기가 정도는 이 커널이 사용한다고 하네요!
커널은 운영체재와 관련된 것이여서
저도 아직 잘 알지 못합니다!
그냥 현재로썬 이렇게 구성되어 있다
정도로 아시면 될 것 같습니다!
자 이렇게 메모리 구조에 대해서 설명을 해 보았습니다!
좀 글이 길어서 한번씩 다시 천천히 보시면
도움 될 것 같습니다!
감사합니다!
'System Hacking > System Hacking Knowledge & Techniques' 카테고리의 다른 글
[기초] NX bit/ DEP 와 ASLR은 무엇인가? (0) | 2019.02.21 |
---|