【问题标题】:How do I recognise a string as Malbolge source code?如何将字符串识别为 Malbolge 源代码?
【发布时间】:2016-05-07 08:55:43
【问题描述】:

假设给了我一个看起来完全是垃圾的字符串,并且要求我确定它可能是什么,那么密码分析员使用这些迹象来形成一组要测试的假设。 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:

【问题讨论】:

    标签: cryptanalysis malbolge


    【解决方案1】:

    通过 malborge 解释器运行它,如果您没有收到语法错误,则它是有效代码。

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

    【讨论】:

    • 是的,只要想到这一点,它就可以工作。 Malbolge 通常不在我的雷达范围内:)
    • 这样的过程可以自动化。
    【解决方案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/.-,+*)('&%$#"!
      !!   !!!!  ! !! !! ! !!!!!   !
    

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

    (为了验证代码是否正确 Malbolge,您需要确保它们是对应于命令的 8 个 特定 序列,这是解释器所做的。但那是如果您只是想确定编写的代码是否是 Malbolge,那就太复杂了;仅仅寻找 zyxwvEDCBA87654 或类似的东西通常本身就足以让我怀疑未知源代码是 Malbolge。)

    对于问题中的示例字符串,由于像 xwvu<b>nml</b>e<b>j</b> 和非常可疑的 <b>QPONM</b>F<b>KJ</b> 这样的子字符串,它看起来更像 Malbolge 而不是随机键盘混搭;这些子串在随机数据中很少偶然发生,但在 Malbolge 代码中却很常见。因此我怀疑它要么是真正的 Malbolge 代码,要么是经过轻微改动的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多