ผู้พัฒนาแอนดรอยด์สามารถปกป้องแอปของตนจากแฮ็กเกอร์ IAP ได้อย่างไร

คู่มือนี้มีไว้สำหรับนักพัฒนาแอป Android ที่มีรายได้จาก IAP และต้องการปกป้องตนเองจากแฮกเกอร์และการซื้อโดยปลอมแปลงผ่านเครื่องมือแฮ็ก มีเครื่องมือแฮ็กที่รู้จักกันดีใน IAP หลายอย่างซึ่งฉันจะไม่แสดงที่นี่ แต่โดยทั่วไปเครื่องมือเหล่านี้จะส่งใบเสร็จการซื้อที่ผิดไปยังแอปของคุณเพื่อให้ผู้ใช้สามารถเพลิดเพลินกับ IAP ฟรี นี่อาจเป็นอะไรก็ได้จากการสมัครสมาชิกรายเดือนกับโทเค็นในเกม

แม้ว่าเครื่องมือแฮ็กเวอร์ชันใหม่จะได้รับการเผยแพร่และความรอบคอบในการรับรู้ถึงการอัปเดตล่าสุดและวิธีการของพวกเขามีความสำคัญมากมีบางสิ่งที่คุณสามารถทำได้เพื่อป้องกันไม่ให้ IAP ของแอปถูกขโมย สิ่งสำคัญที่สุดคือคุณต้องเปิดใช้งานการตรวจสอบ IAP ฝั่งเซิร์ฟเวอร์หลายวิธีซึ่งจะอธิบายรายละเอียดด้านล่างนี้

คู่มือนี้ไม่ได้มีไว้สำหรับมือใหม่ แต่นักพัฒนาแอปที่มีประสบการณ์ซึ่งเข้าใจศัพท์แสงต่างๆในคู่มือนี้

การใช้ปลั๊กอิน Git Repo โดยเฉพาะเพื่อวัตถุประสงค์นี้:

PiracyChecker

เพิ่มพื้นที่เก็บข้อมูลในโครงการ build.gradle ของคุณ:

repositories {

maven {

https://jitpack.io

}

}

และเพิ่มไลบรารีลงในโมดูล build.gradle ของคุณ:

dependencies {

คอมไพล์ 'com.github.javiersantos: PiracyChecker: 1.1'

}

ข้อเสนอแนะ

  • เปิดใช้งาน ProGuard ในเวอร์ชันการผลิตของคุณเสมอ
  • PiracyChecker ควรรวมอยู่ในวิธีการ onCreate ของคุณเพื่อตรวจสอบใบอนุญาตที่ถูกต้องโดยเร็วที่สุด
  • ขอแนะนำให้แสดงกิจกรรมใหม่แทนไดอะล็อกเมื่อใบอนุญาตไม่ถูกต้อง วิธีนี้ทำให้แน่ใจได้ว่ากิจกรรมหลักของแอปเสร็จสิ้น ดูผลการค้นหาในกล่องโต้ตอบหรือกิจกรรมใหม่

ยืนยันการออกใบอนุญาต Google Play (LVL)

Google Play มีบริการอนุญาตให้ใช้สิทธิ์ที่ช่วยให้คุณบังคับใช้นโยบายการอนุญาตให้ใช้สิทธิ์สำหรับแอปพลิเคชันที่คุณเผยแพร่บน Google Play เมื่อใช้ Google Play Licensing แอปพลิเคชันของคุณสามารถค้นหา Google Play เพื่อขอรับสถานะการให้สัญญาอนุญาตสำหรับผู้ใช้ปัจจุบันได้

แอปพลิเคชันที่คุณเผยแพร่ผ่าน Google Play สามารถใช้บริการอนุญาตให้ใช้สิทธิ์ Google Play ไม่มีบัญชีพิเศษหรือการลงทะเบียนเป็นสิ่งจำเป็น

PiracyChecker ใหม่ (นี้)

.enableGooglePlayLicensing (BASE_64_LICENSE_KEY)

.start ();

ในการเรียกรหัสใบอนุญาต BASE64 คุณต้องอัปโหลดแอปของคุณไปยังแผงควบคุมสำหรับนักพัฒนาซอฟต์แวร์ Google Play จากนั้นเข้าถึงแอปของคุณ -> บริการและ APIs

เมื่อใช้การอนุญาตให้ใช้สิทธิ์ของ Google Play คุณควรโทรหา. destroy () ในเมธอด onDestroy () ของกิจกรรมเพื่อหลีกเลี่ยงการใช้งานหลาย ๆ อินสแตนซ์

ยืนยันใบรับรองการลงนามในแอปของคุณ (ลายเซ็น)

นักพัฒนาซอฟต์แวร์ต้องลงนามในแอปพลิเคชันโดยใช้คีย์ส่วนตัว / ใบรับรอง (มีอยู่ในไฟล์. klocker) ก่อนติดตั้งแอปบนอุปกรณ์ของผู้ใช้ ใบรับรองการเซ็นชื่อต้องคงที่ตลอดอายุการใช้งานของแอปและโดยทั่วไปจะมีวันหมดอายุ 25 ปี

ลายเซ็นของแอปจะไม่ทำงานถ้าไฟล์. apk มีการเปลี่ยนแปลงในลักษณะใดก็ตามโดยปกติแล้วแอปพลิเคชันที่ไม่ได้ลงชื่ออาจไม่ได้รับการติดตั้ง เราสามารถจินตนาการว่าผู้บุกรุกนำรหัสการตรวจสอบใบอนุญาตออกเพื่อเปิดใช้คุณลักษณะแอปแบบเต็มรูปแบบโดยไม่ต้องจ่ายเงิน ตัวอย่างที่อันตรายกว่าคือการเปลี่ยน. apk เพื่อรวมมัลแวร์ในแอปที่ถูกต้องเพื่อเก็บข้อมูลผู้ใช้ที่มีความละเอียดอ่อน เพื่อให้มีการเปลี่ยนแปลง. apk ที่จะติดตั้งผู้บุกรุกต้องลาออก

PiracyChecker ใหม่ (นี้)

.enableSigningCertificate (478yYkKAQF + KST8y4ATKvHkYibo =) // ลายเซ็น APK เดิมสำหรับรุ่น PRODUCTION

.start ();

ระวัง!! คุณสามารถดึงข้อมูลลายเซ็นแอปของคุณโดยใช้วิธีการ PiracyCheckerUtils ตรวจสอบว่าคุณได้ลงนาม APK ของคุณโดยใช้ keystore การผลิต (ไม่ใช้ DEBUG) และติดตั้งเวอร์ชันที่คุณต้องการเผยแพร่ จากนั้นคัดลอกลายเซ็นที่ส่งคืนโดยวิธีการนี้ในคอนโซลและวางใน. enableSigningCertificate (YOUR_APK_SIGNATURE)

// วิธีนี้จะพิมพ์ลายเซ็นแอปในคอนโซล

Log.e (SIGNATURE, PiracyCheckerUtils.getAPKSignature (นี้));

ตรวจสอบโปรแกรมติดตั้ง

หากคุณวางแผนที่จะเผยแพร่แอปพลิเคชันเฉพาะในร้านค้าเทคนิคนี้จะบล็อกไม่ให้ติดตั้งแอปโดยใช้ร้านอื่น

ร้านค้าที่สนับสนุน: Google Play, Amazon App Store และ Samsung Galaxy Apps

PiracyChecker ใหม่ (นี้)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

PRO TIP: หากปัญหาเกิดขึ้นกับคอมพิวเตอร์หรือแล็ปท็อป / โน้ตบุ๊คคุณควรลองใช้ซอฟต์แวร์ Reimage Plus ซึ่งสามารถสแกนที่เก็บข้อมูลและแทนที่ไฟล์ที่เสียหายได้ วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่เนื่องจากปัญหาเกิดจากความเสียหายของระบบ คุณสามารถดาวน์โหลด Reimage Plus โดยคลิกที่นี่

.enableInstallerId (InstallerID.GALAXY_APPS)

.start ();

ระวัง!! นี่เป็นเทคนิคที่เข้มงวดเนื่องจากจะทำให้แอปของคุณไม่สามารถติดตั้งโดยใช้ตลาดอื่นหรือติดตั้ง. apk บนอุปกรณ์ได้โดยตรง ไม่แนะนำสำหรับกรณีส่วนใหญ่

ยืนยันการใช้แอปปลอม

หากต้องการตรวจสอบว่าผู้ใช้มีแอปพลิเคชันโจรสลัดหรือไม่คุณสามารถใช้รหัสนี้ได้

จะตรวจสอบ: Lucky Patcher, Uret Patcher, Freedom และ CreeHack

PiracyChecker ใหม่ (นี้)

.enableUnauthorizedAppsCheck ()

.start ();

คุณสามารถปิดกั้นแอปพลิเคชันได้แม้ว่าแอปปลอมแปลงนี้ได้ถูกถอนการติดตั้งแล้ว วิธีนี้จะช่วยป้องกันแอปพลิเคชันไม่ให้ติดตั้งและถอนการติดตั้งแอปพลิเคชันโจรสลัดเพื่อใช้แอปต่อไป ไลบรารีจะบันทึกค่า SharedPreference เพื่อทราบว่ามีการตรวจพบแอพพลิเคชันโจรสลัดหรือไม่

มีสองวิธีในการทำดังนี้

กำหนด SharedPreferences และชื่อของค่าที่คุณต้องการบันทึกผล

PiracyChecker ใหม่ (นี้)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferences, app_unauthorized) // เปลี่ยน app_unauthorized ด้วยค่าของคุณเอง

.start ();

กำหนดชื่อ SharedPreferences และชื่อของค่ากำหนดที่คุณต้องการบันทึกผล

PiracyChecker ใหม่ (นี้)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (license_preferences, app_unauthorized) // เปลี่ยน license_preferences และ app_unauthorized ด้วยค่าของคุณเอง

.start ();

ยืนยันการใช้แอปของร้านค้าอื่น

ถ้าคุณต้องการตรวจสอบว่ามีการติดตั้งแอพพลิเคชันร้านค้าอื่นหรือไม่คุณสามารถใช้รหัสนี้ได้

จะตรวจสอบ: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe และ ACMarket

PiracyChecker ใหม่ (นี้)

.enableStoresCheck ()

.start ();

ตรวจสอบว่าแอปเป็นดีบั๊กหรือไม่

หากแอปของคุณกำลังทำงานอยู่ในโปรแกรมจำลองภายนอกกระบวนการพัฒนาโปรแกรมจะแสดงข้อบ่งชี้ว่ามีคนอื่นที่ไม่ใช่คุณกำลังพยายามวิเคราะห์แอป

PiracyChecker ใหม่ (นี้)

.enableDebugCheck ()

.start ();

ตรวจสอบว่าแอปกำลังทำงานอยู่ในโปรแกรมจำลองหรือไม่

นอกการพัฒนาไม่น่าเป็นไปว่าแอปของคุณควรใช้งานเครื่องจำลองและไม่แนะนำให้เปิดตัวแอปพลิเคชันที่มีการเปิดใช้งานดีบักเนื่องจากช่วยให้คอมพิวเตอร์ที่เชื่อมต่อสามารถเข้าถึงและแก้ปัญหาแอปผ่านทาง Android Debug Bridge

boolean deep = false;

PiracyChecker ใหม่ (นี้)

.enableEmulatorCheck (ลึก)

.start ();

หมายเหตุ: boolean แบบลึกพร้อมทำให้ไลบรารีทำตรวจสอบพิเศษเพื่อตรวจสอบว่าอุปกรณ์นี้เป็นโปรแกรมจำลองหรือไม่ อาจนำไปสู่ความผิดปกติบางอย่างดังนั้นจึงควรใช้สติปัญญาอย่างชาญฉลาด

บันทึกผลการตรวจสอบใบอนุญาตใน SharedPreferences

การบันทึกผลการตรวจสอบใบอนุญาตจะเป็นประโยชน์สำหรับการตรวจสอบสถานะใบอนุญาตโดยไม่ต้องเรียกใช้. start () หลาย ๆ ครั้ง

มีสองวิธีในการทำดังนี้

กำหนด SharedPreferences และชื่อของค่าที่คุณต้องการบันทึกผล

PiracyChecker ใหม่ (นี้)

.saveResultToSharedPreferences (preferences, valid_license) // เปลี่ยน valid_license ด้วยค่าของคุณเอง

.start ();

กำหนดชื่อ SharedPreferences และชื่อของค่ากำหนดที่คุณต้องการบันทึกผล

PiracyChecker ใหม่ (นี้)

.saveResultToSharedPreferences (license_preferences, valid_license) // เปลี่ยน license_preferences และ valid_license ด้วยค่าของคุณเอง

.start ();

การปรับแต่ง

แสดงผลการค้นหาในไดอะล็อกหรือกิจกรรมใหม่

ขอแนะนำให้แสดงกิจกรรมใหม่แทนไดอะล็อกเมื่อใบอนุญาตไม่ถูกต้อง วิธีนี้ทำให้แน่ใจได้ว่ากิจกรรมหลักของแอปเสร็จสิ้น

โดยค่าเริ่มต้นกล่องโต้ตอบไม่สามารถยกเลิกได้จะปรากฏขึ้น

PiracyChecker ใหม่ (นี้)

ใช้การแสดง (Display.ACTIVITY)

.start ();

โดยค่าเริ่มต้นกิจกรรมที่แสดงจะใช้สีของไลบรารี หากต้องการใช้สีดำหลักและสีดำที่กำหนดเองและกำหนดว่ากิจกรรมควรแสดงแถบสถานะปกติหรือเบาให้ใช้:

กับ ColorColors R. (R.color.colorPrimary, R.color.colorPrimaryDark, withLightStatusBar)

นอกจากนี้คุณสามารถกำหนดเลย์เอาท์แบบกำหนดเอง xml สำหรับเนื้อหากิจกรรมนี้โดยใช้:

.withActivityLayout (R.layout.my_custom_layout)

ใช้การโทรกลับที่กำหนดเอง

การเพิ่มการโทรกลับไปยังตัวสร้างช่วยให้คุณสามารถปรับแต่งสิ่งที่จะเกิดขึ้นเมื่อใบอนุญาตได้รับการตรวจสอบและจัดการข้อผิดพลาดในการตรวจสอบใบอนุญาตหากผู้ใช้ไม่ได้รับอนุญาตให้ใช้แอพพลิเค โปรดทราบว่าเมื่อใช้วิธีนี้ คุณต้องทราบการบล็อกแอปจากผู้ใช้ที่ไม่ได้รับอนุญาต

ไลบรารีจะแสดงกล่องโต้ตอบที่ไม่สามารถยกเลิกได้หากผู้ใช้ไม่ได้รับอนุญาตให้ใช้แอปมิฉะนั้นจะไม่มีอะไรเกิดขึ้น

ใช้ตัวสร้างและเพิ่มข้อมูลต่อไปนี้

.callback (PiracyCheckerCallback ใหม่ () {

@แทนที่

สิทธิ์เป็นโมฆะสาธารณะ () {

// ทำบางสิ่งเมื่อผู้ใช้งานได้รับอนุญาตให้ใช้แอพพลิเคชั่น

}

@แทนที่

สาธารณะ void dontAllow (@NonNull ข้อผิดพลาดเกี่ยวกับ PiracyCheckerError, @Nullable PirateApp app) {

// คุณสามารถทำสิ่งที่เฉพาะเจาะจงได้เมื่อผู้ใช้ไม่ได้รับอนุญาตให้ใช้แอพพลิเค

// หรือจัดการข้อผิดพลาดโดยใช้พารามิเตอร์ 'error' ด้วยตัวคุณเอง (ตรวจสอบข้อผิดพลาดที่ {@link PiracyCheckerError})

// นอกจากนี้หากคุณเปิดใช้งานการตรวจสอบปลั๊กอินของ pirate และ / หรือร้านค้าบุคคลที่สามพารามิเตอร์ 'app'

// เป็นแอปที่ตรวจพบในอุปกรณ์ แอปสามารถเป็นโมฆะได้และเมื่อเป็นโมฆะหมายความว่าไม่ได้พบแอปหรือที่เก็บโจรสลัด

// หรือคุณปิดใช้งานการตรวจสอบสำหรับแอปเหล่านั้น

// อนุญาตให้ผู้ใช้ทราบสาเหตุที่เป็นไปได้ว่าเหตุใดใบอนุญาตจึงไม่ถูกต้อง

}

@แทนที่

void onError เป็นสาธารณะ (@NonNull PiracyCheckerError error) {

// ไม่จำเป็นต้องใช้วิธีนี้ / overriden แต่

/ / คุณสามารถทำอะไรบางอย่างที่เฉพาะเจาะจงเมื่อเกิดข้อผิดพลาดในขณะที่ตรวจสอบใบอนุญาต,

// หรือจัดการข้อผิดพลาดโดยใช้พารามิเตอร์ 'error' ด้วยตัวคุณเอง (ตรวจสอบข้อผิดพลาดที่ {@link PiracyCheckerError})

}

})

PRO TIP: หากปัญหาเกิดขึ้นกับคอมพิวเตอร์หรือแล็ปท็อป / โน้ตบุ๊คคุณควรลองใช้ซอฟต์แวร์ Reimage Plus ซึ่งสามารถสแกนที่เก็บข้อมูลและแทนที่ไฟล์ที่เสียหายได้ วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่เนื่องจากปัญหาเกิดจากความเสียหายของระบบ คุณสามารถดาวน์โหลด Reimage Plus โดยคลิกที่นี่

Facebook Twitter Google Plus Pinterest