Membedah Kartu Flazz BCA

Rupanya BCA tidak mau ketinggalan dengan Bank Mandiri dalam hal inovasi layanan e-money (Flazz BCA)-nya. Semakin seru persaingan bank-bank ini untuk menggaet dan memanjakan pelanggan khususnya pengguna layanan e-money.

Pengguna Flazz BCA sekarang tidak perlu repot untuk memastikan saldo pada kartu mereka. Berbekal HP Android dengan NFC, BCA memperkenalkan fitur baru pada aplikasi BCA Mobile, yaitu pengecekan saldo kartu Flazz BCA. Poin lebih dari layanan yang diberikan kompetitor adalah dibenamkan fitur-fitur berikut:

  1. Informasi saldo terakhir Kartu Flazz BCA
  2. Informasi nominal top-up terakhir
  3. Informasi 10 transaksi terakhir

Namun BCA belum se-“berani” Bank Mandiri dengan memberikan mekanisme top-up langsung dari HP pengguna. Harapannya mudah-mudahan segera diadakan fitur yang sama juga, karena potensinya cukup besar (dari kacamata pengguna Kartu Flazz BCA yang tidak memiliki rekening Bank BCA 🙂 ).

Caranya?

Install BCA mobile versi 1.2.1 — ntah kenapa di Play Store saya versi yang bisa diinstall adalah versi 1.0.9. Karena info adanya fitur baru ini dari teman, akhirnya saya minta untuk dikirim file .APK nya.

Pada aplikasi baru ini terdapat menu Info Saldo Flazz BCA. Dari sana anda dapat melakukan cek saldo kartu Flazz BCA anda.

Tampilan BCA mobile pada fitur Info Saldo Flazz BCA

Analisa Security

Seperti pada layanan e-money produk plat merah yang pernah diulas sebelumnya, saya juga penasaran bagaimana pengembang aplikasi BCA Mobile ini melakukan proteksi command APDU untuk kartu. Tentunya yang lebih penasaran apakah ada command-command terkait top-up saldo yang diberikan, yang tentunya akan menjadi celah keamanan jika ada.

Dari hasil analisa sekilas, dapat diketahui bahwa tidak ada native code yang dipergunakan untuk memproteksi command-command APDU ke kartu. Tentunya sudah bisa ditebak, jika tidak ada native code pastilah teknik obfuscate yang dipergunakan untuk melakukan proteksi.

Pada awalnya melihat sekilas, bikin males. Hehehe.. ntah kenapa obfucated code lebih bikin mual dibanding native code.

Namun ada teknik yang menarik yang dipergunakan pengembang di sini. Yaitu melakukan load dex-class dari file. Yang lebih menarik lagi, sebelum diload dex-file tersebut di-encrypt “sedemikian” adanya sehingga tidak mudah (dan tidak sulit pula 😛 ) untuk dilakukan reverse.

Dan sesuai dengan dugaan, dex-class inilah yang berisi command-command APDU kartu Flazz BCA.

Dan seperti pada postingan sebelumnya terkait Dalvik & VM:

.. pada akhirnya VM tetaplah VM. Keamanan sebuah sourcecode dipertanyakan, karena akan mudah dalam merubah bytecode Java ke bentuk source code nyaris sesuai dengan aslinya.

Dari class tersebut hanya didapat command-command APDU standar yaitu SELECT FILE dan READ BINARY terkait pembacaan history transaksi, informasi kartu, dan saldo. Tidak ada key atau algoritma yang dipergunakan untuk top-up. Jadi secara keseluruhan, dalam bahasa iseng saya sebut sebagai bocor halus.. hehehe. Secara keamanan command APDU mudah ditemukan namun tidak ada efek finansial yang dapat merugikan Bank BCA.

Saran saya untuk improvement aplikasi adalah:

  1. Pindahkan semua hal terkait APDU command (terutama yang hardcoded) kedalam native code — ide saya adalah native code + obfuscate; rasanya paduan dua teknik ini sudah lumayan bikin orang eneg untuk otak-atik aplikasi anda.

Oiya, saya masih penasaran dengan format record transaksi dari Kartu Flazz BCA:

  • 0017cc — ini adalah saldo setelah operasi (IDR  6.092)
  • 000dac — ini adalah amount debet (IDR 3.500)
  • Lainnya..? nilai tanggal yang terbaca pada aplikasi adalah “25/12/14 10:04:09” — penasaran encode datetime-nya menggunakan apa, silakan jika ada yang merasa penasaran dan merasa sudah menemukan cara encode-nya silakan dikomen

Sebagai catatan sekaligus disclaimer: dalam tulisan ini tidak dimaksudkan untuk melakukan proses reverse engineering untuk tujuan komersil. Dan seluruh review terkait aplikasi dan desain sistem dalam tulisan blog ini dibatasi sedemikian rupa sehingga hal-hal sensitif terkait HAKI maupun ide kreatif tidak dilanggar. Jika tidak berkenan silakan contact melalui comment maupun e-mail.