Trong nhiều bài CTF, kẻ tấn công không biết trước khóa mã hóa nhưng biết một phần định dạng của bản rõ (gọi là "crib" — đoạn văn bản đã biết trước). Đây chính là kỹ thuật tấn công "known-plaintext" đơn giản nhất.
Cho một đoạn bản mã được tạo ra bằng cách XOR từng byte của flag với một khóa 1 byte key∈[0,255] (chưa biết). Biết rằng flag luôn có dạng CTF{...} — bắt đầu bằng chuỗi CTF{ và kết thúc bằng ký tự }, đồng thời toàn bộ flag chỉ gồm các ký tự ASCII in được (mã từ 32 đến 126). Hãy thử toàn bộ 256 khóa có thể để tìm ra khóa đúng và khôi phục flag.
Gợi ý thuật toán: với mỗi giá trị key từ 0 đến 255, giải mã toàn bộ bản mã, kiểm tra xem kết quả có phải là chuỗi ASCII in được, bắt đầu bằng CTF{ và kết thúc bằng } hay không; khóa đầu tiên thỏa mãn chính là khóa đúng.
Ví dụ: bản mã hex 5245576a706c ứng với khóa 17 giải mã ra flag CTF{a}.
Một dòng duy nhất: chuỗi hex của bản mã (chữ thường, độ dài luôn là số chẵn).
In ra một dòng duy nhất là flag đã giải mã được (dạng CTF{...}).
Ví dụ:
Đầu vào:
2037251801111617063c050c1100063c0e061e
Đầu ra:
CTF{brute_force_me}
Đầu vào:
4255477a72686f666d645e637875645e796e735e676d60667c
Đầu ra:
CTF{single_byte_xor_flag}
Đang tải editor...