Encang Maman belajar ngoding. Dia mengirim pesan untuk kalian. Dapatkah kalian membaca kode dari Encang Maman?
Intro
File yang diberikan berupa
$ file pesan.zip
pesan.zip: Zip archive data, at least v2.0 to extract
$ unzip pesan.zip
Archive: pesan.zip
inflating: pesan2
inflating: pesan1
$ file *
pesan1: data
pesan2: data
pesan.zip: Zip archive data, at least v2.0 to extract
TLDR
- Konversi UTF-16
- Konversi UTF-32
- Get the flag
Full Steps
Kedua file (pesan1 dan pesan2) ketika dibaca hanya menampilkan data yang tidak dapat dipahami.
Hint yang diberikan berupa:
2 file (UTF-16; UTF-32) tersebut adalah 2 file yang ditulis dengan encoding tertentu, dengan penanda encoding yang dihapus
Pencarian menggunakan Google dengan keyword encoding utf-16 linux mengembalikan referensi [1] yang kemudian dicoba pada file soal.
$ iconv -f UTF-16LE -t UTF-8 pesan1 -o flag1
$ strings flag1
COMPFEST11{p14Y1n6_
Didapatkan potongan flag pertama. Sedangkan untuk pesan2, sesuai dengan hint akan dilakukan konversi dari UTF-32
$ iconv -f UTF-32LE -t UTF-8 pesan2 -o flag2
$ strings flag2
wITH_un1C0D3_uWu}
Flag
COMPFEST11{p14Y1n6_wITH_un1C0D3_uWu}
Explanation
Berdasarkan referensi [2], tertulis bahwa
The encoding used by Windows for Unicode is UTF-16, to be specific, UTF-16LE (Little Endian). Linux uses UTF-8 to encode Unicode. A file encoded with Unicode can optionally contain a Byte Order Mark(BOM) which is a special magic number at the start of file. Byte Order Mark(BOM) is optional for UTF-8, but mandatory for UTF-16 as per Unicode standard. So, Linux does not use BOM for Unicode files as it uses UTF-8. But Windows applications look for BOM in Unicode encoded file as they use UTF-16.
artinya secara singkat adalah
Windows uses UTF-16LE with BOM, and Linux uses UTF-8 without BOM.
sehingga harus dilakukan konversi terlebih dahulu agar flag dapat dibaca
References
- https://stackoverflow.com/questions/17287713/using-iconv-to-convert-from-utf-16le-to-utf-8
- http://murty4all.blogspot.com/2016/12/conversion-between-utf-16-utf-8-encoded.html