W1-D1 Aktivasi Sistem
Detail Soal
| Field | Value |
|---|---|
| Nama Challenge | W1-D1 Aktivasi Sistem |
| Kategori | Reverse Binary |
| Event | ZERO DAY Mini Games 2026 |
| Poin | 100 |
| Difficulty | Beginner |
| File | Binary aktivasi_sistem
|
Deskripsi Singkat
Pada challenge ini diberikan sebuah file binary bernama aktivasi_sistem. Binary tersebut merupakan modul aktivasi sistem yang meminta kode aktivasi sebelum memberikan akses. Tujuan dari challenge ini adalah menganalisis binary untuk menemukan kode aktivasi yang valid.
Analisis Awal
Langkah pertama yang saya lakukan adalah mengecek jenis file menggunakan perintah file.
file aktivasi_sistem
Hasilnya menunjukkan bahwa file tersebut merupakan ELF 64-bit executable. Selanjutnya, saya menjalankan binary untuk melihat perilakunya.
./aktivasi_sistem
Program menampilkan pesan:
Sistem Aktivasi PT Infrastruktur Digital
Masukkan kode aktivasi:
Jika input yang diberikan salah, program akan menampilkan pesan bahwa kode aktivasi tidak valid. Dari sini dapat disimpulkan bahwa program melakukan validasi terhadap input pengguna.
Kemudian saya melakukan pemeriksaan string menggunakan perintah:
strings aktivasi_sistem
Pada hasil strings, terdapat beberapa string yang terlihat seperti petunjuk, seperti:
INFRANET-V2
bypass_key_admin
kernel_token
SYS-AUTH-MODULE-v3.1
Namun string tersebut bukan kode aktivasi yang valid. Selain itu, terdapat string yang tampak tidak terbaca langsung:
<6;=!)k4=6i
Hal ini sesuai dengan catatan challenge bahwa string yang tidak terbaca langsung bukan berarti tidak ada informasi di dalamnya.
Langkah Penyelesaian
Untuk memahami cara program memvalidasi input, saya melakukan disassembly menggunakan objdump.
objdump -d -Mintel aktivasi_sistem
Dari hasil disassembly, ditemukan fungsi bernama xor_decode. Fungsi ini melakukan operasi XOR terhadap setiap byte menggunakan nilai 0x5a.
Potongan logic pentingnya adalah:
xor eax, 0x5a
Program mengambil data terenkripsi dari bagian .rodata, kemudian melakukan decode menggunakan XOR 0x5a. Hasil decode tersebut kemudian dibandingkan dengan input pengguna menggunakan fungsi strcmp.
Data terenkripsi yang digunakan sebagai kode aktivasi berada pada bagian .rodata:
3c 36 3b 3d 21 29 6b 34 3d 36 69 05 38 23 2e 69
05 22 6a 28 05 6e 39 2e 6b 2c 6e 2e 69 3e 27
Setelah mengetahui bahwa algoritmanya adalah single-byte XOR dengan key 0x5a, saya melakukan decode menggunakan Python.
enc = bytes.fromhex(
"3c363b3d21296b343d36690538232e6905226a28056e392e6b2c6e2e693e27"
)
print(bytes([b ^ 0x5a for b in enc]).decode())
Hasil decode-nya adalah:
flag{s1ngl3_byt3_x0r_4ct1v4t3d}
Untuk memastikan kode tersebut benar, saya menjalankan kembali binary dan memasukkan hasil decode tersebut sebagai kode aktivasi.
./aktivasi_sistem
Input:
flag{s1ngl3_byt3_x0r_4ct1v4t3d}
Program kemudian menampilkan pesan:
Aktivasi berhasil! Sistem online.
Flag
flag{s1ngl3_byt3_x0r_4ct1v4t3d}
Kesimpulan / Hal yang Dipelajari
Pada challenge ini, kode aktivasi tidak disimpan secara langsung dalam bentuk plaintext. Program menyimpan kode tersebut dalam bentuk data yang telah di-XOR menggunakan key 0x5a, lalu mendecode-nya saat runtime sebelum dibandingkan dengan input pengguna.
Dari challenge ini, saya belajar bahwa pada reverse binary, hasil strings tidak selalu langsung menampilkan flag. String yang terlihat seperti petunjuk bisa saja hanya noise, sedangkan data penting dapat disimpan dalam bentuk terenkripsi atau ter-encode sederhana seperti single-byte XOR.