ผู้พัฒนาแอนดรอยด์สามารถปกป้องแอปของตนจากแฮ็กเกอร์ 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 โดยคลิกที่นี่