Skip to content

Latest commit

 

History

History
62 lines (47 loc) · 3.59 KB

README.md

File metadata and controls

62 lines (47 loc) · 3.59 KB

malbolge-tools

This is a set of Malbolge code generators (for a given text) and a web-based GUI for the interactive interpreter and these generators, made using the malbolge-vm library.

You can access the GUI here

It also contains examples of code such as:

  • crackme
  • theoretical "encryption" (albeit take this with a grain of salt)
  • loops
  • enter detection code.

Many of these sample programs were developed using the LMAO assembler (which is awesome and GPL btw), and source code (assembly) for these examples is provided.

Three code generators

There are basically 3 different types of code generators for Malbolge:

  • Linear
    Generates code per character, code that does not access memory placed after the code. This way, we can generate long text quickly, but the code is long.
    Note since prefix is often randomized, generation speed is randomized as well, so try again if you're stuck.
  • Branch-on-read
    This creates a branch everytime a new memory location is read, therefore it recursively checks every possible combination efficiently. The code is short, the generator works in exponential time, but it still doesn't generate the shortest possible code. Why? Because in Malbolge, we can access so-called "default memory" - memory filled after the program which depends on the last two chars of the code. This generator can not make use of this fact.
  • Fixed length
    This is very similar to BOR generator, but this time we have to specify the length of the program in advance. This enables us to make use of the default memory - we try all 64 possible suffixes for the program so that we know what the default memory will be. This is guaranteed to produce the shortest code if it exists, but it's very slow

Development

The GUI version placed in dist directory works out of the box. If you wish to modify this or use CLI version, install dependencies first:

npm install

Then in order to build the GUI version:

npm run build

CLI generators can be accessed like this:

node cli/gen-fixed.js
node cli/gen-bor.js
node cli/gen-linear.js

Note on examples

There are two interesting examples included:

Crackme

Can you crack the code just by analysing the source? It basically checks the character you type and then fires one of two branches depending on the input. The question is - can this be easily cracked (I think so), so that you can see both the key and the resulting message? Of course brute force doesn't count here.

Encryption

Is this stronger than rot13 or plaintext? If so, is it because less people know about this or because it's harder to crack?
It currently works like this:

  • samples/src/encrypt.js generates the target output for the BOR code generator
  • This target output contains prompts, and assumes user enters the key which is repeated. User has to enter the full key of given length, so the program has to display it.
  • Then program assumes user enters the key, and displays the message. The program does not guarantee the message depends on the key, but since we're using BOR generator, this will often occur and can be easily checked.
  • Since BOR is meant to generate short code, we will often avoid repetitions - IOW, frequency analysis should not be a problem here.

Of course generating these is very slow and the user has to repeat the key which makes it completely impractical. But the question still remains - how hard would it be to crack?

Obviously if we know the plaintext, we can crack the key very easily.