Follow 是一个新出的 RSS 阅读器,目前还在内测阶段,邀请制获得体验资格。最初的邀请码只能通过官方获取,例如官方会不定期在 discord,x 发放一定量的邀请码,你也可以直接给官方写邮件发私信等方式获取到邀请码。
同时,已经有邀请码且激活了的用户可以邀请其他用户从而形成邀请码的裂变
用户生成的新的邀请码大抵有这几个去处
如果你没有认识的人给你生成邀请码,也没有足够的运气能够在几百几千人的抽奖中获得一个邀请码,那么你获得邀请码的方法来源于 discord,大量用户会在里面发布自己生成的邀请码。由于直接将邀请码发出来会被某些无良用户用脚本直接抢占,因此大家通常都会对邀请码做一些修改,例如以图片的形式给出邀请码拼手速,或者是隐藏其中的某一位或者两位拼运气。此类邀请码都活不过五分钟。
为了增加趣味性,人们开始以某些特殊方式对邀请码进行加密,有点比武招亲的感觉。有的以特殊编码加密邀请码,有的是需要解题得出邀请码,有的以图文的方式加密,还有的直接将邀请码藏在一段故事中,这段时间每天我都会看里面出现的各种解密,慢慢的我也能解出其中一些谜题,但是由于总有人解的更快,我始终没能靠解密得到一个邀请码,最后凭借逆天运气蒙对了一个邀请码。我将一些有趣的解密记录下来作为对这段时光的留念。
这种加密方式第一眼看上去会感觉很抽象,同时需要你较了解图文加密常用的内容以及天马行空的思维。
From @cap_stu
提示 1:用 ps 有帮助
提示 2:SOS
提示 3:两种图片比例 1:800
提示 4:一张图片,上面写着 follow
:::div{style="margin: 0 20%;"}
:::
这个谜题发出来时只给了前三个提示,太过抽象一点头绪都没有。到了第二天都没有人解出来,于是作者给了提示四,至此我才发现了一些端倪。
VIGENERE
和 PIXEL
。代表还要用到另一个加密方法 vigenère,密钥自然就是 pixel 了。DRNAQXSDDQA
,这时候 Vigenere 就派上用场了,解密即可得到最终答案。盲文加密:替换即可解密 | vigenère 加密:用密钥 pixel 偏移解密 |
---|---|
附上作者制作的一图解
:::div{style="margin: 0 10%;"}
:::
From @Plana
题目:
37.06749647,44.28503693,-40.50114678
39.18881682,45.3456971,-38.66402947
42.72435072,47.11346406,-35.60216729
63.93755416,57.72006577,-17.23099422
81.61522369,66.55890054,-1.921683328
...
作者给了很多这样的数据,是一个 csv 文件。由于数据都是三个三个的,推测是 rgb,但是作者说不是。因此推测是 xyz 坐标。用 python 绘制出结果为
原神的提瓦特语言
:::div{style="margin: 0 10%;"}
:::
密码本如下,答案为 sf4lBGG_7E
:::div{style="margin: 0 10%;"}
:::
From @喵~
没啥难度,知道密码本就能解。问题是作者给错图了,没有分大小写,直接解出来是 EXSTCTTJKU。还好蒙对了是 eXsTCtTkKu,成功激活。
https://www.dcode.fr/ballet-alphabet
https://www.dcode.fr/hexahue-cipher
https://www.dcode.fr/tenctonese-alphabet
:::div{style="margin: 0 10%;"}
:::
From @Jacob
:::div{style="margin: 0 10%;"}
:::
解谜:
VD
5xGivZb
_
因此得到邀请码:VD5xGivZb_
From @Arona
AESDecrypt(data="vEIlU835MIeD08frTJmJpw==", "ECB", "PKCS7", "128bit", key=看图猜)
原题不带左边的数字和下面的字母,解出来答案是 EGG HEAD
,本来这个是 key,但是作者加密的时候复制错了,因此这个是解不出邀请码的。
:::div{style="margin: 0 10%;"}
:::
From @Jacob
:::div{style="margin: 0 10%;"}
:::
两重加密,第一重为电线上的鸟,密码本为下图(搜索 The bird on the telephone pole decrypt 等类似的内容即可找到 https://www.dcode.fr/birds-on-a-wire-cipher ),鸟的位置代表字母的大小写
:::div{style="margin: 0 10%;"}
:::
解密后得到 bHPwBTSiji,然后用 Vigenere 解密,密钥是图片代表的软件名 follow,解得答案 wTElNXNuyx
这种加密通常需要知道密文、密钥和加密方式即可解密。
From @Huajin,对就是我出的
密文:
M4 4.5h7m1 0h2m4 0h7M4 5.5h1m5 0h1m1 0h3m3 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m3 0h1m1 0h3m1 0h1M4 7.5h1m1 0h3m1 0h1m3 0h2m2 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m3 0h3m1 0h1m5 0h1M4 10.5h7m1 0h1m1 0h1m1 0h1m1 0h7M13 11.5h4M4 12.5h1m2 0h6m1
如果将密钥复制到微信或者是 vscode 等地方,会发现有一些无法显示的字符。这是因为这段密文隐写了零宽字符。使用提示 2 给出的工具即可完成第一重解密得到真正的密文。
M4 4.5h7m1 0h2m4 0h7M4 5.5h1m5 0h1m1 0h3m3 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m3 0h1m1 0h3m1 0h1M4 7.5h1m1 0h3m1 0h1m3 0h2m2 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m3 0h3m1 0h1m5 0h1M4 10.5h7m1 0h1m1 0h1m1 0h1m1 0h7M13 11.5h4M4 12.5h1m2 0h6m1
0h1m1 0h2m2 0h1m1 0h3M4 13.5h5m3 0h2m2 0h1m4 0h1M10 14.5h3m4 0h2m2 0h4M4 15.5h1m1 0h1m1 0h1m3 0h1m1 0h2m1 0h1m4 0h1m1 0h1M5 16.5h7m8 0h2m2 0h1M12 17.5h6m2 0h1m1 0h1m1 0h1M4 18.5h7m1 0h3m1 0h2m2 0h1M4 19.5h1m5 0h1m1 0h1m2 0h4m2 0h2M4 20.5h1m1 0h3m1 0h1m1 0h2m1 0h2m1 0h1M4 21.5h1m1 0h3m1 0h1m1 0h2m1 0h5m2 0h1M4 22.5h1m1 0h3m1 0h1m6 0h1m1 0h2m2 0h2M4 23.5h1m5 0h1m3 0h1m2 0h3m1 0h4M4 24.5h7m1 0h1m1 0h2m1 0h1m1 0h1m1 0h2
将这两段密文凭借在一起,可以发现里面有大量的 h 和 m,如果你熟悉 svg,你就能一眼看出这是一个 svg 的 path 标签。随意搜一个 <svg>
,配上解密后的结果 <path d="..."/>
我们就得到了一个 svg,打开可以看到一个二维码。
<svg viewBox="0 0 33 33" shape-rendering="crispEdges">
<path stroke="#fff"
d="M4 4.5h7m1 0h2m4 0h7M4 5.5h1m5 0h1m1 0h3m3 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m3 0h1m1 0h3m1 0h1M4 7.5h1m1 0h3m1 0h1m3 0h2m2 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m3 0h3m1 0h1m5 0h1M4 10.5h7m1 0h1m1 0h1m1 0h1m1 0h7M13 11.5h4M4 12.5h1m2 0h6m1 0h1m1 0h2m2 0h1m1 0h3M4 13.5h5m3 0h2m2 0h1m4 0h1M10 14.5h3m4 0h2m2 0h4M4 15.5h1m1 0h1m1 0h1m3 0h1m1 0h2m1 0h1m4 0h1m1 0h1M5 16.5h7m8 0h2m2 0h1M12 17.5h6m2 0h1m1 0h1m1 0h1M4 18.5h7m1 0h3m1 0h2m2 0h1M4 19.5h1m5 0h1m1 0h1m2 0h4m2 0h2M4 20.5h1m1 0h3m1 0h1m1 0h2m1 0h2m1 0h1M4 21.5h1m1 0h3m1 0h1m1 0h2m1 0h5m2 0h1M4 22.5h1m1 0h3m1 0h1m6 0h1m1 0h2m2 0h2M4 23.5h1m5 0h1m3 0h1m2 0h3m1 0h4M4 24.5h7m1 0h1m1 0h2m1 0h1m1 0h1m1 0h2" />
</svg>
:::div{style="margin: 0 10%;"}
:::
你也可以将其稍微美化一下,将底色改为白色,色块改为黑色,
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 29 29" shape-rendering="crispEdges">
<path fill="#ffffff" d="M0 0h29v29H0z" />
<path stroke="#000000"
d="M4 4.5h7m1 0h2m4 0h7M4 5.5h1m5 0h1m1 0h3m3 0h1m5 0h1M4 6.5h1m1 0h3m1 0h1m1 0h3m3 0h1m1 0h3m1 0h1M4 7.5h1m1 0h3m1 0h1m3 0h2m2 0h1m1 0h3m1 0h1M4 8.5h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h1M4 9.5h1m5 0h1m3 0h3m1 0h1m5 0h1M4 10.5h7m1 0h1m1 0h1m1 0h1m1 0h7M13 11.5h4M4 12.5h1m2 0h6m1 0h1m1 0h2m2 0h1m1 0h3M4 13.5h5m3 0h2m2 0h1m4 0h1M10 14.5h3m4 0h2m2 0h4M4 15.5h1m1 0h1m1 0h1m3 0h1m1 0h2m1 0h1m4 0h1m1 0h1M5 16.5h7m8 0h2m2 0h1M12 17.5h6m2 0h1m1 0h1m1 0h1M4 18.5h7m1 0h3m1 0h2m2 0h1M4 19.5h1m5 0h1m1 0h1m2 0h4m2 0h2M4 20.5h1m1 0h3m1 0h1m1 0h2m1 0h2m1 0h1M4 21.5h1m1 0h3m1 0h1m1 0h2m1 0h5m2 0h1M4 22.5h1m1 0h3m1 0h1m6 0h1m1 0h2m2 0h2M4 23.5h1m5 0h1m3 0h1m2 0h3m1 0h4M4 24.5h7m1 0h1m1 0h2m1 0h1m1 0h1m1 0h2" />
</svg>
:::div{style="margin: 0 10%;"}
:::
扫描二维码,你就得到了邀请码:VlbwY6fixN
From @Oganneson
密文: YDY/4rmwped3BwBS8PYZjg==
,AES128位加密,CBC模式,填充模式PKCS7,密钥和初始化向量相同。
这不是简单的密文,用控制台可以看到里面有很多零宽度字符。
用 https://yuanfux.github.io/zero-width-web 解密去除零宽度字符的同时得到真正的密文 YDY/4rmwped3BwBS8PYZjg==
和密钥 bMfNvN74N8Kkd83p
,然后随便找个 AES 解密即可解得邀请码。
From @Charles Ye
题目:佛曰:勝侄槃罰倒皤彌怖缽遠得藐穆吉佛僧爍竟侄藐跋罰羅冥恐姪奢一涅梵夢哆恐皤迦醯俱姪亦梵陀參呐槃無多
解:很明显这个是与佛论禅加密,随便搜个与佛论禅的解谜网站解谜就行。
From @dirt
新佛曰:諸隸僧怖降怖吽諸怖陀摩怖隸僧缽薩怖願怖降嚩咒愍怖諦隸怖慧嚩怖嘚劫怖喼怖阿是蜜如
解:与佛论禅的变种,用这个网站可以解密 http://hi.pcmoe.net/Buddha.html
From @neoedon
题目:cRIrROPj5I 已凯撒加密,偏移量为 3,5,7,9,11,13 其中一个;解密为邀请码。
解:加密方式已知,直接搜个能解凯撒加密的解谜网站解就行了,主要是看运气。
From @cliouo
在一个古老的城堡中,隐藏着一封神秘的信件。信件的开头写着一串加密的字符
65,171,142,147,161,40,153,164,161,161,164,142,152,151,40,147,144,40,154,70,162,161,124
城堡的守护者告诉你,这段文字使用了一种古老的加密方法,你需要解密这段文字来找到通往宝藏的钥匙。
提示:
邀请码的第一位为数字 N 这段文字使用了一种简单的替换加密方法。
每个字母都被替换成了它在字母表中位置向后移动 N 个位置的字母。
请解密这段文字,并找出通往宝藏的钥匙。
解:数字是八进制的 ASCII 码,将每个值从 8 进制转换到 10 进制,然后查找其对应的 ASCII 字符如果是字母,则偏移 5(第一个字符解出来是 5)
From @Deco
密文一:Zv2DGQAG2q+57dtXshJlzk7msqCY3M1LOU453/fLLboPUWiTUqmAs1iLbIvDkh7TvF1s
mYrpvZ4=
密文二(部分):Zv2DNQAJMOMfrw6ycIdOxF/meq9M5vf5
解:加密方式已知,只需要猜密钥即可。第一个密钥提示的内容是 youtube,提示的内容是 app 的更新公告内容。解除的结果为:“修复了一些 bug,并吃了一桶冰淇淋”,这是 bilibili 更新时的更新公告内容,作为第二次解谜的密文的后半部分,密钥是 bilibili。这样就能得到结果。
密文很抽象,但是这个没啥难度,随便搜一个就能解密。
゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ ['']; o=(゚ー゚) ==3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^^o)/ (o^^o);(゚Д゚)={゚Θ゚: '' ,゚ω゚ノ : ((゚ω゚ノ==3) +'') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '')[o^^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'') [c^^o];(゚Д゚) ['c'] = ((゚Д゚)+'') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'')[゚Θ゚]+ ((゚ω゚ノ==3) +'') [゚ー゚] + ((゚Д゚) +'') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'') [゚Θ゚]+((゚ー゚==3) +'') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'') [゚Θ゚];(゚Д゚) [''] =(o^^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'') [o^^o -゚Θ゚]+((゚ー゚==3) +'') [゚Θ゚]+ (゚ω゚ノ +'') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'')[c^^o];(゚Д゚) [゚o゚]='"';(゚Д゚) [''] ( (゚Д゚) [''] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^^o) +(o^^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^^o)+ ((o^^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((o^^o) +(o^^o))+ ((゚ー゚) + (o^^o))+ (゚Д゚)[゚ε゚]+((o^^o) +(o^^o))+ ((゚ー゚) + (o^^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((゚ー゚) + (o^^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^^o)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('');
From @QistChan
~呜嗷嗷嗷嗷呜呜呜啊嗷呜嗷呜呜啊呜啊嗷啊呜~呜嗷呜~嗷~呜呜嗷嗷~嗷嗷嗷呜呜呜啊嗷呜嗷呜呜啊呜嗷嗷啊嗷啊呜~呜嗷嗷~嗷~呜嗷呜嗷啊嗷嗷嗷呜呜呜呜~呜嗷呜呜啊呜嗷嗷啊嗷啊呜~呜嗷啊~嗷~呜嗷呜嗷~嗷嗷嗷呜呜呜呜啊呜嗷呜呜啊呜嗷嗷啊嗷啊呜~呜~嗷~呜呜嗷嗷~嗷嗷嗷呜呜呜啊啊呜嗷呜呜啊呜~啊啊嗷啊呜~呜~啊~嗷~呜嗷呜呜嗷啊
ps. 由于密文存在符号 ~
,发在 disord 上时有很多删除线。
就是先把删除线变成~,也就是用markdown的语法转换一下,然后用 https://roar.iiilab.com/ 这个网站解密,解密之后的东西按十六进制转换成ASCII字符就好了
From @LOOL
6个大写,1 2 7 9 小写
:::div{style="margin: 0 10%;"}
:::
解得:cuKNXEwSvW
From @Jacob
这是一个基础解密,成功解密需要将答案发在dc聊天中,首位答对者将会私聊获得邀请码一枚
19 71 71 53 67 71 11 43 47 61 5 47 41 79 23 11 83 3 2 23 37 2 61 7 2 43 5 11 19 2 53 53 97 71 47 41 2 43 7 29 11 61 61 97 17 23 13
提示:只有一层加密
观察数字容易发现全是质数,按照质数的排列顺序将密文转化为字母,得到
字母 | 质数 |
---|---|
a | 2 |
b | 3 |
c | 5 |
... | ... |
z | 101 |
httpstenorcomviewbailardancehappytomandjerrygif
对应的网站似乎是 https://tenor.com/view/bailar-dance-happy-tom-and-jerry-gif
。但是打开会发现是 tenor 网站的一个空白页,真正的答案还需要拼上作者个人简介中的一串数字 14081211
。因此真正的答案是
https://tenor.com/view/bailar-dance-happy-tom-and-jerry-gif-14081211
对应的 gif 图为 tom and jerry
:::div{style="margin: 0 20%;"}
:::
From @Jonty Li,①和②对应相应序号的英语字母
解出来是 6 和 3,对应 j 和 c,答案为 ymyjfSgmMc
From @toxomo
万U 家K 明M 天k 同K 庆W 普d 火O 一N 灯P
两句诗,压韵的,每个字只用一次
解:万家灯火明,普天一同庆。UKPOMdkNKW
From @qvKEAyHnx6
很有创意的加密,把码作为名字,既不会让脚本秒了,解密难度也不大。
From @alphardex
这个更是重量级,直接做了个游戏出来 https://mygo-find-app-code-2.netlify.app/
“其实我的流程总体是这样的:玩游戏——用SL大法过关(或者运气好直接通)——得到提示——去鉴赏CG得另一提示——OCR(自己查也行)——谷歌翻译(或者直接搜)——解密”
很多大佬会将邀请码藏在自己博客的文章中,然后在文末留一句“文中有..个邀请码,你能发现吗?”。
ps. follow 即将公测,不要在博客底下留言要邀请码,这可能会让博主很困扰。
我用 Follow 订阅了 innei 大佬的个人网站,拜读文章的时候看到作者在评论区里说“文中藏有三个 Follow 邀请码”,遂打开控制台开始解密。
搜索 follow 后找到这样一段密文
\u003c!-- eYb5bKTV3K, ZmSPCbUcTo --\u003e\u003cdiv hidden\u003e-.-- ..--- -... .. --- --- .---- -..- -.. -..- --..-- .---- ....- ..... --..-- -....- ...--\u003c/div\u003e
其中 \u003c
代表 <
,\u003e
代表 >
(unicode 编码),用 <>
替换密文中的编码后得到
<!-- eYb5bKTV3K, ZmSPCbUcTo --><div hidden>-.-- ..--- -... .. --- --- .---- -..- -.. -..- --..-- .---- ....- ..... --..-- -....- ...--</div>
<!-- eYb5bKTV3K, ZmSPCbUcTo -->
是 html 的注释,中间放了两个邀请码。<div hidden>
是带有 hidden 属性的 div,它会在页面中被隐藏。解码后得到 Y2BIOO1XDX,145,-3
,邀请码全是大写的概率不大,因此后面的数字应该代表小写字母的位置,即 y2BioO1XDX
。-3
应该代表偏移(凯撒加密),因此解得邀请码 b2ElrR1AGA
翻了翻以前的文章,会发现还藏有其他的 Follow 邀请码
React i18n CSR 最佳实践 - 静かな森 (innei.in)
(对了,此文章中隐藏了一枚 Follow 邀请码,你能找到吗?)
由于 innei 大佬似乎喜欢将邀请码密文存储于页面然后隐藏,这次我们直接复制整个页面的 html 然后正则匹配即可
(?<=\s)[A-Za-z0-9]{10}(?=\s)
:::div{style="margin: 0 20%;"}
:::
可以看到隐藏方式也是用 html 注释 <!-- 1rsMVNWDIt -->
浅谈 Follow 中的设计理念 - 静かな森 (innei.in)
(这篇文章中隐藏了两个 Follow 的邀请码,你能找到它吗)
题目已更新,增加了 4 个隐藏的邀请码,快来找我吧~
知道规律后,这次直接匹配 -->
:::div{style="margin: 0 20%;"}
:::
不一样的是,这种方式居然只找到了一个,剩下的几个邀请码一直找不到。后来发现评论区有人说了每种邀请码的解密,根据他们的提示进行搜索,依旧无果,看来我这次来晚了,邀请码相关的内容已经被作者删除
能看到这个,你离成功就不远了呢。Follow
这句话没有匹配的内容Caesar=3: trfdNUvNTu
没有匹配内容alert()
的弹窗https://www.timochan.cn/notes/44#总结
文章发布的时候我恰好在看 follow 中的文章,注意到文末写着文中藏有邀请码:
文中有一个 Follow 邀请码?你知道它在哪里么?
https://www.timochan.cn/api/objects/file/8r806hgw1r2acpofp7.png
文末用删除线和 filter: blur(8px)
框住了一个图片的 url,刚看到时打开过是个二维码,扫描后又跳转回了博客因此将它理解成了一种自动生成的提醒转载请附上原文链接的内容,这导致这么明显的隐藏却让我一开始没有想到这就是密文,灯下黑了属于是。最后翻遍全文,在控制台中检查整个网页是否有隐藏内容,无功而返,最终才锁定回这个二维码。微信扫码没看到目的地址,遂搜了一个二维码解码工具,结果还真的解出来了一串密文:
https://www.timochan.cn?follow_key=VTJGc2RHVmtYMThvQkpBYmVJaEFxakptUWNBRmxHa0Jta0Jad0QvUHMrND0=
既然现在密文已知,直接丢给 gpt 问问看它是否能看出来用的哪种加密方式。
:::div{style="margin: 0 20%;"}
:::
gpt 告诉我们是经过了 Base64 编码的数据,并且解码成功,搜了个 Base64 解码工具检验得知 gpt 给出的解码结果正确。gpt 说新的密文的前缀表示这是使用了 OpenSSL 加密标准(如 AES)生成的密文,因此让它继续以 AES 进行解码,密钥为 8 位,猜测是作者的名称 timochan,结果解码失败。后来作者又提示密钥就在正文中,是 8 位数字。可以看到文章顶部的日期 20241006 恰好就是八位数字,丢给 gpt 让他尝试解码
:::div{style="margin: 0 20%;"}
:::
得到结果 M8g1GosNyw
,由于我已经激活了,不确定这个是否是正确答案。
随机刊物 R#018 在江之岛海边写周刊 (sakanano.moe)
密文放在正文中
本周 follow 还是没有公测,有一个邀请码藏在这里
yxux oa dz ozrojdjosz ksfx isu jyx isnnsp dtt: cdzsp1ndx9.
pyxz csl axx jyoa gxaadvx, oj yda zsj bxxz xzksfxf oz dzc atxkoiok pdc; oj yda aogtnc lzfxuvszx udzfsg kdax apdttozv dgszv jyx nspxukdax nxjjxua.
csl gdc lax d iuxelxzkc dzdncaoa jssn nowx elotelot js kudkw oj(dnjyslvy alky jssna jctokdnnc fsz'j kszaofxu kdax axzaojorojc, as o ponn fouxkjnc jxnn csl jydj jyx 2zf, 3uf, 5jy, dzf 7jy kydudkjxua si jyx ksfx dux lttxukdax).
dijxu fxkotyxuozv dzf laozv jyx ozrojdjosz ksfx, tnxdax dzzslzkx oj oz jyx foaksuf vuslt.
分析密文
:
,看来这就是加密后的邀请码.
,说明这是一段加密的文本,由于字母个数不变,因此只能是替换加密或者凯撒加密之类的。我的思路很简单,直接去文本中找格式与 follow
一致的内容,即长度为 6 且 2/5 3/4 位一致的字符串,你会发现全文只有第一行的 isnnsp
是符合的,说明它很可能就是加密后的 follow
。现在需要判断它是凯撒加密(字母偏移)还是随机替换加密。
有的偏移了 3 位,有的偏移了 2 位有的偏移了 7 位,因此排除凯撒加密,视作随机替换加密,开始编写密码本,此时已知的替换只有四位,还是太少了,需要一点运气猜测一下第一行的句子原文是什么。
注意到密文上面的那句“本周 follow 还是没有公测,有一个邀请码藏在这里”,大胆猜测密文前几个单词代表 here is an invitation code for ??? follow a??: ...
,看起来很合理,位数也对的上,相同字母之间也没有违法替换规则,至此可以确定就是这种加密方式,于是继续猜测第一行少的两个单词为 the
和 app
,第一行解完 here is an invitation code for the follow app: ...
此时我们的解密密码本长这样,From 为加密后的内容,To 为原字母,例如将 a 还原成 s,将 i 还原成 f。
From | To | From | To | From | To | From | To |
---|---|---|---|---|---|---|---|
a | s | b | c | d | a | ||
e | f | d | g | h | |||
i | f | j | t | k | c | l | |
m | n | l | o | i | p | w | |
q | r | v | s | o | t | p | |
u | r | v | w | x | e | ||
y | h | z | n |
一个个手动转换太慢了,写个 python 使用已有的密码本依次转换剩下四句
dict = {"a": "s","b": "_","c": "_","d": "a","e": "_","f": "d","g": "_","h": "_","i": "f","j": "t","k": "c","l": "_","m": "_","n": "l","o": "i","p": "w","q": "_","r": "v","s": "o","t": "p","u": "r","v": "_","w": "_","x": "e","y": "h","z": "n","1": "1","2": "2","3": "3","4": "4","5": "5","6": "6","7": "7","8": "8","9": "9","0": "0",":": ":",".": ".",",": ",","'": "'",";": ";","(": "(",")": ")"," ": " ",}
secret_text = [
"yxux oa dz ozrojdjosz ksfx isu jyx isnnsp dtt: cdzsp1ndx9.",
"pyxz csl axx jyoa gxaadvx, oj yda zsj bxxz xzksfxf oz dzc atxkoiok pdc; oj yda aogtnc lzfxuvszx udzfsg kdax apdttozv dgszv jyx nspxukdax nxjjxua.",
"csl gdc lax d iuxelxzkc dzdncaoa jssn nowx elotelot js kudkw oj(dnjyslvy alky jssna jctokdnnc fsz'j kszaofxu kdax axzaojorojc, as o ponn fouxkjnc jxnn csl jydj jyx 2zf, 3uf, 5jy, dzf 7jy kydudkjxua si jyx ksfx dux lttxukdax).",
"dijxu fxkotyxuozv dzf laozv jyx ozrojdjosz ksfx, tnxdax dzzslzkx oj oz jyx foaksuf vuslt."]
for txt in secret_text:
print(*[dict.get(i, "?") for i in txt], sep="")
# here is an invitation code for the follow app: ?anow1lae9.
# when _o_ see this _essa_e, it has not _een encoded in an_ specific wa_; it has si_pl_ _nder_one rando_ case swappin_ a_on_ the lowercase letters.
# _o_ _a_ _se a fre__enc_ anal_sis tool li_e __ip__ip to crac_ it(altho__h s_ch tools t_picall_ don't consider case sensitivit_, so i will directl_ tell _o_ that the 2nd, 3rd, 5th, and 7th characters of the code are _ppercase).
# after decipherin_ and _sin_ the invitation code_ please anno_nce it in the discord _ro_p.
这时候第二句就很好猜了 when you see this message, it has not been encoded in any specific way; it has simply undergone random case swapping among the lowercase letters.
,同样的方式解密剩下的密码本
From | To | From | To | From | To | From | To |
---|---|---|---|---|---|---|---|
a | s | b | b | c | y | d | a |
e | q | f | d | g | m | h | 未出现 |
i | f | j | t | k | c | l | u |
m | 未出现 | n | l | o | i | p | w |
q | 未出现 | r | v | s | o | t | p |
u | r | v | g | w | k | x | e |
y | h | z | n |
最后将密文转换为了明文
Here is an invitation code for the follow app: yanow1lae9.
When you see this message, it has not been encoded in any specific way; It has simply undergone random case swapping among the lowercase letters.
You may use a frequency analysis tool like quipquip to crack it (although such tools typically don't consider case sensitivity, so i will directly tell you that the 2nd, 3rd, 5th, and 7th characters of the code are uppercase).
After deciphering and using the invitation code, please announce it in the discord group.
从第三行可以知道,2 3 5 7 字母是大写的,因此邀请码为 yANoW1Lae9
.