Perkenalan

Halo semuanya! Masih bersama saya untuk berbagi pengalaman, pemikiran, atau pendapat tentang teknologi yang berhubungan dengan bidang rekayasa perangkat lunak. Pada artikel kali ini, saya ingin berbagi tentang pengalaman saya memeriksa permintaan jaringan dari aplikasi seluler, khususnya untuk platform Android!

Jika kita berbicara di aplikasi web, memeriksa permintaan jaringan ke server cukup mudah. Untuk Chrome atau Firefox, buka saja alat pengembang dan lihat tab jaringan. Kami dapat memantau jenis permintaan seperti Metode, URL, Header, Isi dan responsnya juga.

Namun, bagaimana jika kita ingin melakukan hal yang sama di perangkat seluler? Karena untuk browser seluler, kami tidak memiliki opsi serupa dengan alat pengembang. Selain itu, hal ini tidak mungkin dilakukan bila kita ingin melihat jaringan untuk aplikasi seluler.

Proksi

Jawabannya adalah kita dapat menggunakan alat seperti Proxy untuk membantu kita menangkap jaringan antara perangkat dan server. Metode ini disebut Man-In-The-Middle, karena kita menempatkan proxy di tengah-tengah koneksi. Untuk gambar lebih lanjut, lihat diagram di bawah ini.

Ada banyak layanan Proxy misalnya:

  • Proksiman (“https://proxyman.io”)
  • mitmproxy (“https://mitmproxy.org”)
  • Charles (“https://www.charlesproxy.com”)
  • dll.

Saya pribadi akan menggunakan Proxyman, karena saya pengguna Mac dan berbasis GUI. Jika Anda lebih menyukai berbasis CLI, Anda dapat mencoba dengan mitmproxy. Keduanya bukan favoritmu? Mungkin Anda bisa menggunakan proxy lain yang cocok untuk Anda. Hanya google tentang hal itu. Berikut beberapa tampilan proxy yang saya sebutkan.

Setelah selesai instalasi dan menjalankan Proxyman, kita akan mendapatkan port pendengaran. Jangan khawatir jika port default bertentangan dengan port yang ada di sistem Anda. Kita dapat dengan mudah beralih ke yang lain. Berikut adalah gambar bagaimana Proxyman berjalan dan mendapatkan port pendengaran.

Konfigurasi Android

Setelah itu, langkah selanjutnya adalah konfigurasi pada ponsel Android. Jika kita tidak memiliki ponsel Android, kita dapat menggunakan Emulator seperti Genymotion (https://www.genymotion.com).

Pastikan jaringan antara ponsel dan server proxy berada di jaringan yang sama. Buka konfigurasi SSID, pilih proksi manual dan tambahkan nama host proksi + port sebagai informasi proksi.

Selesai dengan konfigurasi proxy, kita perlu menyiapkan SSL untuk ponsel Android. Karena saya menggunakan Proxyman, kita perlu membuka URL http://proxy.man/ssl dan mendownload sertifikatnya. Di ponsel Android asli, cukup buka sertifikat dan ikuti instalasinya. Namun untuk kasus emulator, langkahnya sedikit berbeda. Kita perlu menginstal dari Pengaturan -› Keamanan -› Instal dari kartu SD.

Pengujian

Cobalah untuk menangkap jaringan dengan membuka situs web menggunakan browser seluler. Dalam hal ini, saya mencoba menangkap permintaan jaringan untuk situs web Google. Seperti yang bisa kita lihat pada gambar di bawah, jaringan akan ditangkap dan jika kita ingin melihat responsnya, kita perlu mengklik “Aktifkan hanya domain ini” dan coba terapkan permintaan yang sama. Lihat Gambar 4 & 5 untuk detailnya.

Jika menangkap jaringan di browser sepertinya tidak ada masalah, bagaimana dengan aplikasi seluler? Ya, saya mencoba dengan aplikasi sederhana untuk informasi Mata Uang. Dan seperti “Gambar 6”, ini masih berfungsi!

Masalah Perangkat Sebenarnya

Langkah sebelumnya dilakukan pada Genymotion. Bagaimana jika menggunakan perangkat nyata? Karena lebih nyaman dilakukan di perangkat nyata dibandingkan dengan emulator. Namun, sepertinya perangkat sebenarnya mengalami masalah tentang SSL Handshake Failed. Gambar 7 menunjukkan bagaimana jaringan menjadi merah karena beberapa kesalahan.

apk-mitm

Apa yang bisa kita lakukan untuk mengatasi masalah SSL Handshake Gagal di perangkat sebenarnya? Salah satu solusinya mungkin menggunakan alat yang disebut apk-mitm (https://github.com/shroudedcode/apk-mitm)

Apa itu apk-mitm? Dari situs resmi github mereka:

Aplikasi CLI yang secara otomatis menyiapkan file APK Android untuk inspeksi HTTPS

apk-mitm mengotomatiskan seluruh proses. Yang harus Anda lakukan adalah memberikan file APK dan apk-mitm akan:

Seperti yang bisa kita lihat uraian di atas, kita membutuhkan APK mentah. Kita bisa mendapatkannya dari APKPure atau situs serupa atau mengekspor menggunakan SAI. Kemudian kita hanya perlu menjalankan perintah instalasi + eksekusi ini dan seluruh proses akan seperti pada Gambar 8.

$ npm install -g apk-mitm
$ npx apk-mitm <path-to-apk>

Setelah instalasi APK yang ditambal selesai, coba buka aplikasi dan lihat permintaan yang diambil. Voila! Permintaan dari APK yang dipatch tidak memiliki masalah tentang SSL Handshake Gagal!

Masalah Penyematan Sertifikat

Sayangnya, dalam kasus saya, saya mempunyai masalah terkait aplikasi yang menerapkan Penyematan Sertifikat. Jika Anda baru pertama kali mendengarnya, Anda dapat melihat detailnya di sini. Meskipun apk-mitm mengatakan mereka memiliki logika untuk menonaktifkan Penyematan Sertifikat, itu tidak berhasil untuk saya. Kesalahan tentang “SSL Handshake Failed” masih terjadi di konsol Proxyman.

Kesimpulan

Ringkasan percobaan ini dapat dicantumkan pada poin-poin di bawah ini:

  • Proxyman berfungsi dengan baik untuk menangkap permintaan jaringan browser dan aplikasi untuk Android (Genymotion).
  • Menangkap aplikasi jaringan pada perangkat Android sebenarnya memerlukan perawatan ekstra menggunakan apk-mitm .
  • Proxyman berfungsi dengan baik untuk menangkap permintaan jaringan browser dan aplikasi untuk iOS (Perangkat Asli). Saya tidak membagikan detailnya untuk iOS karena area topiknya, tetapi saya sudah mencobanya.
  • Aplikasi Android yang menerapkan Penyematan Sertifikat mungkin gagal karena SSL Handshake Fail meskipun kami menggunakan APK yang telah dipatch.

Saya harap artikel ini bermanfaat dan sampai jumpa di topik lainnya! Terima kasih!