Saya menerima sebuah permainan papan bernama "Hitster" sebagai hadiah. Ini adalah permainan di mana Anda mengidentifikasi lagu dan menebak tahun rilis, artis, dll. Pada setiap kartu, Anda akan menemukan nama artis atau band, tahun lagu dirilis, dan judul lagu. Di sisi belakang, ada kode QR yang dapat Anda scan menggunakan aplikasi Hitster, yang kemudian memainkan musik melalui Spotify atau Apple Music. Sayangnya, aplikasi memerlukan langganan Apple Music atau Spotify untuk dapat digunakan. Dalam blog post ini, saya akan menyelami lubang hitam reverse engineering aplikasi Android dan mengatasi upaya yang sangat tidak rapi mereka untuk menyembunyikan data.
Di sisi depan setiap kartu, Anda akan menemukan nama artis atau band, tahun lagu dirilis, dan judul lagu. Di sisi belakang, ada kode QR. Pemindaianannya mengarahkan Anda ke URL dengan dua hal dalam jalurnya: wilayah permainan (DE dalam kasus saya) dan ID kartu. Musik kemudian mulai diputar dalam aplikasi atau melalui Spotify. Ini berarti ada pemetaan dari ID Kartu ⇒ Lacak Spotify. Ada juga beberapa versi kartu per wilayah, jadi ID kartu saja tidak cukup untuk mengidentifikasi sebuah lagu.
Saya mendapatkan APK aplikasi dari situs unduh APK Android yang mencurigakan, menggunakan jadx untuk mendapatkan kode Java yang telah didekompilasi. Setelah menyelami selama beberapa waktu, saya menemukan beberapa berkas JSON di bawah res/raw. Salah satunya bernama gameset_database_4.json, dan sepertinya terenkripsi. Saya menjalankan alat untuk mengidentifikasi format, dan ia mengembalikan Base64. Itu adalah enkoding, jadi saya mendekodernya terlebih dahulu. Hasilnya masih tidak dapat dibaca, dan saya menebak bahwa ia dienkripsi dengan AES atau sesuatu yang serupa. Saya pernah tidak pernah reverse engineering aplikasi Android, jadi saya hanya mencari secara global untuk AES. Dan tebak apa? Ada berkas bernama k43.java dengan seluruh proses dekripsi ditempatkan di depan saya!
FAQ T: Bagaimana aplikasi Hitster mendekripsi database permainan?
FAQ J: Aplikasi menggunakan berkas JSON yang terenkripsi dengan Base64 dan AES/GCM/NoPadding. Kunci dekripsi diturunkan menggunakan SHA-256 dari konkatenasi string angka dan string rahasia. IV adalah 12 byte pertama dari data yang telah didekodekan.
Sumber: Hacker News · Diringkas oleh HeadlinesBriefing