# break a leg - CakeCTF 2021
###### tags: `CakeCTF 2021`
yaru-dake
```python=
from PIL import Image
img = Image.open("chall.png")
w, h = img.size
for x in range(w):
a = img.getpixel((x, 0))
b = img.getpixel((x, 1))
c = img.getpixel((x, 2))
print(chr(list(set(a) & set(b) & set(c))[0]), end="")
```
さすがに簡単なのでこういう感じでどうですか
```python=
from PIL import Image
from random import getrandbits
with open("flag.txt", "rb") as f:
flag = int.from_bytes(f.read().strip(), "big")
bitlen = flag.bit_length()
data = [getrandbits(8)|((flag >> (i % bitlen)) & 1) for i in range(256 * 256 * 3)]
img = Image.new("RGB", (256, 256))
img.putdata([tuple(data[i:i+3]) for i in range(0, len(data), 3)])
img.save("chall.png")
```
こういう感じで解く
```python=
from PIL import Image
img = Image.open("chall.png")
w, h = img.size
bits = []
for y in range(h):
for x in range(w):
a, b, c = img.getpixel((x, y))
bits += [a & 1, b & 1, c & 1]
for flen in range(100, 1000):
bits2 = [1 for i in range(flen)]
for i, b in enumerate(bits):
bits2[i % flen] &= b
if any(b !=0 for b in bits2):
x = sum(b*(2**i) for i, b in enumerate(bits2))
print(x.to_bytes((x.bit_length() + 7) // 8, "big"))
```