System Hacking 37

[assembly] 어셈블리어로 별피라미드 출력하기-(1)

환경 : 칼리리눅스 2019.2 칼리 리눅스에서 어셈블리어를 이용하여 별 피라미드를 출력해보도록 하자. 아래와 같은 피라미드를 옆으로 눕힌 모양(?)을 찍어보도록 하겠다. 별 피라미드를 찍는다면 어셈블리어 반복문을 제대로 이해할 수 있을 것이다. 어셈블리어로 출력하기 전에 java로 위의 피라미드를 먼저 찍어보자. public class Main { public static void main(String[] args) { // write your code here int n = 5; // upPyramid for(int i = 0; i < n; i++) { for(int j = 0; j < i; j++) { System.out.print("*"); } System.out.println(); } // do..

스택 프레임 (Stack Frame)

출처 : 동빈나님 유튜브 youtu.be/TxWOaKE5w_s 유튜브를 보며 공부하던 중 두고두고 복습이 필요할 것 같아 정리를 하려고 한다.. 스택 프레임(Stack Frame)을 이해하기 위해서 간단한 예제를 만들어보겠다. main() 함수를 살펴보면 1과 2를 더한 값(sum(1,2))을 변수 c에 삽입하고 프로그램을 종료한다. main() 함수 실행 -> main() 함수에서 sum(1, 2) 실행 -> sum() 함수에서 1과 2를 더한 값 반환 -> main() 함수에서 변수 c에 그 값을 저장 -> 프로그램 종료 이제 c언어 코드파일인 sum.c를 어셈블리어인 sum.a로 변환해주도록 하겠다. 저번 시간에 스택영역에서는 다양한 취약점이 존재한다고 했다. gcc에서는 이 취약점들을 기본적으로 ..

System Hacking 2020.07.02

메모리 구조 (Memory Architecture)

출처 : 동빈나님 유튜브 youtu.be/TxWOaKE5w_s 유튜브를 보며 공부하던 중 두고두고 복습이 필요할 것 같아 정리를 하려고 한다.. 구체적인 하나의 프로그램이 실행된 형태인 프로세스는 어떠한 메모리 구조를 가지게 될 지 알아보자. 기본적으로 실제 메인 메모리에서 하나의 세그먼트는 아래의 구조를 가지고 있다. 세그먼트(segment) : 하나의 프로세스를 묶은 것 실행 시점에 실제 메모리의 어느 위치에 저장될 지 결정된다. Stack, Heap, BSS, Data, Text로 나뉘어져 있다. - Text : 실제로 우리가 작성한 소스코드가 들어간다. 프로그램을 실행하게 되면 여기에 있는 어셈블리 코드가 한 줄 한 줄 읽히면서 프로그램이 구동된다. - Data : 실제로 초기화가 이루어진 변수가..

System Hacking 2020.07.02

파일 디스크립터 (File Descriptor)

시스템 문제를 풀다보면 파일 디스크립터, 일명 fd라는 것이 자주 등장한다. 난 이걸 오래전부터 봐왔지만 볼 때마다 헷갈려 했었다. 요즘 푸는 nebula 워게임 문제에 나타나 이참에 정리 해보려고 한다. * 파일 디스크립터 (File Descriptor) - 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값 - 프로세서 열린 파일의 목록을 관리하는 테이블의 인덱스 프로그램이 프로세스로 메모리에서 실행을 시작 할 때, 기본적으로 할당되는 파일 디스크립터들이 있다. 바로 표준 입력(Standard Input), 표준 출력(Standard Output), 표준 에러(Standard Error)이다. 이 들에게 각각 0, 1, 2 라는 정수가 할당된다. (미리 예약된 것) 이들은 프로그램이 시작되면..

System Hacking 2020.06.11

[Buffer Overflow] 8086 CPU 레지스터 구조

참고문헌 제목 : 해커 지망생들이 알아야할 Buffer Overflow 기초 작성자 : 달고나 출처 : www.wowhacker.com * 사진과 글은 위 문서를 참고하였습니다. 이전 글에서 하나의 segment의 구조를 알아 보았다. https://jiravvit.tistory.com/entry/Buffer-Overflow-8086-Memory-Architecture [Buffer Overflow] 8086 Memory Architecture 참고문헌 제목 : 해커 지망생들이 알아야할 Buffer Overflow 기초 작성자 : 달고나 출처 : www.wowhacker.com * 사진과 글은 위 문서를 참고하였습니다. 8086? : 인텔사에서 개발한 16.. jiravvit.tistory.com 이제 ..

[Buffer Overflow] 8086 Memory Architecture

참고문헌 제목 : 해커 지망생들이 알아야할 Buffer Overflow 기초 작성자 : 달고나 출처 : www.wowhacker.com * 사진과 글은 위 문서를 참고하였습니다. 8086? : 인텔사에서 개발한 16비트 마이크로프로세서이며, x86 아키텍처를 적용한 첫 제품이다. 시스템이 초기화 되기 시작하면 시스템은 커널을 메모리에 적재시키고 가용 메모리 영역을 확인하게 된다. 시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 커널 영역은 반드시 저 위치에 있어야 한다. 32bit 시스템에서는 CPU가 한꺼번에 처리할 수 있는 데이터가 32bit 단위로 되어 있다는 뜻이다. 그래서 메모리 영역에 주소를 할당할 수 있는 범위가 0~2^32-1 이다. 하지만 최근 시스템의 CPU는 한꺼번..