CTF Learn — Image Magic — Writeup
Salve meus cyber-iludidos! Como estão? Espero que bem.
Hoje vos trago a resolução de um challenge do site CTFLearn, da categoria programming.
O desafio da vez é o Image Magic, onde faremos um pequeno script para resolvê-lo, utilizando somente a lib pillow, do Python ❤️
O desafio começa com o seguinte enunciado, seguido de um link de download de uma imagem:
“It looks like someone messed up my picture! Can anyone reorganize the pixels? The python module PIL (Python Imaging Library) might be useful!
Update: I think whoever messed up my image took every column of pixels and put them side by side. Update: I think the width of the image was 304 before they messed with it.”
A imagem se trata de uma fileira de pixels, e o desafio já nos dá a dica que a largura da imagem original, era de 304 px. Precisamos pegar essa fileira, e reconstruir a imagem original a partir dos pixeis dela.
Fiz o pequeno script para resolver isso, vou postar o script completo aqui, e logo abaixo explico meu raciocínio:
- Para trabalhar com imagens, vamos precisar da lib PIL. Instale ela com o comando
pip install pillow
- Primeiramente, eu abro a imagem baixada, utilizando a função
open
da nossa lib PIL recém baixada, e logo após, crio comnew
o que será nossa imagem final - Logo após, eu descubro o tamanho total da imagem que baixamos, e exibo este valor ali em
print(original_image.width)
- Descobrimos que a imagem tem 27968 pixels
- O próprio enunciado do challenge já dá a dica que a imagem original tinha 304 pixels de largura, munido desses dois números, descobrimos a altura dividindo 27968 por 304, resultado: 92
- Agora, para cada pixel na imagem “esticada”, eu vou reconstruindo a imagem original. Para isso, faço uso das funções getpixel e putpixel para pegar os pixels da imagem original e posicioná-los nas posições (x, y) corretas da imagem que estamos reconstruindo
- O enunciado diz que “alguém pegou cada coluna de pixel e botou lado a lado”, então eu reconstruo a imagem verticalmente, preenchendo coluna por coluna, até o final
- Ao final do processo, fechamos a imagem esticada, e mandamos exibir nossa obra de arte:
Flag na mão, meus consagrados! Basta pontuar e partir pro abraço!