ThePowerOfLogs
July 5, 2025
Category: misc
Challenge Overview
Description: Sebuah organisasi lingkungan bawah tanah yang dikenal sebagai Veridian Accord diduga merencanakan aksi skala besar untuk "merekode ulang bumi". Selama penggerebekan markas salah satu anggotanya, tim forensik menemukan printer tua yang tampaknya telah digunakan untuk mencetak sesuatu — tapi alih-alih hasil cetakan biasa, hanya file log sistem internal yang berhasil dipulihkan. Log tersebut tampak seperti catatan aktivitas sistem bus data atau debug perangkat keras, dengan format yang tidak lazim. periksalah log tersebut untuk memahami isi sebenarnya. Mungkinkah ada sesuatu yang mereka sembunyikan? Download Soal
Solution
Pada chall ini, kami diminta untuk “merekode ulang bumi”, yang artinya merekonstruksi ulang gambar yang dibuat oleh printer berdasarkan file printer_log.txt. Begini potongan file log yang diberikan:
=== SYSTEM DEBUG LOG START ===
[IO_TRACE] tx=761, ty=286 :: packet: 193.205.165
[IO_TRACE] tx=788, ty=272 :: packet: 067.091.057
[IO_TRACE] tx=502, ty=121 :: packet: 186.079.027
[IO_TRACE] tx=268, ty=14 :: packet: 169.212.221
[IO_TRACE] tx=433, ty=604 :: packet: 151.118.101
[IO_TRACE] tx=515, ty=139 :: packet: 164.178.101
[IO_TRACE] tx=215, ty=863 :: packet: 017.013.014
...
Setelah mencari-cari beberapa lama, sepertinya ini adalah format custom. Akhirnya saya sampai pada kesimpulan demikian. Interpretasi:
- tx, ty → Koordinat posisi pixel (x, y)
- packet: R.G.B → Nilai warna pada koordinat tersebut
Berarti saya dapat merekonstruksi ulang gambar yang di-print menggunakan library python, PIL. Maka, saya buat script berikut untuk otomasi pembuatan file gambarnya.
Script py PIL
# script.py
import re
from PIL import Image
# 1. Baca isi file log
with open("printer_log.txt", "r") as f:
lines = f.readlines()
# 2. Parse baris-baris yang punya pola [IO_TRACE] ...
pixels = []
max_x = max_y = 0
for line in lines:
match = re.search(r'tx=(\d+), ty=(\d+).*?packet:\s*(\d+)\.(\d+)\.(\d+)', line)
if match:
x = int(match.group(1))
y = int(match.group(2))
r = int(match.group(3))
g = int(match.group(4))
b = int(match.group(5))
pixels.append((x, y, (r, g, b)))
max_x = max(max_x, x)
max_y = max(max_y, y)
# 3. Buat image sesuai ukuran terbesar koordinat
img = Image.new("RGB", (max_x + 1, max_y + 1), color=(0, 0, 0))
pix = img.load()
# 4. Isi pixel dari data log
for x, y, color in pixels:
pix[x, y] = color
# 5. Simpan hasilnya
img.save("printer_output.png")
print(f"[✅] Gambar berhasil disimpan sebagai printer_output.png (ukuran: {max_x+1}x{max_y+1})")
Setelah mendapatkan file printer_output.png, tinggal scan QR yang ada di samping br br patapim, lalu submit flag-nya.

Flag:
FITUKSW{r3c0d3_th3_34rth_1s_3451}