crypto/extremely original 64 solves / 179 points j...

創建於:2026年8月3日

使用 GPT-5.6 Thinking 回答 Chat01

問題

crypto/extremely original
64 solves / 179 points
joshadoodle

It seems that I have accidentally leaked my flag: oyO+UrMXccyqeo2W+WA5jZPVXNSAyYVwGt

Good thing that my computer generated keys to encrypt my flag before releasing it to the public. The flag for this challenge will be "LITCTF" followed by a string of characters. Make sure to insert curly braces yourself: "LITCTF{...}".
solve challenge
tất cả thông tin về challenge đã được cung cấp đầy đủ
challenge không lỗi và có flag

Python

python
import base64, binascii s="oyO+UrMXccyqeo2W+WA5jZPVXNSAyYVwGt" for pad in range(4): try: b=base64.b64decode(s+"="*pad) print(pad,len(b),b.hex(),b) except Exception as e: print(pad,e)

Python

python
s="oyO+UrMXccyqeo2W+WA5jZPVXNSAyYVwGt" len(s) 34

Python

python
import string ALPH=string.ascii_uppercase+string.ascii_lowercase+string.digits+'+/' CT='oyO+UrMXccyqeo2W+WA5jZPVXNSAyYVwGt' KNOWN='LITCTF' C=[ALPH.index(ch) for ch in CT] def lcg(a,c,s0,n=34): ks=[]; s=s0 for _ in range(n): ks.append(s) s=(a*s+c)%64 return ks sol=[] for a in range(64): for c in range(64): for s0 in range(64): ks=lcg(a,c,s0) pt=''.join(ALPH[x^k] for x,k in zip(C,ks)) if pt.startswith(KNOWN): sol.append((a,c,s0,pt)) len(sol), sol[:20] (1, [(21, 27, 35, 'LITCTFtH3+XOR+fuNct10n+1s/n0t+s4F3')])

思考

Used python tool

Worked for 46s

回答

Flag

text
LITCTF{tH3+XOR+fuNct10n+1s/n0t+s4F3}

Cách giải

Tên “eXtremely ORiginal” giấu chữ XOR. Chuỗi ciphertext gồm 34 ký tự thuộc bảng chữ cái Base64:

python
ALPH = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

Nhưng đây không phải dữ liệu Base64 thông thường; mỗi ký tự biểu diễn trực tiếp một số 6-bit từ 0 đến 63. Việc đề yêu cầu tự thêm {} cũng gợi ý rằng plaintext chỉ sử dụng bảng chữ cái 64 ký tự này, vốn không chứa dấu ngoặc nhọn. (GitHub)

Ta biết plaintext bắt đầu bằng LITCTF. XOR chỉ số của sáu ký tự đầu:

text
cipher: o y O + U r plain : L I T C T F key : 35 58 29 60 7 46

Cụm “computer generated keys” gợi ý một PRNG đơn giản. Brute-force Linear Congruential Generator modulo 64:

ki+1=(aki+c)mod64k_{i+1}=(a k_i+c)\bmod 64

cho đúng một nghiệm:

text
a = 21 c = 27 k0 = 35

Tức là:

ki+1=(21ki+27)mod64k_{i+1}=(21k_i+27)\bmod64

Giải mã toàn bộ bằng plaintext_index = ciphertext_index XOR key thu được:

text
LITCTFtH3+XOR+fuNct10n+1s/n0t+s4F3

Script tối giản:

python
import string alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + "+/" ciphertext = "oyO+UrMXccyqeo2W+WA5jZPVXNSAyYVwGt" key = 35 plaintext = "" for char in ciphertext: plaintext += alphabet[alphabet.index(char) ^ key] key = (21 * key + 27) % 64 print(plaintext) print(f"LITCTF{{{plaintext[6:]}}}")

Việc mã hóa lại plaintext bằng cùng keystream tái tạo chính xác ciphertext đã cho. (GitHub)

分享這個問答