728x90
728x90

728x90
728x90
import time

# from tkinter import filedialog
# filename = filedialog.askopenfilename(initialdir="/", title="텍스트 파일을 선택해 주세요",
#                                       filetypes=(("txt files", "*.txt"),
#                                                  ("all files", "*.*")))
# text_file = open(filename, 'r', encoding='UTF-8').readlines()
text_file = ['동해물과 백두산이 마르고 닳도록\n', '하느님이 보우하사 우리나라 만세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세\n',
             '남산 위에 저 소나무 철갑을 두른듯\n', '바람서리 불변함은 우리 기상일세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세\n',
             '가을 하늘 공활한데 높고 구름 없이\n', '밝은 달은 우리 가슴 일편단심일세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세\n',
             '이 기상과 이 마음으로 충성을 다하여\n', '괴로우나 즐거우나 나라사랑하세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세']
print('엔터를 입력하면 시작합니다.', end='')
input()
for x in text_file:
    correct = 0
    x = x.replace('\n', '')
    x = x.strip()
    print(x)
    start = time.time()
    write_text = input()
    print('속도 : %.2f' % (len(write_text) / (time.time() - start) * 60), end=' / ')
    for y, z in zip(x, write_text):
        if y == z:
            correct += 1
    print('정확도 : %.2f %%' % (correct / len(x) * 100))
    print('--------------------------------------------------')
text_file.close()

# from tkinter import filedialog
# filename = filedialog.askopenfilename(initialdir="/", title="텍스트 파일을 선택해 주세요",
#                                       filetypes=(("txt files", "*.txt"),
#                                                  ("all files", "*.*")))
# text_file = open(filename, 'r', encoding='UTF-8').readlines()

tkinter모듈의 askopenfilemane 함수를 사용하여 텍스트 파일을 선택 후 readlines 라인 별로 리스트에 저장한다.

 

text_file = ['동해물과 백두산이 마르고 닳도록\n', '하느님이 보우하사 우리나라 만세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세\n',
             '남산 위에 저 소나무 철갑을 두른듯\n', '바람서리 불변함은 우리 기상일세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세\n',
             '가을 하늘 공활한데 높고 구름 없이\n', '밝은 달은 우리 가슴 일편단심일세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세\n',
             '이 기상과 이 마음으로 충성을 다하여\n', '괴로우나 즐거우나 나라사랑하세\n', '무궁화 삼천리 화려 강산\n', '대한사람 대한으로 길이 보전하세']

애국가가 저장된 텍스트 파일을 불러와서 readlines 함수를 적용하면 위와 같이 리스트에 저장된다.

 

print('엔터를 입력하면 시작합니다.', end='')
input()

파일을 불러오고 엔터를 누룰 때까지 기다려준다.

 

for x in text_file:
    correct = 0
    x = x.replace('\n', '')
    x = x.strip()
    print(x)

리스트 text_file에서 하나씩 가져와서 개행문자를 제거하고 문자열 양쪽의 빈문자열을 제거한다.

 

	start = time.time()
	write_text = input()
	print('속도 : %.2f' % (len(write_text) / (time.time() - start) * 60), end=' / ')

속도를 측정하기위해 time.time()를 이용하여ㅕ 시작 시간을 저장하고 속도를 계산한다.

 

    for y, z in zip(x, write_text):
        if y == z:
            correct += 1
    print('정확도 : %.2f %%' % (correct / len(x) * 100))
    print('--------------------------------------------------')

for문으로 한 문자씩 정확도를 계산한다.

728x90
728x90
728x90
728x90

python으로 매크로를 만들어 반응속도 테스트에서 외계인이 되려 합니다.

pyautoGUI

마우스와 키보드 제어하는 라이브러리

pip install pyautogui를 이용하여 설치해야 함

 

자주쓰는 pyautoGUI 메서드

position = pyautogui.position()               # 좌표 객체 얻기

print(pyautogui.size())                           # 화면 전체 크기 확인하기

print(position.x)                                   # x, y 좌표

print(position.y)

pyautogui.moveTo(500, 500)                  # 마우스 이동 (x 좌표, y 좌표)

pyautogui.moveTo(100, 100, 2)              # 마우스 이동 (x 좌표, y 좌표 2초간)

pyautogui.click()                                  # 마우스 클릭

pyautogui.click(clicks= 2, interval=2)        # 2초 간격으로 2번 클릭

pyautogui.doubleClick()                        # 더블 클릭

pyautogui.click(button='right')                # 오른쪽 클릭

pyautogui.scroll(10)                              # 스크롤하기

pyautogui.drag(0, 300, 1, button='left')     # 드래그하기

 

write() 함수는 shift나 ctrl 등 특수키를 누룰수 없습니다.

pyautogui.write('hello world!')                           # 괄호 안의 문자를 타이핑 합니다.

pyautogui.write('hello world!', interval=0.25)         # 각 문자를 0.25마다 타이핑합니다.

 

pyautogui.press('shift')                                     # shift 키를 누릅니다.

pyautogui.keyDown('ctrl')                                 # ctrl 키를 누른 상태를 유지합니다.

pyautogui.keyUp('ctrl')                                     # ctrl 키를 뗍니다. 

 

키를 여러번 입력하고 싶을 때

pyautogui.press(['left', 'left', 'left'])                       # 왼쪽 방향키를 세번 입력합니다.

pyautogui.press('left', presses=3)                        # 왼쪽 방향키를 세번 입력합니다. 

pyautogui.press('enter', presses=3, interval=3)       # enter 키를 3초에 한번씩 세번 입력합니다. 

 

여러 키를 동시에 입력하고 싶을 때

pyautogui.hotkey('ctrl', 'c')                                # ctrl + c 키를 입력합니다.


Pillow

이미지 분석 및 처리를 도와주는 패키지

pip install pillow를 작성하여 설치해야 함


반응속도 테스트 외계인 되기

반응 속도 테스트 첫페이지 입니다.
보라색 화면을 클릭하면 빨간색이 되며 초록색이 되었을 때 클릭하여 반응속도를 체크합니다.

import pyautogui
from PIL import ImageGrab

a = 0
while a < 5:
    if ImageGrab.grab().getpixel(pyautogui.position()) == (178, 255, 178):
        pyautogui.click()
        a += 1

pyautogui.position()는 마우스의 좌표를 가져오는 함수이고

getpixel()은 x, y좌표을 매개변수로 받아서 그 위치의 RBG 값을 반환합니다,

마우스가 있는 위치의 RBG값이 초록색 부분 RGB(178, 255, 178)와 비교하여 같으면 클릭하는 작업을 반복합니다.


참고문헌

파이썬 웹크롤링 과 자동화에 대한 A to Z

인프런 강의 - 업무 자동화를 위한 파이썬 pyautogui, beautifulsoup 크롤링 기초

예제로 배우는 파이썬 프로그래밍 - 파이썬 이미지 처리 (Pillow)

정보의 공유 사회 티스토리 - 파이썬 이미지 처리 pillow(PIL) 설치 및 사용 예제 총정리

 

 

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 -&amp;amp;amp;amp;amp;amp;amp;amp;gt; 디렉토리 리스팅을 위한 검색어)


참고문헌

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

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

구글 검색을 이용한 해킹 방어.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