Android geliştiricileri uygulamalarını IAP bilgisayar korsanlarından nasıl koruyabilir?



Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin

Bu kılavuz, UİSA'lardan gelir elde eden ve bilgisayar korsanlığı araçları aracılığıyla bilgisayar korsanlarından ve dolandırıcılık amaçlı satın almalardan kendilerini korumak isteyen Android uygulama geliştiricileri içindir. Dışarıda, burada listelemeyeceğim birkaç iyi bilinen IAP hackleme aracı var, ancak temelde bu araçlar, kullanıcının ücretsiz IAP'lerden yararlanmasına izin vermek için uygulamanıza yanlış satın alma makbuzları gönderiyor. Bu, aylık aboneliklerden oyun içi jetonlara kadar her şey olabilir.





Bu bilgisayar korsanlığı araçlarının yeni sürümleri her zaman piyasaya sürülürken ve en son güncellemelerinden ve yöntemlerinden haberdar olma gayreti çok önemli olsa da, uygulamalarınızın IAP'lerinin çalınmasını önlemek için yapabileceğiniz birkaç şey vardır. En önemlisi, aşağıda ayrıntılı olarak açıklayacağım birkaç sunucu tarafı IAP doğrulama yöntemini etkinleştirmeniz gerekir.



Bu kılavuz, yeni başlayanlar için değil, bu kılavuzdaki çeşitli dilleri anlayacak deneyimli uygulama geliştiricileri için hazırlanmıştır.

Özellikle bu amaç için bir Git Repo Eklentisi kullanmak:

Korsanlık Kontrolü

Depoyu projenize ekleyin build.gradle :



kod depoları {

uzman {

url “https://jitpack.io”

}

}

Ve kitaplığı modülünüze ekleyin build.gradle :

bağımlılıklar {

'com.github.javiersantos: PiracyChecker: 1.1' derleyin

}

Öneriler

  • Üretim sürümlerinizde daima ProGuard'ı etkinleştirin.
  • PiracyChecker, mümkün olan en kısa sürede geçerli bir lisans olup olmadığını kontrol etmek için onCreate yönteminize dahil edilmelidir.
  • Lisans geçerli olmadığında Diyalog yerine yeni bir Aktivite gösterilmesi önerilir. Bu şekilde, uygulamanın ana etkinliğinin bittiğinden emin olursunuz. Görmek ' Sonuçları bir Diyalogda veya yeni bir Aktivitede görüntüleyin '.

Google Play Lisanslamasını (LVL) Doğrulayın

Google Play, Google Play'de yayınladığınız uygulamalar için lisanslama politikalarını uygulamanıza olanak tanıyan bir lisanslama hizmeti sunar. Google Play Lisanslama ile uygulamanız, mevcut kullanıcının lisans durumunu almak için Google Play'i sorgulayabilir.

Google Play üzerinden yayınladığınız herhangi bir uygulama Google Play Lisanslama hizmetini kullanabilir. Özel bir hesap veya kayıt gerekmez.

yeni PiracyChecker (bu)

.enableGooglePlayLicensing ('BASE_64_LICENSE_KEY')

...

.Başlat();

BASE64 lisans anahtarınızı alabilmek için uygulamanızın şuraya yüklenmesi gerekir: Google Play Geliştirici Konsolu . Ardından uygulamanıza -> Hizmetler ve API'lere erişin.

Google Play Lisanslamasını kullanırken, hizmetin birden fazla örneğinin çalışmasını önlemek için Aktivitenizin onDestroy () yönteminde .destroy () 'u çağırmanız gerekir.

Uygulamanızın imzalama sertifikasını (imza) doğrulayın

Uygulamanın kullanıcı cihazlarına yüklenebilmesi için geliştiriciler her zaman kendi özel anahtarları / sertifikaları (bir .keystore dosyasında bulunur) ile uygulamaları imzalamalıdır. İmza sertifikası, uygulamanın ömrü boyunca tutarlı kalmalı ve genellikle 25 yıllık bir son kullanma tarihine sahip olmalıdır.

.Apk herhangi bir şekilde değiştirilirse uygulama imzası bozulur - imzasız uygulamalar genellikle yüklenemez. Örneğin, tüm uygulama özelliklerini ödeme yapmadan etkinleştirmek için lisans kontrol kodunu kaldıran bir saldırgan hayal edebiliriz. Daha tehlikeli bir örnek, hassas kullanıcı verilerini toplamak için .apk dosyasını meşru bir uygulamaya kötü amaçlı yazılım eklemek için değiştirmektir. Değiştirilen .apk dosyasının yüklenmesi için saldırganın istifa etmesi gerekir.

yeni PiracyChecker (bu)

.enableSigningCertificate ('478yYkKAQF + KST8y4ATKvHkYibo =') // PRODUCTION sürümü için orijinal APK imzası

...

.Başlat();

DİKKATLİ OL!! Uygulama imzanız bir PiracyCheckerUtils yöntemi kullanılarak alınabilir. APK'nızı ÜRETİM anahtar deponuzu kullanarak (DEBUG'ı kullanmadan) imzaladığınızdan ve dağıtmayı planladığınız sürümü yüklediğinizden emin olun. Ardından, bu yöntemle döndürülen imzayı konsolda kopyalayın ve .enableSigningCertificate ('YOUR_APK_SIGNATURE') içine yapıştırın.

// Bu yöntem, uygulama imzanızı konsolda yazdırır

Log.e ('SIGNATURE', PiracyCheckerUtils.getAPKSignature (bu));

Yükleyiciyi doğrulayın

Uygulamayı yalnızca belirli bir mağazada dağıtmayı planlıyorsanız, bu teknik, uygulamanın başka bir mağazayı kullanarak yüklenmesini engeller.

Desteklenen mağazalar: Google Play, Amazon App Store ve Samsung Galaxy Apps.

yeni PiracyChecker (bu)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.Başlat();

DİKKATLİ OL!! Bu gerçekten kısıtlayıcı bir tekniktir çünkü uygulamanızın başka bir pazar kullanılarak yüklenmesini veya .apk'yi cihaza doğrudan yüklemesini engelleyecektir. Çoğu durumda tavsiye edilmez.

Korsan uygulamaların kullanımını doğrulayın

Kullanıcının korsan uygulamalarının yüklü olup olmadığını kontrol etmek istiyorsanız, bu kodu kullanabilirsiniz.

Kontrol edecek: Lucky Patcher, Uret Patcher, Freedom ve CreeHack.

yeni PiracyChecker (bu)

.enableUnauthorizedAppsCheck ()

...

.Başlat();

Bu korsan uygulamaları kaldırılmış olsa bile uygulamayı engelleyebilirsiniz. Bu, uygulamanın yamalanmasını engeller ve ardından uygulamanızı kullanmaya devam etmek için korsan uygulamasını kaldırır. Kitaplık, bir korsan uygulamasının ne zaman tespit edildiğini bilmek için bir SharedPreference değeri kaydedecektir.

Bunu yapmanın iki yolu vardır:

Sonucu kaydetmek istediğiniz Paylaşılan Tercihleri ​​ve tercihin adını tanımlayın.

yeni PiracyChecker (bu)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (tercihler, 'app_unauthorized') // 'app_unauthorized' değerini kendi değerinizle değiştirin

...

.Başlat();

Sonucu kaydetmek istediğiniz SharedPreferences adını ve tercihin adını tanımlayın.

yeni PiracyChecker (bu)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled ('license_preferences', 'app_unauthorized') // 'license_preferences' ve 'app_unauthorized' değerlerini kendi değerinizle değiştirin

...

.Başlat();

Üçüncü taraf mağaza uygulamalarının kullanımını doğrulayın

Kullanıcının üçüncü taraf mağaza uygulamalarının yüklü olup olmadığını kontrol etmek istiyorsanız bu kodu kullanabilirsiniz.

Şunları kontrol edecektir: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe ve ACMarket.

yeni PiracyChecker (bu)

.enableStoresCheck ()

...

.Başlat();

Uygulamanın bir hata ayıklama derlemesi olup olmadığını doğrulayın

Uygulamanız, geliştirme sürecinin dışında bir emülatörde çalışıyorsa, sizin dışınızda başka birinin uygulamayı analiz etmeye çalıştığını gösterir.

yeni PiracyChecker (bu)

.enableDebugCheck ()

...

.Başlat();

Uygulamanın bir emülatörde çalıştırılıp çalıştırılmadığını doğrulayın

Geliştirme dışında, uygulamanızın bir emülatörde çalışması pek olası değildir ve hata ayıklama özelliği etkinleştirilmiş uygulamaları yayınlamak, bağlı bilgisayarların Android Hata Ayıklama Köprüsü aracılığıyla uygulamaya erişmesine ve bu uygulamada hata ayıklamasına olanak tanıdığından önerilmez.

boolean derin = yanlış;

yeni PiracyChecker (bu)

.enableEmulatorCheck (derin)

...

.Başlat();

Not: derin boole, kitaplığın aygıtın bir öykünücü olup olmadığını saptamak için fazladan kontroller yapmasını sağlar. Bazı tuhaf kazalara neden olabilir, bu yüzden onu kullanırken akıllıca olun.

Lisans kontrolünün sonucunu SharedPreferences'a kaydedin

Lisans kontrolünün sonucunu kaydetmek, birden çok kez .start () öğesini çağırmadan lisans durumunu kontrol etmek için kullanışlıdır.

Bunu yapmanın iki yolu vardır:

Sonucu kaydetmek istediğiniz Paylaşılan Tercihleri ​​ve tercihin adını tanımlayın.

yeni PiracyChecker (bu)

.saveResultToSharedPreferences (tercihler, 'valid_license') // 'valid_license' değerini kendi değerinizle değiştirin

...

.Başlat();

Sonucu kaydetmek istediğiniz SharedPreferences adını ve tercihin adını tanımlayın.

yeni PiracyChecker (bu)

.saveResultToSharedPreferences ('license_preferences', 'valid_license') // 'license_preferences' ve 'valid_license' değerlerini kendi değerinizle değiştirin

...

.Başlat();

Özelleştirmeler

Sonuçları bir Diyalogda veya yeni bir Aktivitede görüntüleyin

Lisans geçerli olmadığında Diyalog yerine yeni bir Aktivite gösterilmesi önerilir. Bu şekilde, uygulamanın ana etkinliğinin bittiğinden emin olursunuz.

Varsayılan olarak, iptal edilemez bir İletişim Kutusu görüntülenecektir.

yeni PiracyChecker (bu)

.display (Display.ACTIVITY)

...

.Başlat();

Varsayılan olarak, görüntülenen Etkinlik kitaplık renklerini kullanacaktır. Özel bir birincil ve birincil koyu renk uygulamak ve etkinliğin normal mi yoksa açık durum çubuğu mu göstereceğini belirlemek için şunu kullanın:

.withActivityColors (R.color.colorPrimary, R.color.colorPrimaryDark, LightStatusBar ile)

Ayrıca, bu aktivite içeriği için aşağıdakileri kullanarak özel bir xml düzeni tanımlayabilirsiniz:

.withActivityLayout (R.layout.my_custom_layout)

Özel geri aramaları kullanma

Oluşturucuya geri arama eklemek, lisans kontrol edildiğinde ne olacağını özelleştirmenize ve kullanıcının uygulamayı kullanmasına izin verilmiyorsa lisans denetimi hatalarını yönetmenize olanak tanır. Bu yöntemi kullanırken şunu unutmayın: uygulamayı yetkisiz kullanıcılardan engellediğinizi bilmelisiniz .

Varsayılan olarak, kullanıcının uygulamayı kullanmasına izin verilmiyorsa kitaplık iptal edilemez bir iletişim kutusu görüntüler, aksi takdirde hiçbir şey olmaz.

Oluşturucuyu kullanın ve aşağıdakileri ekleyin:

.callback (yeni PiracyCheckerCallback () {

@Override

public void allow () {

// Kullanıcının uygulamayı kullanmasına izin verildiğinde bir şeyler yapın

}

@Override

public void dontAllow (@NonNull PiracyCheckerError hatası, @Nullable PirateApp uygulaması) {

// Kullanıcının uygulamayı kullanmasına izin verilmediğinde belirli bir şey yapabilirsiniz

// Veya 'hata' parametresini kullanarak hatayı kendiniz yönetin (Hataları {@link PiracyCheckerError} adresinde kontrol edin).

// Ek olarak, korsan uygulamaların ve / veya üçüncü taraf mağazalarının kontrolünü etkinleştirdiyseniz, 'uygulama' parametresi

// cihazda tespit edilen uygulamadır. Uygulama boş olabilir ve boş olduğunda, korsan uygulama veya mağaza bulunmadığı anlamına gelir.

// veya bu uygulamalar için kontrolü devre dışı bıraktınız.

// Bu, kullanıcılara lisansın geçersiz olmasının olası nedenlerini bildirmenizi sağlar.

}

@Override

public void onError (@NonNull PiracyCheckerError hatası) {

// Bu yöntemin uygulanması / geçersiz kılınması gerekli değil ama…

// Lisansı kontrol ederken bir hata oluştuğunda belirli bir şey yapabilirsiniz,

// Veya 'hata' parametresini kullanarak hatayı kendiniz yönetin (Hataları {@link PiracyCheckerError} adresinde kontrol edin).

}

})

6 dakika okundu