본문 바로가기

전체 글

(47)
1. 암호학 개념 - 암호학에 대하여 공부를 시작 - 정보보안기사책과 드림핵을 보며 공부 할 것이다. 이번 시간은 암호학을 공부하기 위해 필요한 개념에 대하여 공부한다. 1. 암호학 암호학은 정보를 보호하기 위한 언어학적 및 수학적 방법론을 다룬다. 평문을 다른 사람이 알아볼 수 없는 형태의 암호문으로 만들고 특정한 비밀키를 알고 있는 사람만이 다시 평문으로 복원시킬 수 있도록 하는 암호 기술과 이를 도청자가 해독하는 방법을 분석하는 암호 해독에 관하여 연구하는 학문이다. 수학을 중심으로 컴퓨터, 통신 등 여러 학문 분야에서 공동으로 연구, 개발되고 있다. 초기의 암호는 메시지 보안에 초점이 맞추어져 군사 또는 외교적 목적으로 사용되었지만, 현재는 메시지 보안 이외에도 인증, 서명 등을 암호의 범주에 포함시켜 우리의 일상..
5. gdb 디버거 이번 시간은 리눅스의 대표적인 디버거 gdb에 대해서 공부 할 것이다. pwndbg 설치 및 기능을 공부한다. 1. 디버거 디버거는 버그를 없애기 위해 사용하는 도구이다. 프로그램을 개발할 때는 일반적으로 코드의 논리 구조를 신중하게 설계하고 코드를 작성한다. 하지만 아무리 신중하게 설계해도 규모가 커지면 실수가 발생한다. 컴퓨터과학에서는 이러한 실수로 발생한 프로그램의 결함을 버그라고 한다. 또한 이미 완성된 코드에서 버그를 찾는 것은 어렵다. 그래서 이런 어려움을 해소하고자 디버거라는 도구가 개발되었다. 그러나 디버거의 효용을 개발자만 얻는 것이 아니라 해커, 리버스 엔지니어 등도 디버거를 사용하여 버그 탐색의 효율을 높인다. 개발자는 버그를 고치기 쉬워졌고, 해커는 취약점을 발견하기 쉬워졌다. 리눅..
4-2. 어셈블리(Assembly) - 스택, 프로시저, 시스템콜 저번 시간에는 기계어와 어셈블리 기본구조, 산술연산, 논리연산, 비교, 분기를 공부하였다. 다시 공부하고 싶다면 밑에 링크를 참고하면 된다. 4-1. 어셈블리(Assembly) 1. 기계어 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어이다. 0과 1로만 구성돼 있어서 단어 위주로 문장을 구사하는 사람으로서 이해하기 어렵다. 2. 어셈블리 언어 기계어 sungw00k.tistory.com 이어서 이번 시간에는 스택, 프로시저, 시스템콜에 관련된 어셈블리를 공부할 것이다. 1. Opcode : 스택 스택을 조작할 수 있는 명령어로 1)push, 2)pop이 있다. 1) push push val : val을 스택 최상단에 쌓는다. 연산 rsp -= 8 [rsp] = val 2) pop ..
4-1. 어셈블리(Assembly) - 산술연산, 논리연산, 비교, 분기 이번 시간은 해커의 언어인 어셈블리에 대하여 공부할 것이다. 1. 기계어 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어이다. 0과 1로만 구성돼 있어서 단어 위주로 문장을 구사하는 사람으로서 이해하기 어렵다. 2. 어셈블리 언어 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍 저급 언어이다. 컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 어셈블리 언어도 달라진다. 3. 어셈블러 어셈블리어로 작성한 코드를 컴퓨터가 이해할 수 있는 기계어로 코드를 치환해 주는 일종의 통역사이다. 4. 어셈블리 언어 기본 구조 어셈블리 언어는 동사에 해당하는 명령어(Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성된다. 5. 어셈블리 명령어 - 데이터 이동: mov, lea 어떤 값을 ..
3. 리눅스 프로세스의 메모리 구조 1. 세그먼트 리눅스에서는 프로세스의 메모리를 5가지의 세그먼트로 구분한다. 세그먼트(Segment)란 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것이다. 1)코드 세그먼트, 2)데이터 세그먼트, 3)BSS 세그먼트, 4)힙 세그먼트, 5)스택 세그먼트로 구분한다. 1) 코드 세그먼트(텍스트 세그먼트) 실행 가능한 기계코드가 위치하는 영역이다. 프로그램이 동작하려면 코드를 실행해야 하기 때문에 코드 세그먼트는 읽기 권한과 실행 권한이 부여된다. 쓰기 권한이 있으면 공격자가 악의적인 코드를 삽입하기 쉬워지므로 현대 운영체제에서는 코드 세그먼트에 쓰기 권한을 제거한다. 2) 데이터 세그먼트 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치한다. CPU는 데이터 세그먼트의 데이터를 읽을 수 있..
2. x86-64 아키텍처 1. x86-64 아키텍처 인텔의 64비트 CPU 아키텍처로 인텔의 32비트 CPU 아키텍처인 IA-32를 64비트 환경에서 사용할 수 있도록 확장한 것이다. - n 비트 아키텍처 n은 CPU가 한번에 처리할 수 있는 데이터의 크기이다. 64비트 아키텍처, 32비트 아키텍처에서는 CPU가 64비트, 32비트를 한번에 처리할 수 있다. - 워드(WORD) 컴퓨터과학에서 CPU가 이해할 수 있는 데이터의 단위를 WORD라고 부른다. WORD의 크기는 CPU가 어떻게 설계됐느냐에 따라 달라진다. 32비트 아키텍처는 ALU는 32비트까지 계산할 수 있고 레지스터, 버스들의 대역폭이 32비트이다. 따라서 이들로 구성된 CPU는 32비트의 데이터까지만 처리할 수 있게 된다. - 큰 WORD의 장점 현대의 PC는 대..
1. 컴퓨터 아키텍처 1. 컴퓨터 구조 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등으로 이루어져 있다. 2. 컴퓨터의 기능 구조에 대한 설계 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고 설계하는 분야 3. 명령어 집합구조(Instruction Set Architecture, ISA) CPU가 해석하는 명령어의 집합을 의미한다. 프로그램은 기계어로 이루어져 있으며 프로그램을 실행하면 이 명령어들을 CPU가 읽고 처리한다. ARM, MIPS, AVR, 인텔 x86 및 x86-64 등이 있다. 4. 마이크로 아키텍처 CPU의 하드웨어적 설계이며 정의된 명령어 집합을 효율적으로 처리할 수 있도록 CPU의 회로를 설계하는..