WeChall - Scream!

Hello ,

This is a training challenge for simple substitution with an additional problem. The glyphs used all look alike a bit to confuse you. Punctuation has been removed. The text is in english.

I bet you will get it and know what to do with this:


Good Luck!

  • gizmore

Note: The challenge solution is bound to your WeChall session id.

solution

Layer 1: Scream Cipher

每个 Unicode 字符是 A + 变音符号的组合。使用 23 个不同字符(22 个 A 变体 + 1 个纯 A)。

Scream Code Subst
Ǎ U+01CD A
Ǡ U+01E0 B
 U+00C2 C
A U+0041 D
U+1EB2 E
Ä U+00C4 F
U+1EAE G
U+1EB6 H
Ȃ U+0202 I
U+1EA4 J
Ą U+0104 K
U+1EB0 L
U+1EB4 M
Ȧ U+0226 N
Ǟ U+01DE O
U+1EAA P
À U+00C0 Q
Ā U+0100 R
Á U+00C1 S
Ȁ U+0200 T
U+1EA2 U
U+1EA8 V
U+1EAC W
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> CIPHER = {
... "A":"A", # Round-trip!
... "B":"Á","G":"Ẳ","L":"Ậ","Q":"Ǟ","V":"À",
... "C":"Ă","H":"Ẵ","M":"Ầ","R":"Ȧ","W":"Ả",
... "D":"Ắ","I":"Ǎ","N":"Ẩ","S":"Ǡ","X":"Ȃ",
... "E":"Ặ","J":"Â","O":"Ẫ","T":"Ạ","Y":"Ā",
... "F":"Ằ","K":"Ấ","P":"Ä","U":"Ȁ","Z":"Ą",
... }
... CIPHER.update({map(str.lower, kv) for kv in CIPHER.items()})
... UNCIPHER = {v: k for k, v in CIPHER.items()}
...
... def SCREAM(text: str) -> str:
... return "".join(CIPHER.get(ch, ch) for ch in text)
...
... def unscream(scream: str) -> str:
... return "".join(UNCIPHER.get(ch, ch) for ch in scream)
...
...
... print(s := SCREAM("**************************************************************************************************************************\
*************************************************************************************************************************************************\
******************************************************************"))
... # ǠĂȦẶAẦ ĂǍÄẴẶȦ
...
... print(unscream(s))
... # SCREAM CIPHER

Layer 2: 替换密码

中间字母 (A-W) 构成替换密码,无空格(连续文本)。使用 quadgram hill-climbing 破解。

替换映射表(Cipher → Plain):

Cipher Plain Cipher Plain
A E N G
B T O D
C S P C
D A Q M
E O R K
F I S P
G N T F
H U U W
I R V V
J Y W X
K H
L L
M B

使用 subsolve (Rust, quadgram hill climbing):

1
subsolve --patristocrat -f cipher_text.txt
1
❯ ./target/release/subsolve "*********************************************************************************************************************************************************************************************************************************************************************************************************************************************"

也可以看成一个非常规单次加密的单表替换Scream Cipher。