如何将字符串识别为 Malbolge 源代码?
How do I recognise a string as Malbolge source code?
假设我得到了一个看起来完全是垃圾的字符串,并且要求我确定它可能是什么,密码分析师使用这些迹象来形成一组要测试的假设。 Malbolge有这样的迹象吗?以下面的字符串为例。
D'`%$p"[m}YziUxBe-2>0/pL,%7#FE~ffezcaw<^)Lxwvun4lTj0nmlejc)J`&dFE[!BXWV[ZSwQuUTMLpP2NGFEiC+G@EDCB;_?!=<;:3W765.-Q1*).-,+$#G'&feB"!a}v<]\xqpo5srqpohg-eMibg`_%cE[`Y}]?UTYRvV87MqQPONMFKJCgA)?cCB;@?87[5{38765.-Q10pM:
运行 它通过了 malborge 解释器,如果你没有得到语法错误,它就是有效代码。
确定代码是否有用完全是另一回事
Malbolge 命令的初始含义基于它的 ASCII 码,加上它在程序中的位置。这导致在大多数程序中可以相当容易地识别出一系列倒退的 ASCII 代码。
我们以下面的cat
程序为例(source):
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.
~P<
<:(8&
66#"!~}|{zyxwvu
gJ%
程序中最明显的部分是 zyxwvu
,这有助于明显地将其与键盘混搭区分开来,它可以被识别为倒写的小写英文字母表的一部分。 (其实它前面的"!~}|{
也是由连续的ASCII码组成,从~
绕到!
。)还有其他不太明显的反向连续ASCII码的例子在程序中,比如第一行的-,+*)"!
.
这些反转的ASCII码序列对应于一系列重复的相同命令。也有可能发现 "broken sequences" 这是一个更大的线索。查看第一行,并将其与反向 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 specific 序列,这就是interpreter 会。但是,如果您只是想确定编写的代码是否经常是 Malbolge,那就太复杂了;只需查找 zyxwv
或 EDCBA
或 87654
等通常就足够了一个赠品本身让我怀疑未知的源代码是 Malbolge。)
对于问题中的示例字符串,由于像 xwvu
、 这样的子字符串,它看起来更像 Malbolge 而不是随机键盘混搭<b>nml</b>e<b>j</b>
,以及非常可疑的<b>QPONM</b>F <b>KJ</b>
;这些子字符串很少在随机数据中偶然出现,但在 Malbolge 代码中却很常见。因此我怀疑它是真正的 Malbolge 代码,或者是经过轻微改动的代码。
假设我得到了一个看起来完全是垃圾的字符串,并且要求我确定它可能是什么,密码分析师使用这些迹象来形成一组要测试的假设。 Malbolge有这样的迹象吗?以下面的字符串为例。
D'`%$p"[m}YziUxBe-2>0/pL,%7#FE~ffezcaw<^)Lxwvun4lTj0nmlejc)J`&dFE[!BXWV[ZSwQuUTMLpP2NGFEiC+G@EDCB;_?!=<;:3W765.-Q1*).-,+$#G'&feB"!a}v<]\xqpo5srqpohg-eMibg`_%cE[`Y}]?UTYRvV87MqQPONMFKJCgA)?cCB;@?87[5{38765.-Q10pM:
运行 它通过了 malborge 解释器,如果你没有得到语法错误,它就是有效代码。
确定代码是否有用完全是另一回事
Malbolge 命令的初始含义基于它的 ASCII 码,加上它在程序中的位置。这导致在大多数程序中可以相当容易地识别出一系列倒退的 ASCII 代码。
我们以下面的cat
程序为例(source):
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.
~P<
<:(8&
66#"!~}|{zyxwvu
gJ%
程序中最明显的部分是 zyxwvu
,这有助于明显地将其与键盘混搭区分开来,它可以被识别为倒写的小写英文字母表的一部分。 (其实它前面的"!~}|{
也是由连续的ASCII码组成,从~
绕到!
。)还有其他不太明显的反向连续ASCII码的例子在程序中,比如第一行的-,+*)"!
.
这些反转的ASCII码序列对应于一系列重复的相同命令。也有可能发现 "broken sequences" 这是一个更大的线索。查看第一行,并将其与反向 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 specific 序列,这就是interpreter 会。但是,如果您只是想确定编写的代码是否经常是 Malbolge,那就太复杂了;只需查找 zyxwv
或 EDCBA
或 87654
等通常就足够了一个赠品本身让我怀疑未知的源代码是 Malbolge。)
对于问题中的示例字符串,由于像 xwvu
、 这样的子字符串,它看起来更像 Malbolge 而不是随机键盘混搭<b>nml</b>e<b>j</b>
,以及非常可疑的<b>QPONM</b>F <b>KJ</b>
;这些子字符串很少在随机数据中偶然出现,但在 Malbolge 代码中却很常见。因此我怀疑它是真正的 Malbolge 代码,或者是经过轻微改动的代码。