### XOR Crypter - Crypto 200pts
## Problem
Description: The state of art on encryption, can you defeat it?CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA=
## Solution
We get Python script used for encrypt the flag. Output of this script is Base64 string contains encrypted flag (CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA=)
```pythonimport structimport sysimport base64
if len(sys.argv) != 2:    print "Usage: %s data" % sys.argv[0]    exit(0)
data = sys.argv[1]padding = 4 - len(data) % 4if padding != 0:    data = data + "\x00" * padding
result = []blocks = struct.unpack("I" * (len(data) / 4), data)for block in blocks:    result += [block ^ block >> 16]
output = ''for block in result:    output += struct.pack("I", block)
print base64.b64encode(output)```
To resolve this, we have to create "decrypter".
Here's my sample solution for this, maybe not state-of-the-art, but I was able to get the flag :)
```python#!/usr/bin/env python
import structimport sysimport base64
data = base64.b64decode(sys.argv[1])padding = 4 - len(data) % 4
if padding != 0:    data = data + "\x00" * padding
print data
i = 0padding = 4output = ''result = ''while i < len(data):    junk = data[i:i + padding]    print i, padding    output = struct.unpack("I", junk)    for s in output:        r = s ^ s >> 16        result += struct.pack("I", r)    i += 4
print result ```
And here's output with flag:
```$ ./test.py CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA= 0O{♠♠sh↔☼ti1‼_t7►_u♠→hi▬ab◄e}0 44 48 412 416 420 424 428 432 4EKO{unshifting_the_unshiftable}```