如何将字符串识别为Malbolge源代码?

时间:2016-05-07 08:55:44

标签: cryptanalysis 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:

2 个答案:

答案 0 :(得分:3)

如果您没有收到语法错误,那么请将其运行到malborge口译员处,这是有效的代码。

确定它是否是有用的代码完全是另一回事

答案 1 :(得分:2)

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/.-,+*)('&%$#"!
  !!   !!!!  ! !! !! ! !!!!!   !

首先引起我注意的是7x54-21;它是向后写的ASCII数字,但略有损坏。那是因为该部分中有多个命令,但是同一命令的重复次数足以产生明显的模式。扩展模式显示它也在行中的许多其他点匹配;这是因为同一命令在程序的所有这些位置都在运行。由于Malbolge只有8个命令,因此您会发现程序中的每个命令都属于8个反向ASCII序列之一。

(为了验证代码是否正确,Malbolge,您需要确保它们是与命令相对应的8个特定于 的序列,这就是解释程序的工作。但这就是如果您只是试图确定编写的代码是否是Malbolge太多,那就太复杂了;仅仅寻找zyxwvEDCBA87654之类的东西通常就足够了让我怀疑未知的源代码是Malbolge。)

对于问题中的示例字符串,由于像 xwvu nmlej之类的子字符串,而且非常可疑,它看起来更像是Malbolge,而不是随机键盘混搭。 QPONMFKJ;这些是在随机数据中很少偶然发生的子字符串,但在Malbolge代码中很常见。因此,我怀疑这是正版的Malbolge代码,还是经过稍微改动的代码。