crypto/extremely original 64 solves / 179 points j...
Creado el: 3 de agosto de 2026
Respondido usando GPT-5.6 Thinking por Chat01
Creado el: 3 de agosto de 2026
Respondido usando GPT-5.6 Thinking por 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
pythonimport 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)
pythons="oyO+UrMXccyqeo2W+WA5jZPVXNSAyYVwGt" len(s) 34
pythonimport 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')])
textLITCTF{tH3+XOR+fuNct10n+1s/n0t+s4F3}
Tên “eXtremely ORiginal” giấu chữ XOR. Chuỗi ciphertext gồm 34 ký tự thuộc bảng chữ cái Base64:
pythonALPH = "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:
textcipher: 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:
cho đúng một nghiệm:
texta = 21 c = 27 k0 = 35
Tức là:
Giải mã toàn bộ bằng plaintext_index = ciphertext_index XOR key thu được:
textLITCTFtH3+XOR+fuNct10n+1s/n0t+s4F3
Script tối giản:
pythonimport 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)