Rekayasa Balik Aplikasi Android Subway

Sangat menyenangkan melihat peningkatan penerapan penyematan sertifikat di aplikasi Android. Ketika saya menemukan aplikasi yang memunculkan kesalahan koneksi saat mencoba mem-proxy permintaan, saya cenderung menjadi lebih tertarik untuk mendalami lebih dalam. Itulah yang terjadi ketika saya baru-baru ini menggunakan aplikasi Subway. Membalikkan APK mengungkapkan penyematan sertifikat di antara beberapa temuan menarik lainnya.

Memulai aplikasi saat memproksi permintaan menyebabkan kesalahan ini:

Menyematkan cukup sederhana untuk dilewati. Saya mulai dengan mendekompilasi aplikasi dan menganalisis kode sumber untuk menyematkan kata kunci. Saya sebenarnya menemukan menyematkan implementasi di dua kelas terpisah yang diimplementasikan X509Manajer Kepercayaan. Berikut adalah salah satu metode yang menerapkan penyematan:

 // Code removed at request of Subway leadership

Melewati ini semudah menambahkan pernyataan return dalam kode smali untuk melewati kode penyematan pada metode di atas. Perhatikan penambahan kembali-batal pernyataan di bawah ini:

 // Code removed at request of Subway leadership

Setelah mengkompilasi ulang Aplikasi dan menginstal, saya terkejut melihat kesalahan baru ini:

Subway menggunakan proses verifikasi tanda tangan aplikasi khusus untuk mencegah pembalikan APK mereka. Mengambil sumber untuk menyebutkan proses ini, saya menelusurinya kembali ke metode berikut:

 // Code removed at request of Subway leadership

Ini merupakan upaya yang menarik untuk mencegah rekayasa balik, meskipun sebenarnya hanya menyebabkan sedikit penundaan. Untuk melewati proses ini, saya cukup menambahkan baris untuk melewati eksekusi metode dengan menambahkan baris lain kembali-batal baris, mirip dengan proses pinning bypass di atas.

 // Code removed at request of Subway leadership

Setelah mengkompilasi ulang dan menginstal aplikasi, saya berhasil mem-proxy permintaan:

Selama penelitian saya, saya tersandung postingan Reddit ini. Rupanya, Subway juga sedang menentukan apakah perangkat pengguna telah di-root. Saya mencari-cari di sumbernya dan mengonfirmasi penyebutan metode deteksi root.

 // Code removed at request of Subway leadership

Ini adalah contoh bagus dari aplikasi yang sangat memperhatikan keamanan, tapi saya tidak begitu yakin dengan alasan di balik proses pemeriksaan root. Meskipun teknik penyematan sertifikat dan verifikasi tanda tangan pada umumnya merupakan ide yang bagus, teknik tersebut hanya sedikit menghambat proses rekayasa balik.