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