Bagaimana pembangun Android dapat melindungi aplikasinya dari penggodam IAP



Cuba Instrumen Kami Untuk Menghapuskan Masalah

Panduan ini adalah untuk pembangun aplikasi Android yang memperoleh pendapatan dari IAP, dan ingin melindungi diri mereka daripada penggodam dan pembelian palsu melalui alat penggodaman. Terdapat beberapa alat penggodaman IAP yang terkenal di luar sana, yang tidak akan saya senaraikan di sini, tetapi pada dasarnya alat ini menghantar resit pembelian palsu ke aplikasi anda untuk membolehkan pengguna menikmati IAP percuma. Ini boleh jadi dari langganan bulanan hingga token dalam permainan.





Walaupun versi baru alat peretasan ini selalu dilepaskan, dan ketekunan untuk terus mengetahui kemas kini dan kaedah terbaru mereka sangat penting, terdapat beberapa perkara yang boleh anda lakukan untuk melindungi IAP aplikasi anda daripada dicuri. Terutama, anda perlu mengaktifkan beberapa kaedah pengesahan IAP sisi pelayan, yang akan saya jelaskan di bawah.



Panduan ini tidak bertujuan untuk pemula, tetapi pembangun aplikasi berpengalaman yang akan memahami pelbagai bahasa dalam panduan ini.

Menggunakan Git Repo Plug-in Khusus untuk tujuan ini:

Pemeriksa Rompak

Tambahkan repositori ke projek anda membina.gradle :



repositori {

maven {

url 'https://jitpack.io'

}

}

Dan tambahkan perpustakaan ke modul anda membina.gradle :

kebergantungan {

menyusun ‘com.github.javiersantos: PiracyChecker: 1.1’

}

Cadangan

  • Sentiasa aktifkan ProGuard dalam siaran pengeluaran anda.
  • PiracyChecker harus disertakan dalam kaedah onCreate anda untuk memeriksa lesen yang sah secepat mungkin.
  • Sebaiknya tunjukkan Aktiviti baru dan bukannya Dialog apabila lesen tidak sah. Dengan cara ini anda memastikan bahawa aktiviti utama aplikasi selesai. Lihat ' Memaparkan hasil dalam Dialog atau Aktiviti baru '.

Sahkan Perlesenan Google Play (LVL)

Google Play menawarkan perkhidmatan pelesenan yang memungkinkan Anda menerapkan kebijakan perlesenan untuk aplikasi yang Anda publikasikan di Google Play. Dengan Perlesenan Google Play, aplikasi anda dapat meminta Google Play untuk mendapatkan status pelesenan untuk pengguna saat ini.

Setiap aplikasi yang anda terbitkan melalui Google Play dapat menggunakan perkhidmatan Perlesenan Google Play. Tidak memerlukan akaun atau pendaftaran khas.

PiracyChecker baru (ini)

.enableGooglePlayLicensing ('BASE_64_LICENSE_KEY')

...

.mulakan ();

Untuk mendapatkan kunci lesen BASE64, aplikasi anda mesti dimuat naik ke Konsol Pembangun Google Play . Kemudian akses ke aplikasi anda -> Perkhidmatan dan API.

Semasa menggunakan Perlesenan Google Play, anda harus memanggil .destroy () dalam kaedah onDestroy () pada Aktiviti anda untuk mengelakkan beberapa kejadian perkhidmatan berjalan.

Sahkan sijil tandatangan aplikasi anda (tandatangan)

Pembangun mesti selalu menandatangani aplikasi dengan kunci / sijil peribadi mereka (terdapat dalam fail .keystore) sebelum aplikasi dapat dipasang pada peranti pengguna. Sijil penandatanganan mesti tetap konsisten sepanjang hayat aplikasi, dan biasanya mempunyai tarikh luput 25 tahun.

Tandatangan aplikasi akan rosak jika .apk diubah dengan cara apa pun - aplikasi yang tidak ditandatangani biasanya tidak dapat dipasang. Kita boleh membayangkan penyerang membuang kod pemeriksaan lesen untuk membolehkan ciri aplikasi penuh tanpa membayar, misalnya. Contoh yang lebih berbahaya ialah mengubah .apk untuk memasukkan perisian hasad dalam aplikasi yang sah untuk mengambil data pengguna yang sensitif. Agar .apk yang diubah dipasang, penyerang mesti meletakkannya.

PiracyChecker baru (ini)

.enableSigningCertificate (“478yYkKAQF + KST8y4ATKvHkYibo =”) // Tandatangan APK asal untuk versi PRODUKSI

...

.mulakan ();

BERHATI-HATI!! Tandatangan aplikasi anda boleh diambil menggunakan kaedah PiracyCheckerUtils. Pastikan bahawa anda telah menandatangani APK menggunakan kedai kunci PRODUCTION anda (tidak menggunakan DEBUG) dan memasang versi yang anda rancangkan untuk diedarkan. Kemudian salin tandatangan yang dikembalikan dengan kaedah ini pada konsol dan tampal di .enableSigningCertificate ('YOUR_APK_SIGNATURE')

// Kaedah ini akan mencetak tandatangan aplikasi anda di konsol

Log.e ('TANDATANGAN', PiracyCheckerUtils.getAPKSignature (ini));

Sahkan pemasang

Sekiranya anda hanya merancang untuk menyebarkan aplikasi di kedai tertentu teknik ini akan menyekat pemasangan aplikasi menggunakan kedai lain.

Kedai yang disokong: Google Play, Amazon App Store dan Samsung Galaxy Apps.

PiracyChecker baru (ini)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.mulakan ();

BERHATI-HATI!! Ini adalah teknik yang sangat ketat kerana akan menghalang aplikasi anda daripada dipasang menggunakan pasaran lain atau secara langsung memasang .apk pada peranti. Tidak digalakkan untuk kebanyakan kes.

Sahkan penggunaan aplikasi lanun

Sekiranya anda ingin memeriksa sama ada pengguna memasang aplikasi lanun, anda boleh menggunakan kod ini.

Ia akan memeriksa: Lucky Patcher, Uret Patcher, Freedom dan CreeHack.

PiracyChecker baru (ini)

.enableUnauthorizedAppsCheck ()

...

.mulakan ();

Anda boleh menyekat aplikasi walaupun aplikasi lanun ini telah dinyahpasang. Ini mengelakkan aplikasi ditambal dan kemudian menyahpasang aplikasi lanun untuk terus menggunakan aplikasi anda. Perpustakaan akan menyimpan nilai SharedPreference untuk mengetahui kapan aplikasi lanun telah dikesan.

Terdapat dua cara untuk melakukan ini:

Tentukan SharedPreferences dan nama pilihan di mana anda mahu menyimpan hasilnya.

PiracyChecker baru (ini)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferences, 'app_unauthorized') // Tukar 'app_unauthorized' dengan nilai anda sendiri

...

.mulakan ();

Tentukan nama SharedPreferences dan nama pilihan di mana anda ingin menyimpan hasilnya.

PiracyChecker baru (ini)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled ('license_preferences', 'app_unauthorized') // Tukar 'license_preferences' dan 'app_unauthorized' dengan nilai anda sendiri

...

.mulakan ();

Sahkan penggunaan aplikasi kedai pihak ketiga

Sekiranya anda ingin memeriksa sama ada pengguna memasang aplikasi kedai pihak ketiga, anda boleh menggunakan kod ini.

Ia akan memeriksa: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe dan ACMarket.

PiracyChecker baru (ini)

.enableStoresCheck ()

...

.mulakan ();

Sahkan jika aplikasi adalah penyusun debug

Sekiranya aplikasi anda berjalan menggunakan emulator di luar proses pengembangan, ini memberi petunjuk bahawa orang lain selain anda cuba menganalisis aplikasi tersebut.

PiracyChecker baru (ini)

.enableDebugCheck ()

...

.mulakan ();

Sahkan sama ada aplikasi sedang dijalankan dalam emulator

Di luar pengembangan, tidak mungkin aplikasi anda berjalan pada emulator, dan melepaskan aplikasi dengan diaktifkan debug tidak dianjurkan karena memungkinkan komputer yang terhubung untuk mengakses dan men-debug aplikasi melalui Android Debug Bridge.

boolean deep = false;

PiracyChecker baru (ini)

.enableEmulatorCheck (dalam)

...

.mulakan ();

Catatan: boolean mendalam dengan membuat perpustakaan melakukan pemeriksaan tambahan untuk mengesan sama ada peranti itu emulator atau tidak. Ini boleh menyebabkan beberapa kerosakan yang pelik, jadi berhati-hatilah ketika menggunakannya.

Simpan hasil pemeriksaan lesen di SharedPreferences

Menyimpan hasil pemeriksaan lesen berguna untuk memeriksa status lesen tanpa memanggil .start () berkali-kali.

Terdapat dua cara untuk melakukan ini:

Tentukan SharedPreferences dan nama pilihan di mana anda mahu menyimpan hasilnya.

PiracyChecker baru (ini)

.saveResultToSharedPreferences (pilihan, 'valid_license') // Tukar 'valid_license' dengan nilai anda sendiri

...

.mulakan ();

Tentukan nama SharedPreferences dan nama pilihan di mana anda ingin menyimpan hasilnya.

PiracyChecker baru (ini)

.saveResultToSharedPreferences ('license_preferences', 'valid_license') // Tukar 'license_preferences' dan 'valid_license' dengan nilai anda sendiri

...

.mulakan ();

Penyesuaian

Memaparkan hasil dalam Dialog atau Aktiviti baru

Sebaiknya tunjukkan Aktiviti baru dan bukannya Dialog apabila lesen tidak sah. Dengan cara ini anda memastikan bahawa aktiviti utama aplikasi selesai.

Secara lalai Dialog yang tidak boleh dibatalkan akan dipaparkan.

PiracyChecker baru (ini)

. paparan (Paparan. AKTIVITI)

...

.mulakan ();

Secara lalai, Aktiviti yang dipaparkan akan menggunakan warna perpustakaan. Untuk menerapkan warna gelap primer dan primer tersuai, dan untuk menentukan apakah aktiviti tersebut mesti menunjukkan bar status normal atau terang, gunakan:

.withActivityColors (R.color.colorPrimary, R.color.colorPrimaryDark, withLightStatusBar)

Anda juga dapat menentukan xml susun atur khusus untuk kandungan aktiviti ini, menggunakan:

.withActivityLayout (R.layout.my_custom_layout)

Menggunakan panggilan balik tersuai

Menambah panggilan balik ke pembangun membolehkan anda menyesuaikan apa yang akan berlaku ketika lesen telah diperiksa dan menguruskan kesalahan pemeriksaan lesen jika pengguna tidak diizinkan untuk menggunakan aplikasi. Perlu diingat bahawa semasa menggunakan kaedah ini anda mesti sedar menyekat aplikasi dari pengguna yang tidak dibenarkan .

Secara lalai, perpustakaan akan memaparkan dialog yang tidak dapat dibatalkan sekiranya pengguna tidak dibenarkan menggunakan aplikasi, jika tidak, tidak akan berlaku.

Gunakan pembina dan tambahkan berikut:

.callback (PiracyCheckerCallback baru () {

@Selamat

kekosongan awam membenarkan () {

// Lakukan sesuatu apabila pengguna dibenarkan menggunakan aplikasi

}

@Selamat

kekosongan awam dontAllow (Ralat @NonNull PiracyCheckerError, @Nullable app PirateApp) {

// Anda boleh melakukan sesuatu yang spesifik apabila pengguna tidak dibenarkan menggunakan aplikasi

// Atau uruskan ralat, menggunakan parameter ‘error’ sendiri (Periksa kesilapan di {@link PiracyCheckerError}).

// Selain itu, jika anda mengaktifkan pemeriksaan aplikasi lanun dan / atau kedai pihak ketiga, param 'app'

// adalah aplikasi yang telah dikesan pada peranti. Aplikasi boleh menjadi batal, dan ketika batal, itu bermakna tidak ada aplikasi atau kedai lanun yang dijumpai,

// atau anda melumpuhkan pemeriksaan untuk aplikasi tersebut.

// Ini membolehkan anda memberitahu pengguna tentang kemungkinan sebab mengapa lesen tidak sah.

}

@Selamat

kekosongan awam onError (@NonNull PiracyCheckerError error) {

// Kaedah ini tidak diperlukan untuk dilaksanakan / diganti tetapi…

// Anda boleh melakukan sesuatu yang spesifik apabila berlaku ralat semasa memeriksa lesen,

// Atau uruskan ralat, menggunakan parameter ‘error’ sendiri (Periksa kesilapan di {@link PiracyCheckerError}).

}

})

6 minit membaca