기억나는대로 일단 적어봄
DES는 1970년대에 개발된 암호화 표준으로, 모든 기술이 그렇듯, 초기에는 매우 강력한 암호화 기술이었음. 그러나 시간이 지남에 따라 컴퓨팅 기술의 발전으로 DES는 취약해지고 공격자가 상대적으로 쉽게 해독이 가능해졌음. 이에 따라 현재는 더 강력한 암호화 기술로 대체됨.
CBC는 블록 암호화 모드임. 블록으로 나눠서, 평문 블록을 암호화한 다음 앞선 블록의 암호문과 연결하여 다음 블록을 암호화하는 방식. 각 블록의 암호화에 이전 블록의 암호문을 사용하기 때문에, 암호문 패턴을 숨길수 있음. CBC 모드는 AES 같은거랑 같이 사용됨
ROT은 텍스트를 회전(Shift)하여 암호화하는 간단한 치환 암호화 방법. ROT13은 가장 잘 알려진 ROT 변형 중 하나로, 영문 알파벳을 13자리만큼 회전시켜 암호화함. 보안이 좋지는 않음
2중배열을 이용해서 평문 문자를 암호화하는 방법입니다. 복잡한 대응표 가져다가 원문 암호화하는 방식임. 예를 들어, HELLO를 암호화한다했을때, 각각 대응되는 문자인 H->X, E->Y, L->Z, R->A, O->B, W->C, U->D로 바꾸는식. 보안은 딱히....
AES는 현대의 안전한 데이터 암호화에 가장 일반적으로 사용되는 표준 중 하나입니다. AES는 2001년에 NIST에 의해 채택되었고, 다양한 키 길이(128비트, 192비트, 256비트)를 지원하여 다양한 보안 수준을 제공한다. 치밀하게 설계된 덕분에 지금까지 미국정부가 쓰는중
https://www.boxentriq.com/code-breaking/caesar-cipher
이거 써서 돌리면

이렇게 결과가 나오는데, 가장 가능성있어보이는, 첫번째꺼가 플래그처럼 보인다
encfile이랑 파이썬 파일 하나가 나오는데 평문에서 바이트들을 각각 128씩 민 거라서 반대로 밀면 복호화가 가능하다. 이게 전체가 256개로 고정되어있어서 가능. 그럼 대충 주어진 파이썬 파일 가져다가 복호화 코드 만들면된다. 먼저 rb로 여는거 그거 그냥 r로 바꾸고, 저장도 decfile에 하도록 수정한다
#!/usr/bin/env python3
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
with open('encfile', 'r', encoding='utf-8') as f:
plain_s = f.read()
plain_list = [plain_s[i:i+2] for i in range(0, len(plain_s), 2)]
enc_list = list(range(len(plain_list)))
for i in range(len(plain_list)):
hex_b = plain_list[i]
index = hex_list.index(hex_b)
enc_list[i] = hex_list[(index + 128) % len(hex_list)]
enc_list = ''.join(enc_list)
with open('decfile', 'w', encoding='utf-8') as f:
f.write(enc_list)
그다음에 할거는 이걸 HxD같은걸로 여는건데, 이거 그냥 파일로 열면 ANSI로 안나와서(이상하게 내 컴에선 그랬음), HxD 열고 F -> N 해서 새로 파일 열고, 거기다가 decfile 내용 붙여넣으면 된다.

저기 보이는 decoded text 부분에 있는거 전체선택해서 PNG 파일로 저장하면 되는데, 그러면 플래그가 나온다.
cyberchef 쓰면 쉽게 구할 수 있다

DH{나온거}를 입력했는데도 안됐다. 그래서 댓글을 보니까 DH, {, }, _를 빼고 제출하는거라고 되어있어서 그렇게 해서 제출하니까 됐다 ㅋㅋ;;
from pwn import *
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
p = remote('host3.dreamhack.games', 9128)
i=print;y=bytes;n=range;
def rl():return p.recvline()
def l(a):p.sendline(a)
def la(a,b):p.sendlineafter(a,b)
def b(a):return bytearray.fromhex(a.decode())
def bb(a):return bytes.fromhex(a)
def e(a): p.sendline(b'1');p.sendlineafter(b":",a);return b(p.recvline())
def d(a): p.sendline(b'2');p.sendlineafter(b":",a);return b(p.recvline())
l="4C"*48;c=e(l);t=c[:16]+c[16:32]+c[:16]+c[-32:];m=d(t.hex())[32:48];la(b"[3] Get Flag", b'3');rl();f=bb(rl().decode().replace("flag = ", ""));k=y(c[16+i]^0x4C^m[i] for i in n(((1+1)*(1+1))*((1+1)*(1+1))));i(unpad(AES.new(k,AES.MODE_CBC,k).decrypt(f),((1+1)*(1+1))*((1+1)*(1+1))).decode())
이러면 된다.