墨月枫的解码马拉松笔记前半程(一)

moyuefeng 菜格瑞斯

写在前面

本文主要记录我在参与 13 Archetypes 解码活动时的一些体会与感想,解码思路等。完整的答案不会在本文出现,但是跟着这些思路基本上可以成功地解出来。目前出现的所有码我都解出来了,不过在解码的过程中得到了很多人的帮助。在这里要先感谢他们。


因为题目形式各异,个别题目不方便在此展示,请移步网站查看:

https://ingress.com/decoding/13archetypes


友情提示:看解码步骤的时候要注意,不要一不小心看到了最后一步,这样会降低解码体验。


友情提示 2:解码过程是本人翻车的过程,所以直接照着本文的步骤进行解码的话发现自己翻车了属于正常情况。如遇翻车,请及时报警。(为什么开车自己心里清楚啊)网络不是法外之地!!!


友情提示 3:文章的发布顺序与实际解码的顺序不同,主要是一些部分还没有写完。然后我还打算蹭个新码的热度。但各个题目相互独立,所以此举并不影响观看体验。


下面,就是这愉(shou)悦(ku)的前半程了。(嘿嘿~~)






题目一:Dreamer





本着重在参与、不求名次的精神,我在 2019 年 12 月的某天被数佬 @IloveMATH 拉来参与解第一个码,从此就走上了不归路。


当时第一个码已经放出来一个多小时了,我看着这张图片,毫无思路。又看了看图片的名字。emmmm 有点像码,随便转一转?随便试了几下以后发现没有什么头绪。那个时钟上的数字,太像码。太短了。这两只羊吧,也不像码。很迷惑。

所以为什么数羊可以帮助睡眠呢?

这里讲解一下解码最简单的一个套路:进制转换进制转换就是将数字在不同进制之间互相转换。一般是别的进制转换为十进制。(这里的图片名称看起来像十六进制。) 转化到十进制以后一般还会有其它的加密方法,这个留在后面介绍。

令人浮想联翩的文件名是这样的:
RECURSEDSHEEP_9b290bff-96d6-504f-becb-e9824ee71f0d.png

这时,突然有人在群里问,第一个码有人解了吗?我就说:我甚至还没有找到题目是什么。这时数一大佬看到我这么说,过来告诉我:密码是条形码。

我:???看着那个被子上的花纹有点奇怪,但是我也有类似的被子啊。怎么就条形码了嘛?

然后数一又补充说,这里用到的标准比较罕见。他也是找了很久才找到的。

我心说,行吧。我去查一查。于是打开维基百科,开始查看条形码相关的条目。emmmm,维基百科收录了几十种条形码的解码规范。

维基百科上的若干种条形码规范


恁娘类。

这个角度有点无从下手,我尝试用一种简便的方法,直接用手机上的软件扫,看有没有什么结果。但是每次扫描的结果都略有不同。看来因为分辨率等原因,手机无法精确地扫码,可能也无法用正常的解码规范解码。

没办法,我只好重新学习条形码相关的知识。在翻看那张条形码分类表的时候我注意到,有一栏写着条码宽度(Bar width)。这里有两种情况:两种宽度(two)多种宽度(many)。意思就是条码的黑条与白条宽度的范围,「两种宽度」的条码只有两种宽度,「多种宽度」的会有很多不同的宽度。(这里差不多是废话)

根据这个信息可以缩小不少搜索范围。于是我打开了 PS,开始量条码的宽度。最开始发现有三种,可以归类为多种。但后面发现其实是四种,但是宽度为 3 的条出现频率很低。而且光靠眼睛看可能无法正确区分宽度为 3 和宽度为 4 的条。

愚蠢的人类如何使用 PS 测量条码的宽度

这里知道了宽度,就可以来合(xia)理(jb)推(luan)测(cai)加密的方法了。一个一个方法看过去,直到我看到了一个表格。emmm,6 个宽度可以对应一个符号或英文字母。有点意思啊。那我先随便输两个进去吧。诶,居然可以找到对应的英文字母。但是第三个就没有对应的字符了。emmmm 搞我。试了后面几个貌似也没有对应的东西。经过一番宕机与重启,我决定把顺序倒过来试试。第一个,有,第二个,有……

直到我输入了 211232。然后出现了一个东西 Start Code C(起始码C)。emmmmmm

愚蠢的人类如何检索条码

原来我一直都是倒着看的!!!

这样第一部分就解完了,开始解第二部分。(从图上可以看出相互垂直的条纹都是条形码)解到最后一个 233111,是结束码,从上图也可以看到。

看起来万事大吉了。

Hint:这里用到的解码规范是 Code 128,详情可以参见维基百科相关词条。维基百科上有 Code 128 数字码与字符的匹配表。读出条码的数字之后差表可以得到对应的字符。

这里再介绍第二种加密方法,确切地说半种,就是英文字母转数字。通常在使用了某一种或连续几种解码方法后会得到一串字母。但 Ingress 兑换码(这里特指通过解码得到的兑换码)是会有数字的。关于码的正确结构会在后边说明。

这时,一串码的某几个字母可以看作数字。一般会取 0~9 这十个数英语单词的头两个(有时候是三个)字母来表示数字。比如 on 对应 1,tw 对应 2 这样。如果是三个字母就是 thr 对应 3,fou 对应 4。

回到第一个码,刚才通过解码我们得到了一串英文字母。在里面明显可以看到 one,thr。经过转化可以得到 1 3 1 3 这四个数字。但是不是连在一起的。这时候就要介绍一下兑换码的结构了。

Ingress 的兑换码大体上可以拆分为三个部分:开头 + 关键词 + 结尾。开头一般是字母和数字的混合,长度不固定。以前有些码的开头长度固定是 5(数字和字母加起来共有 5 个),这次活动貌似不是固定的。然后是关键词,关键词可以从以下网站查询到:

https://regex.ingress.codes/

通常关键词是否正确可以作为是否正确解码的判断标准。

最后是结尾,结尾的长度和数字一般也不固定。但是这次活动却是固定的。结尾一定是 13AR。这是重点!考试要考的!

看到 1 3 3 1 这个数字你是不是有一点眼熟?然后去关键词列表检索一下,发现 1331 还是关键词。但是 1331 不在一起,很恼火啊。怎么办呢?

这里介绍一种加密方法,栅栏加密。这种方法适用于长度可以被整除的若干字符的解密。解密方法就是按照能够整除的字符数,把字符写成一个矩阵。比如一个长度为 12 的字符串可以写成一个 3*4 或者 4*3 的矩阵形式。然后再按照一定的顺序读取,就可以得到正确的顺序。

这个解码方法听起来很简单,但是应用起来却很麻烦。作者是最不愿意用这种方法解密的。首先,如果字符串的长度是 12 或 15 这种长度,会有两种写法。而且横着排、竖着排都是可能的。其次,读取的方法也是多种多样,可以竖着读、横着读、甚至转着圈从外向里或者从里向外读。最骚的是,矩阵的行或者列是可以互相调换位置的。在你不知道正确方法的情况下,简直是有一万种可能。

但是既然解到这里了, 看到了关键词 1331。字符串的长度也很合适:18 个字符。那就只能硬着头皮上咯。经过一番折腾,我终于发现:好像有什么不对。

试过若干次以后发现根本没法把 1331 凑到中间!!!

心想,可能是自己技不如人吧。只好去问问数佬。数佬也是精神,为了解第一个码基本一宿没睡。不过我问他的时候已经是国内的早晨了。当我问他这个栅栏怎么解的时候,他告诉我:你查查 oneiric 这个词。

那么这个伟大的 oneiric 是什么意思呢?大家可以自行查阅词典,反正关键词列表里是有这个词的。那么这个单词里为什么会有一个「one」就是「one」呢?我怎么知道啊!!!!

原来关键词的一部分被我当成数字了。。。

好,保留关键词。替换其他字母为数字。得到了一串码。

兑换,得到一个 Media。


搞到 2 点钟我终于可以睡觉了。

数佬 NB!!!!

接下来是跟数佬约好的吹数一时间。


作为绿军大佬,爱数学君 @IloveMATH(又称数一,数佬,爱数)在此次活动中给了我很大的帮助。由于猩猩的问题,他解出了第一个码但是没有上榜。但在不计算第一个码的榜单上,数佬的排名目前是第 10(Spiritualist 放出之前)。我觉得他可以去给我们出题了。

出于对解码的兴趣,数佬在几年前组建了绿军解码组,并集结了一群同好一起学习解码方法。目前有数位成员位于排行榜的前排。


(待续)


往期回顾:

墨月枫的解码马拉松笔记前半程(二、三、六)

    菜格瑞斯,由旅居欧洲的中文 Ingress 玩家组建,是一个跨阵营的交友社群。
    本站由玩家自行建设,与 Niantic 和 Google 没有关联。

    Chinese Speaking Agents in Europe (CSAE) formed this friendly and cross-faction Ingress community.
    This site is maintained by players and does not affiliate with Niantic or Google.
    Visitor count: