Artikel ini ditujukan untuk para reverse engineer dan pentester yang ingin mengetahui situasi terbaru hooking Android pada awal tahun 2022. Hooking Android artinya kita menulis kode untuk mengintercept fungsi yang ada dan menggantinya dengan milik kita. Tujuan hooking ada banyak, misalnya: bypass SSL Pinning, security testing, cheating game, dsb.
Di tahun 2019 saya pernah menuliskan tentang Magisk, Frida, dan XPosed Framework. Artikel ini merupakan update situasi terkini. Untuk Frida, saya pernah menulis lebih detail di sini (2019), dan XPosed pernah saya tulis di sini (2016).
Zygisk
Setelah capek kucing-kucingan dengan Google dalam hal Safety Net, akhirnya Magisk Hide dihapus. Selain Magisk Hide, Magisk memiliki banyak modul. Modul Magisk sifatnya low level, seperti menyembunyikan, memindahkan, menggantikan atau menambahkan file tertentu di Android.
Sekarang ini ada modul magisk baru bernama Zygisk. Ini sekedar untuk meload sebuah .so di setiap proses (dan otomatis dipanggil ketika proses dimulai). Dengan ini, developer Magisk hanya ingin bilang: ini saya sediakan akses untuk hook low level, silakan dimanfaatkan untuk apapun.
Jadi di level pertama: Magisk memiliki modul bernama Zygisk, Zygisk bisa punya modul. Zygisk memudahkan kita meload file apapun sebelum aplikasi dijalankan. Tapi kodenya harus dalam native code (biasanya C).
Safetynet Fix
Salah satu modul yang memakai Zygisk adalah safetynet-fix. Tujuan utamanya hanya satu: untuk bypass Safety Net, bukan untuk bypass root detection (untuk ini gunakan fitur DenyList di magisk). Ini dibutuhkan untuk beberapa aplikasi banking, dan juga untuk beberapa game (misalnya Pokemon Go).
LSPosed
Modul lain yang memakai Zygisk adalah LSposed yang bisa menggantikan XPosed framework. Dulu ada XPosed framework (sampai sekitar Android 5.0), tapi kemudian tidak jalan di OS terbaru (dan bentrok dengan Safetynet). Proyek utama XPosed sudah dihentikan.
Ada beberapa proyek yang berusaha menggantikan XPOsed, ini bisa dibagi menjadi dua kategori: user interfacenya (lsposed dan edxposed) dan modul hookingnya (Riru dan Sandhook).
Dengan Zygisk, LSposed sekarang bisa memakai Zygisk, tidak perlu memakai Riru/Sandhook lagi. LSPosed ini bisa meload banyak modul yang ditulis dalam Java (dalam versi barunya, native/C code juga bisa dihook), ini merupakan level berikutnya: Kita menginstall LSPosed di atas Zygisk (Zygisk di atas Magisk), dan modul LSPosed bisa berjalan di atas LSPosed.
Perhatikan bahwa LSPosed akan membatas modul hanya pada aplikasi terpilih saja. Jika aplikasi yang dicari tidak tercantum, kemungkinan karena terfilter (defaultnya game tidak muncul).
JSHook
Ini adalah level berikutnya lagi: JSHook adalah modul LSPosed yang bisa menjalankan Script Frida dalam JavaScript. Dengan ini kita bisa memiliki script yang otomatis di jalankan ketika sebuah aplikasi dimulai. Kita bisa memilih script apa yang akan dijalankan di aplikasi mana.
Perhatikan: JSHook adalah modul LSPosed, jadi jika aplikasi dipilih di JSHook tapi tidak dipilih di LSPosed, maka hook tidak akan berjalan. Jadi pastikan aplikasi terpilih di keduanya.
Walaupun kurang nyaman, kita bisa membuat skrip frida langsung dalam aplikasi JSHook. Saran saya: sebelum menaruh script di aplikasi ini, test dulu apakah bisa berjalan normal dengan injeksi frida dari desktop.
Penutup
Pelaku dunia security (baik hacker maupun pentester) perlu selalu mengupdate ilmu dengan hal terbaru karena banyak hal yang berubah. Banyak hal memang tidak terdokumentasi (misalnya dokumentasi JSHook sangat minim), jadi perlu membaca banyak source code untuk memahami berbagai masalah yang ada.
Sebagai catatan juga: yang saya tuliskan di atas hanyalah penyederhanaan. Misalnya jika saya bilang native memakai C, sebenarnya bisa juga memakai bahasa lain (misalnya dengan Rust), atau kita juga bisa meload modul Java tanpa LSPosed (misalnya dengan ZygoteLoader). Modul Frida dalam Javascript juga bisa meload native code atau mengandung bahasa C. Jadi silakan didalami sendiri.
Keren