Multilingual?
第一节:题目
附件是三行"乱码",每行是被用错编码读出来的文本。跟名字一样,要变成我们可以看懂的语言
第二节:过程
- 一三行各自试组合:先用 latin-1 / cp1252 / gbk / gb2312 把乱码编回字节,再拿 utf-8 / big5 / gb18030 解出来。比如第三行 £°£ä£±£î£ç£ó£ý 一路下来就是编码链的产物。
- 而第二行就是全角转半角符号就行了,相当于直接给了我们一部分的答案。
- 三行还原出的三段拼起来就是 flag。
- ps.这个第一行的有点阴试了好多解码都没解出来...
# 题目中提取出的三行乱码
texts = [
"¡H¤Ñ¢â¢Ô¡a¢Ü¢²£@¡Ä¢â¢-¢ú",
"1 d__0 f__3 n c",
"£°£ä£±£î£ç£ó£ý"
]
# 候选来源编码:把乱码字符"编回"字节时用的编码(哪个能编得回去就用哪个)
source_encodings = ['latin-1', 'iso-8859-1', 'cp1252', 'gbk', 'gb2312', 'gb18030']
# 候选目标编码:字节再按它解码
target_encodings = ['utf-8', 'gbk', 'gb2312', 'gb18030', 'big5', 'utf-16']
print("开始尝试解码...\n")
for i, text in enumerate(texts):
print(f"--- 正在处理第 {i+1} 行: {text} ---")
found = False
for src in source_encodings:
for tgt in target_encodings:
if src == tgt:
continue # 编解码同一套 = 白转一圈,跳过
try:
# 核心逻辑:先按错误编码转回字节,再按正确编码解码
decoded = text.encode(src).decode(tgt)
# 过滤掉解码后还是乱码或者空字符串的情况
# ('�' = 解码失败的替换符;£¡¤ 那批是乱码字母表字符,结果里还留着 = 没还原干净)
if decoded.strip() and not any(c in decoded for c in ['�', '£', '¡', '¤']):
print(f"[成功] 源编码: {src:<10} -> 目标编码: {tgt:<10} => 结果: {decoded}")
found = True
except (UnicodeEncodeError, UnicodeDecodeError):
pass
if not found:
print("未找到完美的编码组合,可能需要手动分析。")
print()
最后 flag:
?CTF{N3w_W0r1d_0f_3nc0d1ngs}