WeChall - Count, don't wonder

Challenge

页面仅展示一张 256×256 JPEG 图片 bytes.jpg (27233 bytes),无文字描述。图片右侧是 9 行 × 3 列黑色数字(195, 642, 358, 178, 323, 587, 911, 365, 247),垂直排列。

Solution

对文件中 256 种可能的字节值 (0x00-0xFF) 各自计数,得到一个 256 元素的频率数组。将这些计数值作为 ASCII 字符串联起来,得到的文本就是 Morse 电码的英文拼写形式。

1
2
3
4
5
6
7
8
9
10
11
12
import collections

with open('bytes.jpg', 'rb') as f:
data = f.read()

freq = collections.Counter(data)
freq_seq = [freq.get(i, 0) for i in range(256)]

# 频率值 → ASCII 字符
text = ''.join(chr(f) if 32 <= f < 128 else f'[{f}]' for f in freq_seq)
print(text)
# 输出: [163][301]dahditdahdahgapditgapditditditgapdahgap...dahdahdah[256][256]

0x00 出现 163 次和 0x01 出现 301 次作为前缀,0xFE 和 0xFF 各出现 256 次作为后缀。

将频率文本中的 dah-dit.gap → 字母分隔:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 去掉结构标记,只保留 Morse 文字
morse_part = text.replace('[163]', '').replace('[301]', '').replace('[256]', '')
morse_chars = [c for c in morse_part.split('gap') if c]
symbols = [c.replace('dah', '-').replace('dit', '.') for c in morse_chars]

MORSE = {
'.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E',
'..-.': 'F', '--.': 'G', '....': 'H', '..': 'I', '.---': 'J',
'-.-': 'K', '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O',
'.--.': 'P', '--.-': 'Q', '.-.': 'R', '...': 'S', '-': 'T',
'..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X', '-.--': 'Y',
'--..': 'Z',
}

decoded = ''.join(MORSE.get(s, f'[{s}]') for s in symbols)
print(decoded)
leonardo