2023. 10. 11. 21:19ㆍSTUDY
컴퓨터 과학
-: 컴퓨터를 이용한 모든 작업과 그 기반 이론을 연구하는 학문
해킹
-: 컴퓨터 과학 지식을 응용하여 프로그램이나 시스템의 취약점을 발견하고 공격하는 행위
진법
-: 임의의 숫자 혹은 문자를 사용하여 수를 표현하는 체계
- 10진법(0~9), 2진법(0,1), 16진법(0~9, A~F)
bit: 컴퓨터에서 사용하는 데이터의 최소 단위
byte: 8개의 비트로 구성된 단위, 메모리에 저장되는 최소 단위
- 1 byte == 2^8 => 0~255(10진수) == 00000000~11111111(2진수) == 00~FF(16진수)
- MSB: 최상위 비트: 여러 개의 비트로 구성된 이진 데이터에서 가장 왼쪽에 있는 비트
- LSB: 최하위 비트: 가장 오른쪽에 있는 비트
- 가장 왼쪽에 있는 비트가 숫자의 크기에 가장 큰 영향을 미침
- MSB==0: 양수, MSB==1: 음수
byte ordering
- 빅 엔디안
--: 큰(==가장 왼쪽에 있는) 바이트부터 메모리의 낮은 주소에 저장
-- 네트워크 상에서 데이터를 전송할 때
-- SPARC CPU
- 리틀 엔디안
--: 작은(==가장 오른쪽에 있는) 바이트부터 메모리의 낮은 주소에 저장
-- Intel x86, x86-64 CPU
논리 연산
-: 참 또는 거짓 값으로 연산을 수행, 겨로가로 참(1), 거짓(0)을 반환
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만큼 시프트한 결과는 2^n으로 곱하거나 나눈 값과 같음
x << n | 비트를 n만큼 왼쪽으로 이동 오른쪽 빈 칸은 모두 0 == x * (2^n) |
x >> n (산술 시프트) |
비트를 n만큼 오른쪽으로 이동 왼쪽 빈칸은 MSB와 동일한 비트 값으로 채움(부호 유지) == x / (2^n) |
x >>> n (논리 시프트) |
비트를 n만큼 오른쪽으로 이동 왼쪽 빈칸은 모두 0 (음수는 부호가 유지되지 않음) |
bit masking
-: 어떤 데이터가 존재할 때, 특정 위치의 비트만 표시하거나 가리는 연산
XOR 연산 암호화
- 비트 값이 같으면 0 반환(자기 자신과 XOR 연산하면 0)
- 같은 값에 어떤 값을 2번 XOR하면 원래의 값과 동일해짐
encoding
-: 데이터를 특정한 형식으로 변환하는 것
- 데이터의 크기를 줄이거나, 컴퓨터가 이해하기 쉽게 변환할 때 사용
decoding
-: 인코딩된 데이터를 원래의 값으로 구하는 것
ascii
-: 문자를 숫자로 변환하는 encoding의 표준
- 정보 교환을 위한 미국 표준 코드
- 아스키 문자 1개는 1바이트 크기, 7비트로 문자를 표현, 1비트는 오류 체크를 위해 사용
unicode
-: 전세계 모든 언어의 문자에 고유한 번호를 부여하는 국제 표준 코드
- 최대 32비트로 문자 1개 표현
- 유니코드 ⊃ 아스키코드
- 유니코드를 사용하는 인코딩 형식: UTF-8, UTF-16, UTF-32
URL 인코딩(퍼센트 인코딩)
-: 웹 브라우저로부터 받은 URP 문자열을 유효한 형식으로 변환하는 것
- 문자열을 인터넷으로 전송 가능한 형식으로 변환 => 전송 중에 문자가 수정되거나 의도와 다르게 해석되는 것을 막을 수 있음
- 인코딩이 필요한 특수문자 : / ? # [ ] @ ! $ & ' ( ) * + , ; = % 공백
Welcome, Dreamhack Beginners! :)
~~URL encoding~~
Welcome%2C%20Dreamhack%20Beginners%21%20%3A%29
base64 인코딩
-: 이진 데이터를 아스키 문자를 나열한 텍스트로 변환하는 인코딩 방식
- 6비트로 1개의 문자 표현
- 이진 데이터를 네트워크를 통해 전송하거나 텍스트 파일에 포함할 때, 텍스트 형식으로 나타내기 위해 사용
- 8비트로 이루어진 원본 이진 데이터를 6비트로 나눈다(개수가 안맞으면 0을 추가하여 6의 배수로) > 각 6비트를 10진수 값으로 변환 > base64 테이블에서 10진수 값에 해당하는 문자로 변환 > 비트 수가 8의 배수가 되도록 문자(패딩)를 추가
SGFwcHkgRHJlYW1oYWNrLCBIYXBweSBIYWNraW5nIQ==
~~base64 encoding~~
Happy Dreamhack, Happy Hacking!
인코딩 도구
cyber chef https://tools.dreamhack.games/cyberchef
base64 encode https://emn178.github.io/online-tools/base64_encode.html
encoding tools https://encoding.tools/
'STUDY' 카테고리의 다른 글
[WEB] web (0) | 2023.10.12 |
---|---|
[SYSTEM] OS (0) | 2023.10.11 |
Docker (0) | 2023.10.11 |
[WEB] command injection (0) | 2023.08.30 |
[SYSTEM] computer architecture (0) | 2023.08.29 |