본문 바로가기
Study/Ping!

5주차 과제: 드림핵 비기너즈 02

by 이응이응잉 2025. 2. 23.

Dream Beginners | 로드맵 | Dreamhack

 

컴퓨터 과학(Computer Science)은 컴퓨터를 이용한 모든 작업과 그 기반 이론을 연구하는 학문한다. 이는 코딩뿐만 아니라 계산 이론, 알고리즘, 소프트웨어 설계, 네트워크 등 광범위한 영역을 포함한다.

 

해킹은 컴퓨터 과학의 기초 지식을 응용하여 프로그램이나 시스템의 취약점을 발견하고 공격하는 행위로서, 다양한 분야의 컴퓨터 과학 지식이 요구되므로 기본적인 컴퓨터 지식이 있어야 한다.


진법

10진법: 10개(0~9)의 숫자로 수를 표현함.  → 사람이 사용하는 진법

2진법: 2개(0,1)의 숫자로 수를 표현함. → 컴퓨터가 사용하는 진법 (0과 1)

16진법: 16개(0~9, A~F)의 문자로 수를 표현함. → 2진수를 더 간편하고 효율적으로 표현하기 위해 많이 사용되는 진법

 

 

10진수             2진수                         16진수

0
0000
0
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
9
1001
9
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15
1111
F
16
10000
10

 


비트와 바이트

비트(bit): 컴퓨터에서 사용하는 데이터의 최소 단위(1비트)

바이트(byte): 8개의 비트로 이루어진 큰 단위(8비트=1바이트), 1 바이트는 2^8=256가지의 수를 표현할 수 있다.

 

최상위 비트(MSB), 최하위 비트(LSB)

Most Significant Bit (MSB, 최상위 비트): 여러 개의 비트로 구성된 이진 데이터에서 가장 왼쪽에 있는 비트

Least Significant Bit (LSB, 최하위 비트): 여러 개의 비트로 구성된 이진 데이터에서 가장 오른쪽에 있는 비트

? Significant(중요하다)가 붙는 이유: 가장 왼쪽에 있는 비트가 숫자의 크기에 가장 큰 영향을 미치기 때문

 

부호 비트

프로그래밍 언어에서 부호(+, -)를 가지는 데이터는 Signed 데이터 또는 부호가 있는 데이터라 부르고, 부호없이 양수(+)만 나타내는 데이터는 unsigned 데이터 또는 부호가 없는 데이터라 부른다.

 

바이트 오더링(Byte Ordering)

2 바이트 이상의 데이터는 메모리에 연속적으로 저장되는데, 이 때 각 바이트가 메모리에 정렬되는 방식을 바이트 오더링(Byte ordering)이라고 부른다.

  • 빅 엔디안(Big Endian): 큰 바이트부터 낮은 주소에 저장, 네트워크 상에서 데이터 전송 시엔 이 방식 사용
  •  리틀 엔디안(Little Endian): 작은 바이트부터 낮은 주소에 저장, Intel의 x86, x86-64 CPU에서 리틀 엔디안을 사용

비트 연산 피연산자를 2진수로 표현하여 비트(bit) 단위로 연산하는 것을 비트 연산이라고 한다.

논리 연산자

 

참 또는 거짓 값으로 연산을 수행하고 결과로 참(1, true) 또는 거짓(0, false)을 반환

 

비트 연산자         설명

x || y
둘 중 하나라도 참이면 결과는 참입니다. (OR)
x && y
둘 다 참이면 결과는 참입니다. (AND)
!x
참이면 결과는 거짓, 거짓이면 결과는 참입니다. (NOT)

 

비트 연산자

비트 단위로 논리 연산을 수행, 1은 참, 0은 거짓

비트 연산자         설명

x | y
두 비트 중 하나라도 1이면 결과는 1입니다. (OR)
x & y
두 비트 모두 1이면 결과는 1입니다. (AND)
x ^ y
두 비트가 같으면 결과는 0, 다르면 결과는 1입니다. (XOR)
~x
비트가 0이면 결과는 1, 1이면 결과는 0으로 모든 비트를 반전시킵니다. (NOT)

 

시프트 연산자

비트를 특정 값만큼 왼쪽 혹은 오른쪽으로 이동, . n만큼 시프트한 결과는 2n으로 곱하거나 나눈 값과 같다.

 

시프트 연산자           설명

x << n
비트를 n만큼 왼쪽으로 이동합니다.
오른쪽 빈 칸은 모두 0으로 채웁니다.
== x * 2n
x >> n
(산술 시프트)
비트를 n만큼 오른쪽으로 이동합니다.
왼쪽 빈 칸은 가장 왼쪽에 있던 비트(MSB)와 동일한 비트 값으로 채웁니다.
(양수는 양수, 음수는 음수로 부호가 유지됩니다.)
== x / 2n
x >>> n
(논리 시프트)
비트를 n만큼 오른쪽으로 이동합니다.
왼쪽 빈 칸은 모두 0으로 채웁니다.
(음수는 부호가 유지되지 않습니다.)

 


인코딩, 디코딩

  • 인코딩(Encoding): 데이터를 특정한 형식으로 변환하는 것
  •  디코딩(Decoding): 인코딩된 데이터를 원래 데이터 형식으로 재변환하는 것 

 

아스키 코드

아스키 코드(American Standard Code for Information Interchange, ASCII): 문자를 숫자로 변환하는 문자 인코딩(character encoding)의 표준.

아스키 코드를 이용하면 서로 다른 장치 간 데이터 전송을 더 쉽게 수행할 수 있다.

 

? 아스키 테이블: 링크

 

ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal

ASCII Table ASCII stands for American Standard Code for Information Interchange. Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long

www.asciitable.com

 

유니코드

유니코드(Unicode): 영어 뿐만 아니라, 전세계 모든 언어의 문자에 고유한 번호를 부여하는 국제 표준 코드이다.

  • 서로 다른 언어를 사용할 때 문자가 호환되지 않는 문제를 해결하기 위해 만들어졌다.
  • 아스키 코드보다 용량을 크게 확장하여 최대 32 비트로 문자 1개를 표현하여, 현재 143000개 이상의 문자를 표현할 수 있다.
  • 유니코드 값은 U+ 뒤에 16진수를 붙여 나타낸다.
  • 현재 컴퓨터로 볼 수 있는 글자는 대부분 UTF-8로 인코딩된 값이다.

URL 인코딩 (퍼센트 인코딩)

URL 인코딩: 웹 브라우저로부터 받은 URL 문자열을 유효한 형식으로 변환하는 것을 URL 인코딩이라고 한다.

허용되지 않는 문자, 즉 인코딩이 필요한 특수문자는 :/?#[]@!$&'()*+,;=%공백

 

Base64 인코딩

Base64 인코딩: 이진 데이터를 아스키 문자로 구성된 텍스트로 변환하는 인코딩 방식이다.

 

Base64 인코딩 방식

  1. 원본 이진 데이터를 비트 나열로 표현하고, 이를 6 비트씩 끊어서 묶는다.. 만약 비트의 개수가 6의 배수가 아닐 경우, 0을 뒤에 추가하여 6의 배수로 만든다.
  2. 각 6 비트 묶음을 수로 변환한 뒤, base64 테이블에서 해당하는 문자를 찾아 이로 치환한다.
  3. 이렇게 치환 과정을 거친 뒤, 글자 수가 4의 배수가 되도록 문자 '='를 반복해 뒤에 추가한다. 이를 패딩(Padding)이라고 한다.

운영체제(OS, Operating System)

  • 응용 프로그램의 역할: 사용자를 위한 기능을 수행(웹 브라우저, 엑셀, 메모장...)
  • 운영체제의 역할: 컴퓨터의 자원을 할당하는 등의 복잡한 관리 작업
사용자, 응용 프로그램
운영체제
하드웨어 (CPU, 메모리, 입출력 장치 등)

 

사용자, 응용 프로그램은 직접적으로 하드웨어에 접근하지 않는다. 운영체제(OS)가 그 사이에서 중재자 역할을 함으로써 하드웨어 자원을 사용자와 응용 프로그램에게 할당한다.

 

운영체제가 하는 대표적인 일

  • 실행중인 프로그램, 즉 프로세스에 CPU를 번갈아 할당해야 하는데, 이때 어떤 프로세스에 CPU를 할당할지 결정한다. (CPU 스케줄링)
  • 메모리 공간을 각 프로세스에 분배하고 사용하는 과정을 관리한다.
  • 컴퓨터가 입출력 장치와 정보를 주고 받는 과정을 관리한다.

 

커널과 셸

커널(Kernel, 알맹이): 운영체제의 핵심 기능인 하드웨어 관리를 실제로 수행하는 프로그램

셸(Shell, 껍질)은 사용자와 운영체제의 커널 사이에서 사용자가 운영체제에 명령을 내릴 수 있도록 인터페이스 역할을 하는 것

 

사용자가 셸에 명령을 입력하면?

1. 셸이 명령어를 해석하여 커널에 요청한다.

2. 커널은 명령을 수행하며 하드웨어를 조작한다.

3. 수행 결과를 셸에 전송한다.

4. 셸은 이 결과를 해석하여 사용자에게 출력해준다.

 

? 셸을 획득하면 명령어를 통해 원하는 작업을 수행하고 시스템을 제어할 수 있게 된다. 따라서 일반적으로 셸을 획득하는 것을 시스템 해킹의 성공으로 여긴다.

 

운영체제의 종류

  • Windows는 마이크로소프트사에서 개발한 운영체제로, Graphical User Interface (GUI) 기능을 제공하여 사용자가 편리하게 사용할 수 있다.
  • UNIX는 벨 연구소에서 개발한 운영체제로, 대부분의 운영체제는 UNIX로부터 발전된 기술을 사용하고 있다.
  • Linux UNIX 기반의 운영체제이다. 소스 코드를 공개하여 누구나 수정하고 재배포할 수 있는 오픈소스 프로그램으로, 많은 사람에 의해 계속해서 발전하고 있다.
  • UNIX 기반의 또 다른 운영체제로는 애플에서 개발한 GUI 기반 운영체제 macOS, 스마트폰을 많이 사용하는 현대인에게 친숙한 모바일 운영체제 AndroidiOS가 있다.