这是一道ctf misc,请根据题目描述给我详细的解题过程,思路和答案
Creato il: 27 dicembre 2025
Risposto usando GPT-5.2 Thinking da Chat01
Creato il: 27 dicembre 2025
Risposto usando GPT-5.2 Thinking da Chat01
下面按“给了哪些文件 → 怎么定位目标行 → 怎么把输出还原成 flag”的思路,把这道 misc(其实偏“读日志+解码”)完整走一遍。
N(512 个 hex),一行公钥指数 e=0x10001(65537),还有一行额外参数(本题里不需要用到)。 (public.txt)C(512 个 hex)。<你提交的密文> <oracle 返回的明文(十六进制)>。题目不让你现场连 oracle,就把别人跑 oracle 的日志给你了。思路很直接:
ciphertext.txt 读出目标密文 Coracle_transcript.txt 每一行,把第一列当作“提交的密文”C 的那行,它的第二列就是 oracle 返回的“明文 hex”在 transcript 末尾能看到一行返回值是以 666c61677b... 开头的(66 6c 61 67 7b 正好是 ASCII 的 flag{),说明已经命中目标并拿到了 flag 明文(hex 形式)。 (public.txt)
oracle 的输出是十六进制文本(hex),把它转成 bytes 再解码即可:
66 6c 61 67 7b → flag{0xbe(显示成 ¾),这就是题目名“噪声”的体现:返回的末尾混进了一个非 ASCII 字节所以做法是:把 hex 转 bytes 后,去掉最后那个噪声字节,再按 ASCII 解码。
你可以用下面这段脚本复现:
pythonc = open("ciphertext.txt","r",encoding="utf-8").read().strip() pt_hex = None with open("oracle_transcript.txt","r",encoding="utf-8") as f: for line in f: a,b = line.strip().split() if a == c: pt_hex = b break pt = bytes.fromhex(pt_hex) print(pt) # 会看到末尾有 \xbe print(pt[:-1].decode("ascii")) # 去掉最后 1 个噪声字节
从 transcript 里对应行(明文 hex 以 flag{ 的 hex 开头)解码后,可打印的 flag 内容是:
flag{7a94faqe-e0a3-1qf0-8527-30050575612d-983f85d9-e0a3-11f0-88cc}
说明:oracle 返回的原始 bytes 末尾还多了一个噪声字节 0xbe(显示成 ¾),我按“噪声”将其剔除后得到上面的 flag 主体。 (public.txt)