일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 불법유통근절
- UKPT
- 국정원
- 기타정보
- 프로젝트
- 국가기록원
- 도구모음
- 화학물질
- 불법유통
- 화학물질불법유통온라인감시단
- 화학물질안전원
- codeup
- 12기
- 경기팀
- 연구모임
- suninatas
- 웹 해킹 입문
- 대외활동
- HTML
- Los
- nurisec
- 여행
- MITRE ATT&CK
- 파이썬
- PHP
- 국가정보원
- UKPT level
- webhacking
- Service
- 정보보안
- Today
- Total
agencies
파이썬 프로그래밍 본문
난해한 프로그래밍 언어 제작 (NIS*)
이번 시간에는 출력 기능만 지원하는 난해한 프로그래밍 언어를 제작하였습니다.
N I S * 총 4글자만 사용됩니다.
- N : 1
- I : 변수 저장
- S : 출력
- * : 10 곱하기
소스코드
"""
N = 입력 값 (1)
I = 변수 저장
S = 출력
* = 곱하기 (10)
"""
I = 0
II = 0
tmp = ""
def user_in(msg):
global I, II, tmp
for i in msg:
if (i!='N') and (i!='I') and (i!='S') and (i!='*'):
print("This is not the NIS* programing language")
return 0
else:
if i == 'N':
I += 1
elif i == 'I':
tmp += chr(I)
I = 0
elif i == '*':
II = I
II *= 10
I = II
elif i == 'S':
print(tmp)
break
def user_out(msg):
global tmp
for i in msg:
t1 = int(ord(i)/10)
t2 = ord(i)%10
for j in range(t1):
tmp += 'N'
tmp += '*'
for j in range(t2):
tmp += 'N'
tmp += 'I'
tmp += 'S'
print(tmp)
print("[NIS*] Programing language")
x = input("1 : decoding\n2 : encoding\n> : ")
msg = input("msg > ")
if x == '1':
user_in(msg)
elif x == '2':
user_out(msg)
이미지 픽셀 암호 프로그램
메시지를 이미지의 픽셀 값으로 저장하여 숨기는 프로그램을 제작했습니다.
* 소스코드 중 사용할 부분만 제외하고 나머지는 주석처리하여 사용하시면 편리합니다.
소스코드
from PIL import Image
from tkinter import messagebox
img = Image.new("RGBA", (111, 111), (0,0,0,0))
Text = ""
print("메시지를 입력하세요 (종료:Ctrl + D)")
while True:
try:
text = input("msg > ")
Text += text
except EOFError:
break
c = 0
cc = len(Text)
if cc > 111*111:
messagebox.showwarning("경고","입력된 텍스트가 이미지의 크기를 초과했습니다.")
else:
for i in range(111):
for j in range(111):
if c >= cc:
break
if ord(Text[c]) > 255:
char = Text[c]
char_code = ord(char)
char_code_str = str(char_code)
r_value = int(char_code_str[0:2])
g_value = int(char_code_str[2:3])
b_value = int(char_code_str[3:])
img.putpixel((i, j), (r_value+1, g_value+11, b_value+111, char_code))
else:
img.putpixel((i, j), (0, 0, 0, ord(Text[c])))
c += 1
img.save("new.png")
img.close()
img = Image.open("new.png")
data = img.load()
Text = ""
for i in range(111):
for j in range(111):
r, g, b, a = data[i,j]
if a == 0:
break
else:
if (r == 0) and (g == 0) and (b == 0):
Text += chr(a)
else:
char_code_str = str(r-1).zfill(2) + str(g-11).zfill(1) + str(b-111).zfill(2)
char_code = int(char_code_str)
Text += chr(char_code)
messagebox.showinfo("메시지가 저장되었습니다","%s"%Text)
1. 먼저 111x111 크기의 이미지를 생성합니다.
2. 사용자가 이미지에 숨길 메시지를 입력합니다.
3. Ctrl + D를 입력하면 입력이 종료됩니다.
4. 만약 입력한 메시지의 길이가 이미지의 크기보다 크다면 프로그램은 종료됩니다.
5. 한글처럼 유니코드의 값이 클 경우 R, G, B 의 값에 입력되며, 유니코드의 값이 255 미만이라면 A에 값이 입력됩니다.
6. putpixel을 할 때 특정 숫자를 더하는 이유는 이미지의 색을 다르게 하기 위해서입니다. (푸른색)
7. 이미지를 new.png로 저장합니다.
1. 이미지에 메시지가 담겨 있는 부분을 추출하기 위해 new.png 파일을 엽니다.
2. 만약 메시지가 없다면 데이터 추출 반복문을 종료합니다.
3. 만약 유니코드의 값이 작을 경우 바로 추출합니다.
4. 유니코드의 값이 클 경우 특정 값을 빼고 R, G, B 에 나눠져 있던 값들을 하나로 합칩니다.
5. 메시지가 성공적으로 추출됩니다.
프로그램을 실행한 모습 ▼
▼ 저장된 이미지
소스코드
from PIL import Image
from PIL import ImageFilter
# pip install Pillow
import datetime
import os
now = str(datetime.datetime.now()).split()
print('[이미지 수정 v0.1]')
print('프로그램 실행 일자 : %s' %now[0])
print('-------------------------------')
img = input('이미지파일 선택(예시:image.png) > ')
timg = img
tmp = img[-3:].lower()
x = ['png','bmp','gif','jpg']
ck = 0
for i in x:
if i in tmp:
ck = 1
if ck == 0:
print('지원되지 않거나 잘못된 파일확장명 감지[ERRORCODE2]')
os.system('pause>nul')
exit()
img = str(os.getcwd())+'\\'+img
if os.path.isfile(img):
try:
image = Image.open(img)
c1 = int(input('1. 흑백\n2. 블러\n[선택] : '))
if c1 == 1:
gray = image.convert('L')
gray.show()
gray.save('%s'%timg)
exit()
elif c1 == 2:
blur = image.filter(ImageFilter.GaussianBlur(5))
blur.show()
blur.save('%s'%timg)
exit()
else:
print('잘못된 요청입니다[ERRORCODE1]')
os.system('pause>nul')
exit()
except:
print('잘못된 요청입니다[ERRORCODE1]')
os.system('pause>nul')
exit()
else:
print('%s의 이미지파일을 찾을 수 없습니다.'%img)
print('경로 및 파일명을 확인하신 후 다시 시도하세요[ERRORCODE1]')
os.system('pause>nul')
파이썬 디스코드 봇 (기초) 다루기
- 디스코드 로그인
- 페이지 이동 : 링크
- 봇 생성 및 초대(하단 이미지 참조)
BOT > Add bot
OAuth2 - URL Generator > scopes
OAuth2 - URL Generator > scopes - BOT permissions
디스코드 방을 운영할 수 있는 권한이 있어야 됩니다
토큰 값을 복사합니다 (토큰값이 보이지 않을 시 Reset Token 버튼을 누릅니다)
소스코드
import discord
# pip install discord
# pip install --upgrade discord.py
from discord.ext import commands
import asyncio
play = discord.Game('bot')
bot = commands.Bot(command_prefix='', status=discord.Status.online, active=play)
@bot.command(aliases=['테스트'])
async def hello(ctx):
await ctx.send('TEST!!!')
bot.run('Bot Token')
* bot.run('Bot Token')에는 복사한 토큰값을 넣습니다
코드를 실행하면 우리가 생성한 봇이 활성화 되며, 명령어를 입력하면 봇이 반응합니다
파이썬 AFFINE 암호 구현하기
프로그램 실행 화면
소스코드
import datetime
import os
now = str(datetime.datetime.now()).split()
print('[CTF affine solve v0.1]')
print('프로그램 실행 일자 : %s'%now[0])
print('-------------------------------')
msg = input('\nInput > ')
A = {'a':'0','b':'1','c':'2','d':'3','e':'4','f':'5','g':'6','h':'7','i':'8',
'j':'9','k':'10','l':'11','m':'12','n':'13','o':'14','p':'15','q':'16',
'r':'17','s':'18','t':'19','u':'20','v':'21','w':'22','x':'23','y':'24','z':'25'}
AA = {}
for x,y in A.items():
AA[y] = x
B = []
for i in msg:
if i >= 'a' and i <= 'z':
B.append(0)
else: B.append(1)
msg = msg.lower()
tmsg = ''
C = [1,3,5,7,9,11,15,17,19,21,23,25]
for k1 in C:
for k2 in range(0,26,1):
for i in range(len(msg)):
if msg[i] >= 'a' and msg[i] <= 'z':
x = int(A[msg[i]])*k1+k2
x %= 26
x = AA[str(x)]
if B[i] == 1:
x = x.upper()
else: x = msg[i]
tmsg += x
print('%s'%tmsg)
tmsg = ''
print('-------------------------------')
print('성공적으로 작업을 수행했습니다\n-------------------------------')
os.system('pause>nul')
네이버 뉴스 스크래핑 * 2022년 8월 기준
프로그램 실행 화면
소스코드
import datetime
import os
import requests
from bs4 import BeautifulSoup
now = str(datetime.datetime.now()).split()
print('[네이버 뉴스 스크래핑 v0.1]')
print('* 2022-08-11')
print('프로그램 실행 일자 : %s' %now[0])
print('-------------------------------')
key = input('키워드 입력(예시:날씨) > ')
print('-------------------------------')
print()
for x in range(1,4,1):
print('\n< %d페이지 >\n\n'%x)
url = 'https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%s&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=38&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=%d'%(key,x)
res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')
t = soup.select('#main_pack > section.sc_new.sp_nnews._prs_nws > div > div.group_news > ul > li')
for i in t:
who = i.select_one('div.news_wrap.api_ani_send > div > div.news_info > div.info_group > a.info.press')
print('[%s]'%who.text)
title = i.select_one('div.news_wrap.api_ani_send > div > a')
print(title.text)
u = title['href']
print(u)
print()
print()
print('----------------------------------------------------------------------------------------------------')
print()
os.system('pause>nul')
바탕화면 변경 프로그램
프로그램 실행 화면
소스코드
import ctypes
import os
import datetime
now = str(datetime.datetime.now()).split()
print('[바탕화면 변경 v0.1]')
print('* windows 10')
print('프로그램 실행 일자 : %s' %now[0])
print('-------------------------------')
img = input('이미지파일 선택(예시:image.png) > ')
tmp = img[-3:].lower()
x = ['png','bmp','gif','jpg']
ck = 0
for i in x:
if i in tmp:
ck = 1
if ck == 0:
print('지원되지 않거나 잘못된 파일확장명 감지[ERRORCODE2]')
os.system('pause>nul')
exit()
img = str(os.getcwd())+'\\'+img
if os.path.isfile(img):
try:
ctypes.windll.user32.SystemParametersInfoW(20, 0, img, 0)
except:
print('잘못된 요청입니다[ERRORCODE1]')
os.system('pause>nul')
exit()
else:
print('%s의 이미지파일을 찾을 수 없습니다.'%img)
print('경로 및 파일명을 확인하신 후 다시 시도하세요[ERRORCODE1]')
os.system('pause>nul')
파이썬으로 컴퓨터 사양 확인하는 방법
프로그램 실행 화면
소스코드
import datetime
import platform as p
import psutil # pip install psutil
import getmac # pip install getmac
import os
now = str(datetime.datetime.now()).split()
print('[PC 사양 확인 프로그램 v0.1]')
print('프로그램 실행 일자 : %s' %now[0])
print('-------------------------------')
print('운영체제 : %s %s'%(p.system(), p.version()))
print('프로세서 : %s'%p.processor())
m = psutil.virtual_memory().total/1024**3
print('메모리 : %d GB'%round(m))
d = psutil.disk_usage('C:\\').total/1024**3
print('C 드라이브 : %d GB'%round(d))
print('물리주소 : %s'%getmac.get_mac_address())
print('-------------------------------')
print('프로그램을 종료합니다')
os.system('pause>nul')
파이썬으로 티스토리 블로그를 백업하는 방법
프로그램 실행 화면
소스코드
import datetime
import os
import requests
from bs4 import BeautifulSoup # pip install BeautifulSoup4
now = str(datetime.datetime.now()).split()
print('[Tistory 게시글 backup v0.1]')
print('프로그램 실행 일자 : %s'%now[0])
print('-------------------------------')
url = input('티스토리 블로그 URL 입력(예시 : k-nis.tistory.com) : ')
if('tistory.com' not in url):
print('잘못된 주소입니다[ERRORCODE1]')
exit()
if('http' in url):
print('"http"를 제거하고 다시 입력하시기 바랍니다[ERRORCODE2]')
exit()
print('\n* 포스트 주소는 숫자로 설정해야 합니다')
print('* 관리 > 블로그 > 주소설정 > "포스트 주소를 숫자로 설정합니다"')
print('-------------------------------')
try:
st = int(input('시작 게시물 주소 입력(예시:1) : '))
except:
print('유효하지 않은 요청입니다[ERRORCODE1]')
st = 1
try:
ed = int(input('끝 게시물 주소 입력(예시 : 111) : '))
except:
print('유효하지 않은 요청입니다[ERRORCODE1]')
ed = 1
print('-------------------------------')
ed += 1
for i in range(st,ed,1):
tmp = 'https://'+url+'/'+str(i)
tmp2 = requests.get(tmp)
soup = BeautifulSoup(tmp2.text,'html.parser')
fp = open('%s_%d.html'%(url,i),'w',encoding='utf8')
fp.write(str(soup))
fp.close()
print('성공적으로 작업을 완료하였습니다')
os.system('pause>nul')
ROT26
프로그램 실행 화면
소스코드
import datetime
import os
now = str(datetime.datetime.now()).split()
print('[CTF rots solve v0.1]')
print('프로그램 실행 일자 : %s'%now[0])
print('-------------------------------')
tmp = ''
flag = input('Input > ')
print()
for i in range(1,27,1):
for j in range(len(flag)):
x = flag[j]
if((x >= 'a' and x <= 'z')or(x >= 'A' and x <= 'Z')):
y = chr(ord(x)+i)
if((y > 'z')or(y > 'Z' and(y < 'z'and x < 'a'))):
x = chr(ord(y)-26)
else: x = y
tmp += x
if i < 10: print('ROT[0%d] %s' %(i, tmp))
else: print('ROT[%d] %s' %(i, tmp))
tmp = ''
print('-------------------------------')
print('프로그램을 종료합니다')
os.system('pause > nul')
XOR을 통한 메시지 암·복호화
암호화 할 메시지
프로그램 실행 화면
출력된 결과
소스코드
import datetime
import sys
now = str(datetime.datetime.now()).split()
print('[암·복호화 프로그램 v0.1]')
print('프로그램 실행 일자 : %s' %now[0])
print('-------------------------------')
print('파일명 입력(예:test.txt)')
locate = input('입력 : ')
password = input('비밀번호 입력 : ')
cnt = 0
tmp1 = ''
tmp2 = ''
try:
fp = open(locate,'r',encoding='utf8')
for line in fp:
for little in line:
tmp1 += chr(ord(little) ^ (ord(password[cnt])+111))
cnt += 1
if(len(password) <= cnt): cnt = 0
tmp2 += tmp1
except:
print('\n파일명 또는 파일경로가 올바르지 않습니다[ERRORCODE1]')
exit()
fp.close()
result = '[R]-'+locate
fp2 = open(result,'w',encoding='utf8')
fp2.write(tmp2)
fp2.close()
팀명 랜덤 생성기
프로그램 실행 화면
소스코드
import datetime
import os
import random as r
now = str(datetime.datetime.now()).split()
print('[팀명 랜덤 생성기 v0.1]')
print('프로그램 실행 일자 : %s' %now[0])
print('-------------------------------')
A = ['A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z']
B = ['a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t',
'u','v','w','x','y','z']
C = ['0','1','2','3','4','5','6','7','8','9']
try:
a1 = int(input('생성할 글자수 입력 : '))
except:
print('잘못된 값을 입력했습니다 [ERRORCODE0]')
a1 = 3
print('\n\n<조합 방식>\n')
print('1. 대문자')
print('2. 대문자+소문자')
print('3. 대문자+숫자')
print('4. 대문자+소문자+숫자')
try:
a2 = int(input('입력 : '))
except:
print('잘못된 값을 입력했습니다 [ERRORCODE0]')
a2 = 1
try:
a3 = int(input('\n\n팀명 목록 개수 입력 : '))
except:
print('잘못된 값을 입력했습니다 [ERRORCODE0]')
a3 = 10
print('-------------------------------')
tmp = ''
for i in range(a3):
for j in range(0,a1,1):
if(a2 == 1):
x = r.randrange(0,26)
tmp += A[x]
elif(a2 == 2):
seq = r.randrange(0,2)
if(seq == 0):
x = r.randrange(0,26)
tmp += A[x]
else:
x = r.randrange(0,26)
tmp += B[x]
elif(a2 == 3):
seq = r.randrange(0,2)
if(seq == 0):
x = r.randrange(0,26)
tmp += A[x]
else:
x = r.randrange(0,10)
tmp += C[x]
else:
seq = r.randrange(0,3)
if(seq == 0):
x = r.randrange(0,26)
tmp += A[x]
elif(seq == 1):
x = r.randrange(0,26)
tmp += B[x]
else:
x = r.randrange(0,10)
tmp += C[x]
print(tmp)
tmp = ''
print('-------------------------------')
print('프로그램을 종료합니다')
os.system('pause > nul')
Pyinstaller를 이용하여 exe 파일로 변경하는 방법
pip install pyinstaller
pyinstaller --onefile [exe로변환할파일.py]
'Ⅰ. 프로그래밍' 카테고리의 다른 글
파이썬 프로그래밍 (터틀그래픽) (0) | 2024.01.29 |
---|---|
파이썬 프로그래밍을 통한 ben.exe 프로그램 제작하기 (0) | 2024.01.29 |
파이썬 해킹 입문 (해킹기술 및 개요) (0) | 2024.01.29 |
파이썬 키보드 후킹 (0) | 2024.01.29 |
파이썬 MBR 변경 실습 (부팅 불가) (0) | 2024.01.29 |