---
# System prepended metadata

title: MORXOR

---

# MORXOR

This puzzle was part of the Gold Bug Zine. It was a single page which had a diagram of an encryption algorithm along with some ciphertext:

![](https://hackmd.io/_uploads/BkiXeB_6n.png)

The algorithm is based on bitwise rotations and XOR. Each plaintext block of 32 bits is encrypted by XORing with data from the previous _ciphertext_ blocks. Since we are given the ciphertext blocks, we can decrypt all but the first block by essentially running the encryption algorithm over the ciphertexts and with a null key:

```py=
from pwn import xor

def unrol24(v):
    return v[-1:] + v[:-1]

def unrol16(v):
    return v[-2:] + v[:-2]

def unrol8(v):
    return v[-3:] + v[:-3]

ct = ['a6d677fa', 'b9e99232', '65140016', '16001e1c', 'd5c41ee5', 'a68d9232', '7f140b0e', '0b151e0b']
ct = [bytes.fromhex(c) for c in ct]
C0, C2, C3, C4, C5, C6, C7, C8 = ct

P2 = xor(unrol24(C0), C2)
print('P2:', P2.decode())

P3 = xor(unrol24(C2), unrol16(C0), C3)
print('P3:', P3.decode())

P4 = xor(unrol24(C3), unrol16(C2), unrol8(C0), C4)
print('P4:', P4.decode())

P5 = xor(unrol24(C4), unrol16(C3), unrol8(C2), C5)
print('P5:', P5.decode())

P6 = xor(unrol24(C5), unrol16(C4), unrol8(C3), C6)
print('P6:', P6.decode())

P7 = xor(unrol24(C6), unrol16(C5), unrol8(C4), C7)
print('P7:', P7.decode())

P8 = xor(unrol24(C7), unrol16(C6), unrol8(C5), C8)
print('P8:', P8.decode())
```

::: spoiler Answer
The ciphertext decrypts to "THE CODE IS **VIVIDVISIONSFIX**"