Tags: python 

Rating:

Each frame represents part of an octagon that makes up 8 bits. You collect all the bits, re-break it up into groups of 5, and use that to index the charset to get the flag.

```
verticies = ['10001100', '01100011', '11100100', '01000110', '10000101', '00111101', '01000010', '10011000', '11100000',
'11110100', '10000000', '00101101', '01110010', '00011100', '00001000', '10100101', '11010111', '01101110',
'10100110', '10010001', '10111100', '10000100', '10000001', '10111001', '11010100', '00111011', '11001110',
'11110010', '00011110', '10011101', '11001001', '11000111', '01100101', '00011110', '10011111']

alphabet = '+-=ABCDEFGHIJKLMNOPQRSTUVWXYZ_{}'

def solve(verticies):
combined = ''
for v in verticies:
combined += v

indicies = []
for x in range (0, len(combined)//5):
indicies.append(combined[x * 5:x * 5 + 5])

answer = ''
for x in indicies:
answer += alphabet[int(x, 2)]

print (answer)

def twist(verticies):
newverticies = []

for v in verticies:
# v = abcdefgh -> habcdefg
newv = ''
newv+=v[7]
newv+=v[0:7]
newverticies.append(newv)

return newverticies

for x in range (0,8):
solve(verticies)
verticies = twist(verticies)

print("Finished Program")
```

Original writeup (https://www.osusec.org/defcon-qualifiers-2019-redacted-puzzle/).