Lemur XOR
Desc
Challenge ini menyembunyikan dua gambar dengan cara meng-XOR nilai RGB pixel menggunakan key rahasia yang sama. Karena kedua gambar memakai key yang sama, kita bisa meng-XOR kedua gambar tersebut untuk menghilangkan key dan memunculkan informasi tersembunyi.
Konsepnya mirip dengan properti XOR:
(image_1 XOR key) XOR (image_2 XOR key) = image_1 XOR image_2Karena key XOR key = 0, efek key hilang. Yang perlu diperhatikan, challenge ini meminta XOR pada nilai RGB setiap pixel, bukan XOR seluruh byte file PNG mentah. Jadi gambar harus dibuka sebagai image, dibaca pixel-nya, lalu array pixel-nya di-XOR.
Attachment
- https://cryptohack.org/static/challenges/lemur_ed66878c338e662d3473f0d98eedbd0d.png
- https://cryptohack.org/static/challenges/flag_7ae18c704272532658c10b5faad06d74.png
Solution
Download kedua gambar terlebih dahulu.
wget https://cryptohack.org/static/challenges/lemur_ed66878c338e662d3473f0d98eedbd0d.png -O lemur.png
wget https://cryptohack.org/static/challenges/flag_7ae18c704272532658c10b5faad06d74.png -O flag.png
file lemur.png flag.png
# lemur.png: PNG image data, 582 x 327, 8-bit/color RGB, non-interlaced
# flag.png: PNG image data, 582 x 327, 8-bit/color RGB, non-interlacedKedua gambar memiliki resolusi dan mode warna yang sama, jadi setiap pixel bisa dipasangkan langsung. Setelah itu, lakukan XOR pada nilai RGB masing-masing pixel.
import numpy as np
from PIL import Image
img1 = Image.open("lemur.png")
img2 = Image.open("flag.png")
arr1 = np.array(img1)
arr2 = np.array(img2)
result = np.bitwise_xor(arr1, arr2)
result_img = Image.fromarray(result)
result_img.save("result.png")Penjelasan script:
Image.open()dari Pillow membuka file PNG sebagai object gambar.np.array(img)mengubah gambar menjadi array NumPy berisi nilai RGB setiap pixel.np.bitwise_xor(arr1, arr2)melakukan XOR antar array pixel dengan posisi yang sama.Image.fromarray(result)mengubah array hasil XOR kembali menjadi gambar.save("result.png")menyimpan hasilnya agar bisa dilihat.
Hasil gambar:

Summary
Challenge ini memperlihatkan bahwa XOR juga bisa diterapkan pada data visual. Kuncinya adalah memproses RGB pixel, bukan byte file PNG langsung, karena format PNG punya struktur metadata dan kompresi sendiri.
Flag
crypto{X0Rly_n0t!}