Malbolge 命令的初始含义是基于它的 ASCII 码,加上它在程序中的位置。这导致在大多数程序中,ASCII 码的序列倒退是相当可识别的。
我们以下面的cat
程序为例(source):
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.
~P<
<:(8&
66#"!~}|{zyxwvu
gJ%
该程序最明显的部分,有助于明显地将其与键盘混搭区分开来,是zyxwvu
,它可以识别为倒写的小写英文字母的一部分。(其实"!~}|{
前面也是由连续的 ASCII 码组成,环绕 from ~
to !
。)程序中还有其他不太明显的反连续 ASCII 码的例子,比如-,+*)"!
第一行。
这些颠倒的 ASCII 码序列对应于一系列重复的相同命令。也有可能发现“破碎的序列”,这是一个更大的线索。查看第一行,并将其与反向 ASCII 序列进行比较(用!
符号显示它们匹配的位置):
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.
DCBA@?>=<;:9876543210/.-,+*)('&%$#"!
!! !!!! ! !! !! ! !!!!! !
首先引起我注意的事情是;它是倒写的 ASCII 数字,但略有损坏。那是因为该部分中有多个命令,但同一命令的重复次数足以产生明显的模式。扩展模式表明它也匹配在线中的许多其他点;那是因为在程序中的所有这些点都在运行相同的命令。因为 Malbolge 只有 8 个命令,所以您会发现程序中的每个命令都属于 8 个反向 ASCII 序列之一。7x54-21
(为了验证代码是否正确 Malbolge,您需要确保它们是对应于命令的 8 个特定序列,这是解释器所做的。但如果您只是试图确定,那就太复杂了书面代码是否是 Malbolge 很多;仅仅寻找zyxwv
orEDCBA
或87654
之类的东西通常就足以让我怀疑未知的源代码是 Malbolge。)
对于问题中的示例字符串,它看起来更像 Malbolge 而不是随机键盘混搭,因为子字符串xwvu
,和非常可疑的; 这些子串在随机数据中很少偶然发生,但在 Malbolge 代码中却很常见。因此,我怀疑它要么是真正的 Malbolge 代码,要么是经过轻微改动的代码。nmlej
QPONMFKJ