728x90
728x90
728x90
728x90

어셈블리어란

이진수로 구성된 기계어는 사람이 봤을 때는 알아보는 것이 불가능하기 때문에

이를 보완해서 나온 언어가 어셈블리어입니다.

어셈블리어는 기계어와 1:1로 대응되며 CPU에 따라 기계어가 다르기 때문에

어셈블리어 또한 CPU에 따라 다르게 작성해야 합니다.

 

NASM x86 어셈블리어로 구현한 'Hello, World!'

adosseg
.model small
.stack 100h

.data
hello_message db 'Hello, World!',0dh,0ah,'$'

.code
main proc
      mov    ax, @data
      mov    ds, ax

      mov    ah, 9
      mov    dx, offset hello_message
      int    21h

      mov    ax, 4C00h
      int    21h
main endp
end main


어셈블리어 기초 지식

1. CPU

메모리에 있는 내용을 읽고, 쓰고, 연산(사칙연산, 비교)을 하고 데이터를 메모리와 레지스터로 보냅니다.

하나의 CPU는 12~14개의 레지스터를 가지고 있으며

레지스터에는 범용 레지스터, 상태 레지스터, 플래그 레지스터 등이 있습니다.

 

2. 레지스터

레지스터는 CPU의 연산에 필요한 데이터를 일시적으로 저장하는 기억장치입니다.
32bit, 64bit 레지스터들이 있으며 레지스터 하나의 저장공간을 의미합니다

 

3. RAM

프로그램을 작동시키기 위해 필요한 정보를 저장하는 하드웨어
반도체로 조립된 셀의 집합이며 각각의 셀들은 주소가 있습니다.
프로그램에서 메모리는 RAM을 말합니다.


어셈블러의 종류

MASM - Windows
GAS - Linux/Unix
NASM - Windows, Linux, MAC
SASM - Wiondows, Linux


참고문헌

FU11M00N [어셈블리어] 어셈블리어란? 기초 이론

위키백과 어셈블리어

인프런 - 유용한IT학습님의 어셈블리어 배우기에서 배운 내용을 포스팅할 예정

728x90
728x90
728x90
728x90

난해한 프로그래밍 언어란

일부러 다른 프로그래밍 언어에 비해 사용하기 어렵게 만든 언어

 

제작 목적은 프로그래밍 언어의 한계 측정, 어떤 개념의 증명을 위해
혹은 단순한 장난으로 제작

 

그 중 아희라는 언어를 배워보자

 

아희로 코딩한 "Hello, world!"

밤밣따빠밣밟따뿌
빠맣파빨받밤뚜뭏
돋밬탕빠맣붏두붇
볻뫃박발뚷투뭏붖
뫃도뫃희멓뭏뭏붘
뫃봌토범더벌뿌뚜
뽑뽀멓멓더벓뻐뚠
뽀덩벐멓뻐덕더벅


아희

1. 자음

ㅇ, ㄱ, ㅋ: 아무 일도 하지 않는다.
ㅎ: 프로그램을 종료한다.
ㄷ, ㄸ, ㅌ, ㄴ, ㄹ: 각각 덧셈, 곱셈, 뺄셈, 나눗셈, 나머지 연산.
모두 공통적으로 저장공간에서 두 값을 뽑아낸 다음 둘을 연산한 값을 저장공간에 저장한다. 순서가 있는 연산자의 경우 나중에 꺼낸 값이 연산자의 왼쪽에 온다.
ㅁ: 출력. 받침이 ㅇ이면 숫자, ㅎ이면 문자 출력. 나머지 종성이면 출력값 없음
ㅂ: 입력. 받침이 ㅇ이면 숫자, ㅎ이면 문자 입력. 나머지 종성은 획수를 따짐
ㅃ: 중복. 스택이라면 맨 위의 값을 그 값 위에 하나 더 집어넣고

            큐라면 맨 앞의 값을 앞에 하나 더 덧붙인다.

            통로라면 아까 보낸 값을 한 번 더 보낸다.
ㅍ: 바꿔치기. 스택이라면 맨 위 값과 그 바로 아래 값을

                 큐라면 맨 앞의 값과 그 바로 뒤 값을 바꾼다.

                 통로일 때의 동작은 미정.
ㅅ: 선택. 종성을 통해 자료구조에서 선택 가능.
ㅆ: 이동. 지금 저장공간에서 값 하나를 뽑아내서 받침이 나타내는 저장공간에 그 값을 집어넣는다.
ㅈ: 비교. 저장공간에서 값 두 개를 뽑아 내서 비교한다.

            나중에 뽑아낸 값이 더 크거나 같으면 1을, 아니면 0을 지금 저장공간에 집어넣는다.
ㅊ: 조건. 저장공간에서 값 하나를 뽑아내서 그 값이 0이 아니면 진행해야 할 방향대로, 0이면 그 반대 방향대로 간다.

 

2. 모음

모음의 방향이 커서의 방향이 된다
ㅏ: 오른쪽으로
ㅓ: 왼쪽으로
ㅜ : 아래로
ㅗ : 위로
ㅑ, ㅕ, ㅛ, ㅠ : 위와 같지만 2칸씩 이동
ㅣ: 커서가 세로로 들어오면 통과시키고, 가로로 들어오면 커서방향 반대로 뒤집는다.
ㅡ : 커서가 가로로 들어오면 통과시키고, 세로로 들어오면 커서방향 반대로 뒤집는다.
ㅢ : 어느방향으로 오던지 방향을 바꾼다.
이외의 모음은 아무런 기능을 하지 않습니다.

 

 

"Hello, world!"의 H 출력

밣밟따맣허

밣 : ㅀ의 획수 8을 입력

밟 : ㄼ의 획수 9을 입력

따 : 8과 9을 곱함 72

맣 : ㅁ은 출력 / 종성이 ㅎ이므로 아스키코드 72에 해당하는 H 출력

자바스크립트로 된 아희 실행기에서 한 단계씩 디버그(?) 가능

 

 

아희로 "Melon" 출력

밞북밙뚜맣뭏
붉더봀북토뭏
따빠뫃투볽뭏
북벋뻐더뽀후
타다빠밬토허


참고문헌

bloter - 들어보셨나요? 한글 프로그래밍 언어 3종

나무위키 - 난해한 프로그래밍 언어

아희 온라인 개발환경

나무위키 - 아희

728x90
728x90
728x90
728x90

구글 도크

구글의 검색 문법을 통한 해킹을 Google Dork 또는 Google Hacking 이라고 함

문법 내용 사용법
inurl 검색어가 있는 URL을 검색한다 inurl:melon
intitle 검색어가 있는 타이틀을 검색한다 intitle:admin
intext 검색어가 있는 본문을 검색한다 intext:root
site 해당 사이트에서만 검색한다 site:google.com
filetype 해당 확장자를 가진 파일을 찾는다 filetype:pdf

"covid" intitle:conspiracy site:cnn.com

"cnn.com"사이트에서 "conspiracy"을 타이틀로 가진 "covid" 검색

여기까지는 해킹이라고 하기엔...


feat. 디렉토리 리스팅

서버 설정에서 발생하는 취약점으로 브라우징하는 모든 파일들을 보여줌

 

url이 다음과 같을 때 production/login.php를 지우고

~~/admin까지 입력할 경우 하위 디렉토리파일들을 출력한다

 

구글 도크를 이용한 디렉토리 리스팅

url에 admin을 포함한 "index of"를 검색 (index of -> 디렉토리 리스팅을 위한 검색어)


참고문헌

시큐리티 월드 보안뉴스 - 해커들은 왜 구글 검색에 집착하나?

바다향기 웹 서버 디렉토리 리스팅 취약점

구글 검색을 이용한 해킹 방어.pdf

리틴 Blog 디렉토리 리스팅

728x90
728x90

'해킹' 카테고리의 다른 글

sql injection  (0) 2023.04.01
SSTI 취약점  (0) 2022.01.11
Cross Site Scripting (XSS)  (0) 2021.12.22
Same Origin Policy & Cross Origin Resource Sharing  (0) 2021.12.20
OWASP top 10 / 2021 업데이트 한글 번역  (0) 2021.11.22

728x90
728x90