كيف يمكن لمطوري Android حماية تطبيقاتهم من متسللي IAP



جرب أداة القضاء على المشاكل

هذا الدليل مخصص لمطوري تطبيقات Android الذين يكسبون دخلًا من IAPs ، ويريدون حماية أنفسهم من المتسللين وعمليات الشراء الاحتيالية عبر أدوات القرصنة. هناك العديد من أدوات القرصنة IAP المعروفة ، والتي لن أدرجها هنا ، ولكن بشكل أساسي ترسل هذه الأدوات إيصالات شراء خاطئة إلى تطبيقك للسماح للمستخدم بالاستمتاع بـ IAPs المجانية. يمكن أن يكون هذا أي شيء من الاشتراكات الشهرية إلى الرموز المميزة داخل اللعبة.





بينما يتم دائمًا إصدار إصدارات جديدة من أدوات القرصنة هذه ، ومن المهم للغاية الحرص على البقاء على دراية بآخر التحديثات والأساليب ، فهناك بعض الأشياء التي يمكنك القيام بها لحماية تطبيقاتك من IAPs من السرقة. وعلى وجه الخصوص ، تحتاج إلى تمكين عدة طرق للتحقق من IAP من جانب الخادم ، والتي سأفصلها أدناه.



هذا الدليل ليس مخصصًا للمبتدئين ، ولكن لمطوري التطبيقات ذوي الخبرة الذين سيفهمون اللغات المختلفة في هذا الدليل.

استخدام مكون Git Repo الإضافي خصيصًا لهذا الغرض:

مدقق القرصنة

أضف المستودع إلى مشروعك بناء :



مستودعات {

مخضرم {

عنوان url 'https://jitpack.io'

}

}

وأضف المكتبة إلى وحدتك بناء :

التبعيات {

تجميع 'com.github.javiersantos: PiracyChecker: 1.1'

}

التوصيات

  • قم دائمًا بتمكين ProGuard في إصدارات الإنتاج الخاصة بك.
  • يجب تضمين PiracyChecker في طريقة onCreate الخاصة بك للتحقق من وجود ترخيص صالح في أقرب وقت ممكن.
  • يوصى بإظهار نشاط جديد بدلاً من مربع حوار عندما يكون الترخيص غير صالح. بهذه الطريقة تتأكد من انتهاء النشاط الرئيسي للتطبيق. نرى ' عرض النتائج في مربع حوار أو نشاط جديد '.

تحقق من ترخيص Google Play (LVL)

يقدم Google Play خدمة ترخيص تتيح لك فرض سياسات الترخيص للتطبيقات التي تنشرها على Google Play. باستخدام ترخيص Google Play ، يمكن لتطبيقك الاستعلام عن Google Play للحصول على حالة الترخيص للمستخدم الحالي.

يمكن لأي تطبيق تنشره من خلال Google Play استخدام خدمة ترخيص Google Play. لا حاجة لحساب خاص أو التسجيل.

جديد PiracyChecker (هذا)

.enableGooglePlayLicensing (“BASE_64_LICENSE_KEY”)

...

.بداية()؛

لاسترداد مفتاح ترخيص BASE64 الخاص بك ، يجب تحميل التطبيق إلى ملف وحدة تحكم مطوري Google Play . ثم الوصول إلى التطبيق الخاص بك -> الخدمات وواجهات برمجة التطبيقات.

عند استخدام ترخيص Google Play ، يجب عليك استدعاء .destroy () في طريقة onDestroy () لنشاطك لتجنب حالات متعددة من الخدمة قيد التشغيل.

تحقق من شهادة توقيع التطبيق الخاص بك (التوقيع)

يجب على المطورين دائمًا توقيع التطبيقات باستخدام المفتاح الخاص / الشهادة (المضمنة في ملف .keystore) قبل أن يتم تثبيت التطبيق على أجهزة المستخدم. يجب أن تظل شهادة التوقيع متسقة طوال عمر التطبيق ، وعادة ما يكون لها تاريخ انتهاء صلاحية يبلغ 25 عامًا.

سيتم كسر توقيع التطبيق إذا تم تغيير .apk بأي شكل من الأشكال - لا يمكن عادةً تثبيت التطبيقات غير الموقعة. يمكننا تخيل مهاجم يزيل رمز التحقق من الترخيص لتمكين ميزات التطبيق الكاملة دون دفع ، على سبيل المثال. من الأمثلة الأكثر خطورة على ذلك تغيير ملف apk لتضمين برامج ضارة في تطبيق شرعي لجمع بيانات المستخدم الحساسة. من أجل تثبيت ملف apk. الذي تم تغييره ، يجب على المهاجم الاستقالة منه.

جديد PiracyChecker (هذا)

.enableSigningCertificate (“478yYkKAQF + KST8y4ATKvHkYibo =”) // توقيع APK الأصلي لإصدار PRODUCTION

...

.بداية()؛

كن حذرا!! يمكن استرداد توقيع التطبيق الخاص بك باستخدام طريقة PiracyCheckerUtils. تأكد من توقيعك على ملف APK باستخدام مخزن مفاتيح PRODUCTION الخاص بك (وليس باستخدام DEBUG one) وتثبيت الإصدار الذي تخطط لتوزيعه. ثم انسخ التوقيع الذي تم إرجاعه بواسطة هذه الطريقة على وحدة التحكم والصقه في .enableSigningCertificate (“YOUR_APK_SIGNATURE”)

// ستطبع هذه الطريقة توقيع التطبيق الخاص بك في وحدة التحكم

Log.e ('التوقيع' ، PiracyCheckerUtils.getAPKS التوقيع (هذا)) ؛

تحقق من المثبت

إذا كنت تخطط فقط لتوزيع التطبيق على متجر معين ، فستمنع هذه التقنية من تثبيت التطبيق باستخدام أي متجر آخر.

المتاجر المدعومة: Google Play و Amazon App Store و Samsung Galaxy Apps.

جديد PiracyChecker (هذا)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.بداية()؛

كن حذرا!! هذه تقنية مقيدة حقًا لأنها ستمنع تثبيت تطبيقك باستخدام سوق آخر أو تثبيت .apk مباشرة على الجهاز. لا ينصح به في معظم الحالات.

تحقق من استخدام تطبيقات القرصنة

إذا كنت تريد التحقق مما إذا كان المستخدم لديه تطبيقات قرصنة مثبتة ، فيمكنك استخدام هذا الرمز.

سيتحقق من: Lucky Patcher و Uret Patcher و Freedom و CreeHack.

جديد PiracyChecker (هذا)

.enableUnauthorizedAppsCheck ()

...

.بداية()؛

يمكنك حظر التطبيق حتى عندما يتم إلغاء تثبيت هذه التطبيقات المقرصنة. هذا يمنع التطبيق من أن يتم تصحيحه ثم إلغاء تثبيت تطبيق القرصان من أجل الاستمرار في استخدام التطبيق الخاص بك. ستحفظ المكتبة قيمة SharedPreference لمعرفة متى تم اكتشاف تطبيق قرصنة.

هناك طريقتان للقيام بذلك:

حدد SharedPreferences واسم التفضيل حيث تريد حفظ النتيجة.

جديد PiracyChecker (هذا)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (التفضيلات ، 'app_unauthorized') // تغيير 'app_unauthorized' بقيمتك الخاصة

...

.بداية()؛

حدد اسم SharedPreferences واسم التفضيل الذي تريد حفظ النتيجة فيه.

جديد PiracyChecker (هذا)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (“license_preferences” ، “app_unauthorized”) // تغيير “License_preferences” و “app_unauthorized” بقيمتك الخاصة

...

.بداية()؛

تحقق من استخدام تطبيقات متجر الطرف الثالث

إذا كنت تريد التحقق مما إذا كان المستخدم لديه تطبيقات متجر طرف ثالث مثبتة ، فيمكنك استخدام هذا الرمز.

سيتحقق من: Aptoide و BlackMart و Mobogenie و 1Mobile و GetApk و GetJar و SlideMe و ACMarket.

جديد PiracyChecker (هذا)

.enableStoresCheck ()

...

.بداية()؛

تحقق مما إذا كان التطبيق عبارة عن إصدار تصحيح

إذا كان تطبيقك يعمل على محاكي خارج عملية التطوير ، فهذا يشير إلى أن شخصًا آخر غيرك يحاول تحليل التطبيق.

جديد PiracyChecker (هذا)

.enableDebugCheck ()

...

.بداية()؛

تحقق مما إذا كان التطبيق قيد التشغيل في محاكي

بعيدًا عن التطوير ، من غير المحتمل أن يعمل تطبيقك على محاكي ، ولا يُنصح بإصدار التطبيقات مع تمكين إمكانية تصحيح الأخطاء لأنه يسمح لأجهزة الكمبيوتر المتصلة بالوصول إلى التطبيق وتصحيح أخطائه عبر Android Debug Bridge.

عميقة منطقية = خطأ ؛

جديد PiracyChecker (هذا)

.enableEmulatorCheck (عميق)

...

.بداية()؛

ملحوظة: المنطقية العميقة مع جعل المكتبة تجري فحوصات إضافية لاكتشاف ما إذا كان الجهاز محاكيًا أم لا. يمكن أن يؤدي إلى بعض الحوادث الغريبة ، لذا كن حكيمًا عند استخدامه.

احفظ نتيجة التحقق من الترخيص في SharedPreferences

يعد حفظ نتيجة فحص الترخيص مفيدًا للتحقق من حالة الترخيص دون استدعاء .start () عدة مرات.

هناك طريقتان للقيام بذلك:

حدد SharedPreferences واسم التفضيل حيث تريد حفظ النتيجة.

جديد PiracyChecker (هذا)

.saveResultToSharedPreferences (التفضيلات ، 'valid_license') // تغيير 'valid_license' بقيمتك الخاصة

...

.بداية()؛

حدد اسم SharedPreferences واسم التفضيل الذي تريد حفظ النتيجة فيه.

جديد PiracyChecker (هذا)

.saveResultToSharedPreferences (“license_preferences” ، “valid_license”) // تغيير “License_preferences” و “valid_license” بقيمتك الخاصة

...

.بداية()؛

التخصيصات

عرض النتائج في مربع حوار أو نشاط جديد

يوصى بإظهار نشاط جديد بدلاً من مربع حوار عندما يكون الترخيص غير صالح. بهذه الطريقة تتأكد من انتهاء النشاط الرئيسي للتطبيق.

سيتم عرض مربع حوار غير قابل للإلغاء افتراضيًا.

جديد PiracyChecker (هذا)

.display (Display.ACTIVITY)

...

.بداية()؛

بشكل افتراضي ، سيستخدم النشاط المعروض ألوان المكتبة. لتطبيق لون داكن أساسي وأساسي مخصص ، ولتحديد ما إذا كان يجب أن يُظهر النشاط شريط حالة عادي أو فاتح ، استخدم:

.withActivityColors (R.color.color الأساسي ، R. color.color الأساسي Dark Dark ، مع LightStatusBar)

يمكنك أيضًا تحديد تنسيق xml مخصص لمحتوى النشاط هذا ، باستخدام:

.withActivityLayout (R.layout.my_custom_layout)

استخدام عمليات الاسترجاعات المخصصة

تتيح لك إضافة رد اتصال إلى المنشئ تخصيص ما سيحدث عند التحقق من الترخيص وإدارة أخطاء التحقق من الترخيص إذا لم يُسمح للمستخدم باستخدام التطبيق. ضع في اعتبارك أنه عند استخدام هذه الطريقة يجب أن تكون على دراية بحظر التطبيق من المستخدمين غير المصرح لهم .

بشكل افتراضي ، ستعرض المكتبة مربع حوار غير قابل للإلغاء إذا لم يُسمح للمستخدم باستخدام التطبيق ، وإلا فلن يحدث شيء.

استخدم المنشئ وأضف ما يلي:

.callback (جديد PiracyCheckerCallback () {

@تجاوز

باطل عام يسمح () {

// افعل شيئًا عندما يُسمح للمستخدم باستخدام التطبيق

}

@تجاوز

public void dontAllow (NonNull PiracyCheckerError خطأ ،Nullable PirateApp app) {

// يمكنك إما القيام بشيء محدد عندما لا يُسمح للمستخدم باستخدام التطبيق

// أو قم بإدارة الخطأ بنفسك باستخدام معلمة 'error' (تحقق من الأخطاء على {link PiracyCheckerError}).

// بالإضافة إلى ذلك ، إذا قمت بتمكين التحقق من التطبيقات المقرصنة و / أو متاجر الطرف الثالث ، فإن معلمة 'التطبيق'

// هو التطبيق الذي تم اكتشافه على الجهاز. يمكن أن يكون التطبيق فارغًا ، وعندما يكون فارغًا ، فهذا يعني أنه لم يتم العثور على تطبيق أو متجر مقرصن ،

// أو قمت بتعطيل التحقق من هذه التطبيقات.

// يتيح لك هذا السماح للمستخدمين بمعرفة الأسباب المحتملة لعدم صلاحية الترخيص.

}

@تجاوز

public void onError (NonNull PiracyCheckerError خطأ) {

// هذه الطريقة غير مطلوبة ليتم تنفيذها / تجاوزها ولكن ...

// يمكنك إما القيام بشيء محدد عند حدوث خطأ أثناء التحقق من الترخيص ،

// أو قم بإدارة الخطأ بنفسك باستخدام معلمة 'error' (تحقق من الأخطاء على {link PiracyCheckerError}).

}

})

6 دقائق للقراءة