# Pragyan CTF 2019 - EXORcism

## Description
>My friend Alex needs your help very fast. He has been possessed by a ghost and the only way to save him is if you tell the flag to the ghost. Hurry up, time is running out!

We are given the file [encoded.txt](./encoded.txt), which has 10000 lines, each line consists in a `0` or a `1`.

## Solution
The file starts with more than 1000 `1`s, then some `0` appears here and there. The first observation I did was that the number of subsequent `0`s seemed to always be even.

I thought it was an esoteric language (as often happens in CTFs), but it wasn't the case. My next idea was to rearrange the characters in a 100x100 square. The result looked promising but a bit confused, so I replaced all `1` with a white space. This gave a much more clearer output: a QR-code? I changed the `0` to be black squares and yes, it clearly gave me a QR-code!

This is the simple script I used.

f = open('./encoded.txt', 'r')

i = 0
s = ''
for line in f:
if i % 100 == 0:
print s.replace('1', ' ').replace('0', u"\u2588")
s = ''
s += line.strip()
i += 1


At this point I was a bit lazy: I printed the output directly on the terminal, took a screenshot and modified the height with GIMP (the image was elongated). Scanning the resulting [QR-code](./exorcism.png) gave me `160f15011d1b095339595138535f135613595e1a`.

Given the name of the challenge, my idea was to `xor` the above string (after hex-decoding it) with the flag prefix (i.e. `pctf{`), which gave me `flagf`. So let's try to `xor` it with `flag`:


Original writeup (https://github.com/ctf-epfl/writeups/tree/master/pragyan19/exorcism#pragyan-ctf-2019---exorcism).