참고
코드 블럭
이 문서를 따라가시면서 자주 마주치게 되는 부분 중 하나는 아래와 같은 코드 블럭입니다.
[코드 블럭 예시]
코드블럭의 우측에 있는 버튼(보는 환경에 따라 복사 모양, 글씨 등으로 다양)을 클릭하면 코드 블럭 내부의 내용을 드래그하지 않고 바로 복사할 수 있습니다.
각주
이 문장 뒤에 있는 숫자가 보이시나요? 해당 각주는 추가적인 설명을 적어놓은 부분입니다. 사용법은 가장 쉽게 말해서 나무위키 생각하시면 됩니다.
내부 링크
본문 중에 일부 단어들은 파란색으로 누르면 다른 페이지로 이어지는 위키 링크 문법으로 되어있는 부분들이 있습니다. 해당 링크를 통해 다른 페이지로 이동한 경우, 아래의 방법으로 다시 원래 페이지로 돌아갈 수 있습니다.
- 문서 좌측 상단의 화살표 뒤로가기: ←
- 단축키 이용: ⌘+⌥+←
용어
아래 나오는 단어들은 이 문서를 따라갈 때 알고 있으면 이해하기 쉬원지는 단어들입니다. 컴퓨터 분야나 정보보안 분야에 지식을 많지 않으신 경우를 고려하여 최대한 쉽게 적으려고 노력하였습니다.
환경/시스템
운영 체제 (Operating System, OS):
- 운영체제(OS)란 컴퓨터를 동작시키는 기본 소프트웨어[^1]입니다.
호스트:
- 호스트는 가장 간단하게 말하면 현재 사용하고 있는 기기 그 자체를 말합니다.
- 가상머신이나 원격 서버와 구분할 때 사용하는 표현으로, 쉽게 말해 내 손에 있는 이 컴퓨터를 가리킵니다.
가상환경: ^virtenv
아키텍처:
- 아키텍처는 컴퓨터가 일을 처리하는 방식의 설계도라고 생각하면 됩니다.
- 대표적으로
x86_64/AMD64(인텔/AMD CPU)와ARM(애플 실리콘칩, 스마트폰)이 있습니다.
패키지:
- 프로그램 설치에 필요한 파일과 정보를 하나로 묶어놓은 것입니다.
터미널
터미널:
- 키보드 입력만으로 컴퓨터에 명령을 내릴 수 있는 프로그램입니다.
- 마우스로 아이콘을 클릭하는 대신, 글자를 입력해서 컴퓨터를 조작합니다.
명령어 (Command):
- 터미널에서 컴퓨터에게 내리는 지시입니다.
- 예를 들어
ls는 “현재 폴더 안에 뭐가 있는지 보여줘”,cd는 “이 폴더로 이동해줘” 라는 뜻입니다.
경로 (Path):
- 파일이나 폴더가 컴퓨터 어디에 있는지 나타내는 주소입니다.
- 실제 주소처럼
서울시 > 강남구 > 00빌딩 > 3층처럼 단계적으로 표현합니다. - 예:
/home/user/documents/hello.txt
디렉토리:
- 폴더와 같은 말입니다. 파일들을 담아두는 공간입니다.
권한:
- 파일이나 프로그램을 읽거나 수정하거나 실행할 수 있는 자격입니다.
- 학교로 비유하면, 학생은 교실에 들어갈 수 있지만 성적을 수정할 수는 없는 것과 같습니다.
관리자 권한:
- 컴퓨터의 모든 것을 변경할 수 있는 최고 권한입니다.
- 리눅스에서는
sudo를 명령어 앞에 붙여서 관리자 권한으로 실행합니다. - 무엇이든 할 수 있는 만큼, 잘못 사용하면 시스템이 망가질 수 있습니다.
환경변수:
- 컴퓨터 내부에서 사용하는 약속된 규칙판과 같습니다. 명령어나 프로그램를 사용할 때 참고해야하는 값을 명시한 것입니다.
- 프로그램을 설치했는데 명령어를 못찾겠다고 할 때 대부분 이 설정이 빠진 경우입니다.
패키지 관리
패키지:
- 프로그램과 그 프로그램이 동작하는데 필요한 파일들을 하나로 묶어 놓은 것입니다.
패키지 관리자:
- 패키지의 설치, 업데이트, 삭제를 대신 해주는 프로그램입니다.
- 앱스토어와 비슷하지만 터미널에서 명령어로 사용합니다.
의존성 (Dependency):
- 어떤 프로그램이 동작하기 위해 필요한 다른 프로그램들을 말합니다.
- 게임을 실행하려면 그래픽 드라이버가 필요한 것처럼, 프로그램 A가 동작하려면 프로그램 B가 먼저 설치되어 있어야 하는 관계입니다.
- 패키지 관리자는 이 의존성을 자동으로 해결해줍니다.
저장소 (Repository):
- 패키지 관리자가 프로그램을 다운받는 서버입니다.
- 앱스토어의 서버라고 생각하면 됩니다.
가상화
가상화:
- 가상화는 현재 사용하고 있는 OS에서 가상의 컴퓨터를 만들어서 또 다른 OS를 돌리는 것을 말합니다.
- 쉽게 말해 컴퓨터 속의 컴퓨터 입니다.
VM (가상머신, Virtual Machine):
- 컴퓨터 안에서 소프트웨어로 만든 또 다른 컴퓨터입니다.
- 실제 컴퓨터처럼 OS를 설치하고 프로그램을 실행할 수 있습니다.
UTM:
- 맥에서 사용하는 가상머신 프로그램입니다.
- 맥 위에서 다양한 OS들을 돌릴 수 있게 해줍니다.
WSL (Windows Subsystem for Linux):
- 윈도우 안에서 리눅스를 사용할 수 있게 해주는 기능입니다.
- 별도의 가상머신보다 훨씬 가볍고 설치가 간단합니다.
- WSL로 설치한 리눅스 환경을 인스턴스 또는 배포판(Distro)이라고 부릅니다.
Linux/유저 인터페이스
Linux:
- 오픈소스 운영체제입니다. 누구나 무료로 사용하고 수정할 수 있습니다.
Ubuntu:
CLI (Command Line Interface):
- 키보드로 명령어를 입력해서 컴퓨터를 조작하는 방식입니다.
- 터미널이 대표적인 CLI 도구입니다.
GUI (Graphical User Interface):
- 아이콘, 버튼, 창 등 시각적인 요소를 마우스로 클릭해서 조작하는 방식입니다.
- 우리가 평소에 사용하는 윈도우, 맥의 화면이 GUI입니다.
Shell:
- 사용자가 입력한 명령어를 받아서 운영체제에 전달해주는 프로그램입니다.
- 터미널이 창이라면, 쉘은 그 창 안에서 실제로 명령어를 해석하고 실행하는 엔진입니다.
- 대표적으로
bash,zsh가 있습니다.
그 외
네트워크 패킷:
- 네트워크에서 오고가는 데이터
16진수:
- 한 사이클에 16개의 기호를 사용하는 수 체계 (0 - 15)
- 0에서 15까지가 한 사이클
- 0, 1 ,2 , 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f 로 표현
- 16진수는 앞에
0x를 붙여서 표현하는 경우가 많습니다. (예:0x1F) -
- 2진수(기계어)를 사람이 좀 더 읽기 편하게 표현하기 위해 주로 사용됩니다.
어셈블리어:
- 0과 1로 이루어지는 기계어를 사람이 읽기 조금 더 편하게 만든 저수준 언어
- 기계어와 1대1로 대응하는 명령어를 사용하기에 복원이 가능합니다.
컴파일:
- 컴파일은 프로그래머가 작성한 코드를 기계가 이해하기 쉬운 언어로 변환하여 하나의 실행파일로 변환하는 과정을 말합니다.
- 컴파일 과정:
소스 코드→어셈블리어→기계어 (0, 1)→실행파일
디스어셈블:
- 컴파일의 반대 과정 중 하나로 실행파일에서 어셈블리어로 해석하는 과정을 말합니다.
디컴파일:
- 컴파일의 반대 과정이라고 생각하면 됩니다.
- 디스어셈블의 다음 단계로, 소스 코드와 유사한 형태로 보여주게 됩니다.
- 완벽하게 원본 소스 코드로 복원되는 것은 아닙니다.
리버스 엔지니어링 (리버싱):
- 컴파일 된 실행파일을 디스어셈블/디컴파일 된 내용을 토대로 분석하는 작업
- 만약 하나의 가구가 있을 때 이를 분해해 가면서 조립 설명서를 완성해 가는 과정으로 저는 비유하는 편입니다.
- 디스어셈블은 상세한 주석을 작성하는 과정
- 디컴파일은 알아보기 쉬운 그림을 그리는 과정
정적 분석:
- 소스코드나 프로그램을 실행하지 않고 분석하는 방법
동적 분석:
- 소스코드나 프로그램을 실행하며 분석하는 방법
취약점:
- 프로그램 제작자가 의도하지 않은 동작이 가능하게 만들 수 있는 허점을 말합니다.
- 보안적으로 악용될 수 있는 버그라고 생각하시면 편합니다.
포너블 (시스템 해킹):
- 프로그램의 취약점(허점)을 이용해서 공격자의 의도대로 프로그램이 동작하게 만드는 것을 말합니다.
웹해킹:
- 웹사이트의 취약점(허점)을 찾아서 정보를 탈취하거나 서버를 장악하는 행위를 말합니다.
목차: 0. 따라만 하면 완성!! 해커 노트북 세팅 - MacOS편
다음: 2. 내 컴퓨터의 환경, 아키텍처는?