Blog Home
Table of Content

Bagaimana Mencegah “Reverse Engineering” pada Mobile Apps yang Kita Bangun?

By : nuryazid 19 January 2020

Bagaimana Mencegah “Reverse Engineering” pada Mobile Apps yang Kita Bangun?

Salah satu hal yang menjadi perhatian utama para developer apps ketika membangun sebuah aplikasi mobile yaitu security atau keamanan, khususnya untuk mencegah aplikasi mereka dari reverse engineering.

Apa itu Reverse Engineering?

Ketika Anda menjadi seorang developer aplikasi mobile, seseorang di luar sana mungkin ingin membongkar aplikasi Anda untuk mengetahui cara kerja fitur-fitur aplikasi Anda, menghapus iklan, melakukan modifikasi, baik untuk membuat ulang aplikasi yang lebih baik daripada milik Anda atau hanya mereproduksi sepenuhnya.

Praktek itulah yang dikenal sebagai Reverse Engineering.

Proses reverse engineering akan melakukan ekstraksi source code dan berbagai resources dari file APK. Ekstraksi ini membutuhkan pengubahan file dex menjadi file jar kemudian file jar tersebut diubah menjadi source code java, dengan kata lain, proses ini akan mengambil/menghasilkan source code dari aplikasi Anda. Mengurai file APK tersebut bukanlah tugas yang sangat sulit untuk dilakukan, ada banyak tools yang tersedia untuk membantu, seperti: Apktool, dex2jar, jadx-gui dan JAD.

Mencegah Reverse Engineering pada Aplikasi Mobile

Beberapa cara di bawah ini akan membantu Anda mengamankan aplikasi dari serangan reverse engineering.

1. ProGuard

ProGuard merupakan tool cross platform open source yang ditulis dalam bahasa pemrograman Java, yang membantu memastikan keamanan aplikasi mobile. ProGuard akan membuat fungsi-fungsi dalam source code menyusut (Shrink), mengoptimalkan (Optimization), mengacak kode yang ditulis. (Obfuscation

Shrink Method: mengidentifikasi kelas, variabel, dan parameter fungsi yang tidak digunakan dari aplikasi mobile dan kemudian menghapusnya.

Optimization: menganalisis dan mengoptimalkan bytecode dari berbagai fungsi/method.

Obfuscation: menamai ulang variabel menjadi karakter tanpa arti, dilakukan ke seluruh class, variable, dan fungsi

Langkah-langkah di atas akan mepersulit proses reverse engineering aplikasi dengan membuat source code benar-benar lebih kecil, lebih efisien dan rumit.

2. Menyimpan kode penting di Server

Cara selanjutnya untuk mencegah aplikasi dari reverse engineering adalah menghapus kode dari aplikasi dan memindahkannya ke layanan web dan melakukan enkripsi pada data tersebut.

Misalnya, jika perusahaan memiliki kode atau algoritma unik yang digunakan oleh aplikasi mereka, mereka tidak menginginkan kode mereka dicuri oleh orang lain. Mereka dapat mencegahnya hanya dengan memindahkan kode atau algoritma mereka ke dalam server dan membiarkan data diproses oleh server, setelah itu baru menggunakan aplikasi untuk mengakses data tersebut.

3. Menggunakan NDK untuk menyimpan kode penting

Kode yang ditulis dalam bahasa Java lebih mudah diurai dari pada yang ditulis dalam bahasa native (C/C++). Oleh karena itu, developer aplikasi terkadang menggunakan NDK untuk menulis bagian-bagian penting dari kode mereka secara native ke dalam file .so. Selanjutnya, mereka menambahkan file-file itu sebagai library yang ikut di-compile. Meskipun, kode ini masih dapat diekstrak ke bahasa assembl, namun proses reverse engineering dari sebuah library besar dapat menjadi rumit dan membutuhkan waktu yang lama.

4. Menghindari penyimpanan variable value ke dalam raw format (hardcoded)

Hindari penulisan value/isi dari sebuah variable data langsung ke dalam source code. Misalnya: “kode_transaksi” = “TRX123456”, sebaiknya disimpan dalam bentuk disandikan atau menggunakan algoritma tertentu.

5. Mengamankan kredensial pengguna

Proses autentifikasi dianjurkan menggunakan OTP (One Time Password) dengan masa berlaku yang singkat. Nama pengguna dan kata sandi pun sebaiknya tidak boleh disimpan langsung di perangkat.

6. Menyembunyikan API key

Apabila aplikasi menggunakan library pihak ketiga, biasanya penyedia pihak ketiga menggunakan API Key untuk memberikan akses ke resource. Disarankan untuk tidak menyimpan kunci API di dalam aset atau folder resource, apalagi dituliskan langsung/hardcode di kelas Java. 

7. Menggunakan algoritma hashing

Selalu lakukan enkripsi terhadap data yang penting. Meskipun proses reverse engineering berhasil mengekstrak data source code, setidaknya proses tersebut masih memerlukan aksi tambahan untuk memecahkan enkripsi data dalam source code nya. 🙂

Jadi, beberapa tips di atas mungkin bisa menjadi pilihan untuk mengamankan aplikasi yang sedang dibangun.

Sumber: Multidots.