Cách nhà phát triển Android có thể bảo vệ ứng dụng của họ khỏi tin tặc IAP

Hướng dẫn này dành cho nhà phát triển ứng dụng Android có thu nhập từ IAP và muốn tự bảo vệ mình khỏi tin tặc và mua hàng gian lận qua các công cụ hack. Có một số công cụ hack IAP nổi tiếng ở đó, mà tôi sẽ không liệt kê ở đây, nhưng về cơ bản những công cụ này gửi biên nhận mua sai cho ứng dụng của bạn để cho phép người dùng tận hưởng IAP miễn phí. Đây có thể là bất kỳ thứ gì từ đăng ký hàng tháng tới mã thông báo trong trò chơi.

Mặc dù các phiên bản mới của các công cụ hack này luôn được phát hành và sự cẩn trọng trong việc cập nhật các bản cập nhật và phương pháp mới nhất của họ là rất quan trọng, có một vài điều bạn có thể làm để bảo vệ các ứng dụng IAP khỏi bị đánh cắp. Đáng chú ý nhất, bạn cần phải kích hoạt một số phương pháp xác minh IAP phía máy chủ, mà tôi sẽ trình bày chi tiết bên dưới.

Hướng dẫn này không dành cho người mới, nhưng các nhà phát triển ứng dụng có kinh nghiệm, những người sẽ hiểu được các biệt ngữ khác nhau trong hướng dẫn này.

Sử dụng Plug-in Git Repo dành riêng cho mục đích này:

PiracyChecker

Thêm kho lưu trữ vào dự án build.gradle của bạn:

kho lưu trữ {

maven {

url https://jitpack.io

}

}

Và thêm thư viện vào mô-đun build.gradle của bạn:

phụ thuộc {

biên dịch 'com.github.javiersantos: PiracyChecker: 1.1'

}

khuyến nghị

  • Luôn bật ProGuard trong bản phát hành sản phẩm của bạn.
  • PiracyChecker nên được bao gồm trong phương pháp onCreate của bạn để kiểm tra giấy phép hợp lệ càng sớm càng tốt.
  • Bạn nên hiển thị Hoạt động mới thay vì Hộp thoại khi giấy phép không hợp lệ. Bằng cách này, bạn đảm bảo rằng hoạt động chính của ứng dụng đã hoàn tất. Xem Hiển thị kết quả trong Hộp thoại hoặc Hoạt động mới.

Xác minh Cấp phép của Google Play (LVL)

Google Play cung cấp dịch vụ cấp phép cho phép bạn thực thi chính sách cấp phép cho các ứng dụng mà bạn xuất bản trên Google Play. Với Google Play Licensing, ứng dụng của bạn có thể truy vấn Google Play để có được trạng thái cấp phép cho người dùng hiện tại.

Mọi ứng dụng bạn xuất bản qua Google Play đều có thể sử dụng dịch vụ Cấp phép của Google Play. Không cần đăng ký hoặc tài khoản đặc biệt.

PiracyChecker mới (điều này)

.enableGooglePlayLicensing (BASE_64_LICENSE_KEY)

.khởi đầu();

Để truy xuất khóa cấp phép BASE64, ứng dụng của bạn phải được tải lên Bảng điều khiển dành cho nhà phát triển trên Google Play. Sau đó truy cập vào ứng dụng của bạn -> Dịch vụ và API.

Khi sử dụng Google Play Cấp phép, bạn nên gọi .destroy () trong phương thức onDestroy () của Hoạt động để tránh nhiều trường hợp dịch vụ đang chạy.

Xác minh chứng chỉ ký của ứng dụng của bạn (chữ ký)

Nhà phát triển phải luôn ký các ứng dụng bằng khóa / chứng chỉ riêng tư của họ (chứa trong tệp .keystore) trước khi ứng dụng có thể được cài đặt trên thiết bị của người dùng. Giấy chứng nhận ký kết phải duy trì tính nhất quán trong suốt vòng đời của ứng dụng và thường có hạn sử dụng là 25 năm.

Chữ ký ứng dụng sẽ bị hỏng nếu .apk bị thay đổi theo bất kỳ cách nào - không thể cài đặt ứng dụng chưa ký. Chúng ta có thể tưởng tượng một kẻ tấn công loại bỏ mã kiểm tra giấy phép để cho phép các tính năng ứng dụng đầy đủ mà không phải trả tiền, ví dụ. Một ví dụ nguy hiểm hơn sẽ thay đổi .apk để bao gồm phần mềm độc hại trong ứng dụng hợp pháp để thu thập dữ liệu người dùng nhạy cảm. Để thay đổi .apk được cài đặt, kẻ tấn công phải từ chức nó.

PiracyChecker mới (điều này)

.enableSigningCertificate (478yYkKAQF + KST8y4ATKvHkYibo =) // Chữ ký APK gốc cho phiên bản SẢN XUẤT

.khởi đầu();

HÃY CẨN THẬN!! Chữ ký ứng dụng của bạn có thể được truy xuất bằng phương pháp PiracyCheckerUtils. Đảm bảo rằng bạn đã ký APK của mình bằng cách sử dụng kho khóa PRODUCTION (không sử dụng khóa DEBUG) và đã cài đặt phiên bản bạn định phân phối. Sau đó sao chép chữ ký được trả về bởi phương thức này trên bàn điều khiển và dán vào .enableSigningCertificate (YOUR_APK_SIGNATURE)

// Phương thức này sẽ in chữ ký ứng dụng của bạn trong bảng điều khiển

Log.e (SIGNATURE, PiracyCheckerUtils.getAPKSignature (điều này));

Xác minh trình cài đặt

Nếu bạn chỉ định phân phối ứng dụng trên một cửa hàng cụ thể, kỹ thuật này sẽ chặn cài đặt ứng dụng bằng bất kỳ cửa hàng nào khác.

Các cửa hàng được hỗ trợ: Google Play, Amazon App Store và Samsung Galaxy Apps.

PiracyChecker mới (điều này)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây

.enableInstallerId (InstallerID.GALAXY_APPS)

.khởi đầu();

HÃY CẨN THẬN!! Đây là một kỹ thuật thực sự hạn chế vì nó sẽ chặn ứng dụng của bạn không được cài đặt bằng cách sử dụng một thị trường khác hoặc cài đặt trực tiếp .apk trên thiết bị. Nó không được khuyến khích cho hầu hết các trường hợp.

Xác minh việc sử dụng các ứng dụng cướp biển

Nếu bạn muốn kiểm tra xem người dùng đã cài đặt ứng dụng cướp biển chưa, bạn có thể sử dụng mã này.

Nó sẽ kiểm tra: Lucky Patcher, Uret Patcher, Freedom và CreeHack.

PiracyChecker mới (điều này)

.enableUnauthorizedAppsCheck ()

.khởi đầu();

Bạn có thể chặn ứng dụng ngay cả khi ứng dụng cướp biển này đã được gỡ cài đặt. Điều này ngăn ứng dụng bị vá và sau đó gỡ cài đặt ứng dụng cướp biển để tiếp tục sử dụng ứng dụng của bạn. Thư viện sẽ lưu một giá trị SharedPreference để biết khi nào một ứng dụng cướp biển đã được phát hiện.

Có hai cách để làm điều này:

Xác định SharedPreferences và tên của tùy chọn mà bạn muốn lưu kết quả.

PiracyChecker mới (điều này)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferences, app_unauthorized) // Thay đổi app_unauthorized bằng giá trị của riêng bạn

.khởi đầu();

Xác định tên SharedPreferences và tên của tùy chọn mà bạn muốn lưu kết quả.

PiracyChecker mới (điều này)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (license_preferences, app_unauthorized) // Thay đổi license_preferences và app_unauthorized bằng giá trị của riêng bạn

.khởi đầu();

Xác minh việc sử dụng ứng dụng của cửa hàng bên thứ ba

Nếu bạn muốn kiểm tra xem người dùng đã cài đặt ứng dụng cửa hàng của bên thứ ba chưa, bạn có thể sử dụng mã này.

Nó sẽ kiểm tra: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe và ACMarket.

PiracyChecker mới (điều này)

.enableStoresCheck ()

.khởi đầu();

Xác minh xem ứng dụng có phải là bản dựng gỡ lỗi không

Nếu ứng dụng của bạn đang chạy trên trình mô phỏng bên ngoài quá trình phát triển, ứng dụng sẽ cho biết một người nào đó khác với bạn đang cố gắng phân tích ứng dụng.

PiracyChecker mới (điều này)

.enableDebugCheck ()

.khởi đầu();

Xác minh xem ứng dụng có đang chạy trong trình mô phỏng hay không

Bên ngoài phát triển, không có khả năng ứng dụng của bạn nên chạy trên trình mô phỏng và việc phát hành ứng dụng có khả năng gỡ lỗi được khuyến khích vì nó cho phép các máy tính được kết nối truy cập và gỡ lỗi ứng dụng thông qua Cầu gỡ lỗi Android.

boolean deep = false;

PiracyChecker mới (điều này)

.enableEmulatorCheck (sâu)

.khởi đầu();

Lưu ý: các boolean sâu với làm cho thư viện làm kiểm tra thêm để phát hiện nếu thiết bị là một trình giả lập hay không. Nó có thể dẫn đến một số tai nạn lạ, vì vậy hãy khôn ngoan khi sử dụng nó.

Lưu kết quả kiểm tra giấy phép trong SharedPreferences

Việc lưu kết quả kiểm tra giấy phép rất hữu ích để kiểm tra trạng thái giấy phép mà không cần gọi .start () nhiều lần.

Có hai cách để làm điều này:

Xác định SharedPreferences và tên của tùy chọn mà bạn muốn lưu kết quả.

PiracyChecker mới (điều này)

.saveResultToSharedPreferences (preferences, valid_license) // Thay đổi valid_license bằng giá trị của riêng bạn

.khởi đầu();

Xác định tên SharedPreferences và tên của tùy chọn mà bạn muốn lưu kết quả.

PiracyChecker mới (điều này)

.saveResultToSharedPreferences (license_preferences, valid_license) // Thay đổi license_preferences và valid_license bằng giá trị của riêng bạn

.khởi đầu();

Tùy chỉnh

Hiển thị kết quả trong Hộp thoại hoặc Hoạt động mới

Bạn nên hiển thị Hoạt động mới thay vì Hộp thoại khi giấy phép không hợp lệ. Bằng cách này, bạn đảm bảo rằng hoạt động chính của ứng dụng đã hoàn tất.

Theo mặc định, một Hộp thoại không thể hủy được hiển thị.

PiracyChecker mới (điều này)

.display (Display.ACTIVITY)

.khởi đầu();

Theo mặc định, Activity được hiển thị sẽ sử dụng màu thư viện. Để áp dụng màu tối chính và tùy chỉnh chính và để xác định xem hoạt động có hiển thị thanh trạng thái bình thường hoặc ánh sáng hay không, hãy sử dụng:

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

Bạn cũng có thể xác định bố cục tùy chỉnh xml cho nội dung hoạt động này, sử dụng:

.withActivityLayout (R.layout.my_custom_layout)

Sử dụng gọi lại tùy chỉnh

Thêm một cuộc gọi lại cho người xây dựng cho phép bạn tùy chỉnh những gì sẽ xảy ra khi giấy phép đã được kiểm tra và quản lý các lỗi kiểm tra giấy phép nếu người dùng không được phép sử dụng ứng dụng. Xin lưu ý rằng khi sử dụng phương pháp này, bạn phải biết cách chặn ứng dụng từ những người dùng trái phép .

Theo mặc định, thư viện sẽ hiển thị hộp thoại không thể hủy nếu người dùng không được phép sử dụng ứng dụng, nếu không sẽ không có gì xảy ra.

Sử dụng trình tạo và thêm sau:

.callback (PiracyCheckerCallback mới () {

@Ghi đè

public void allow () {

// Làm điều gì đó khi người dùng được phép sử dụng ứng dụng

}

@Ghi đè

public void dontAllow (@NonNull PiracyCheckerLỗi lỗi, @Nullable PirateApp app) {

// Bạn có thể làm điều gì đó cụ thể khi người dùng không được phép sử dụng ứng dụng

// Hoặc quản lý lỗi, sử dụng tham số 'lỗi', chính bạn (Kiểm tra lỗi tại {@link PiracyCheckerError}).

// Ngoài ra, nếu bạn bật kiểm tra các ứng dụng cướp biển và / hoặc cửa hàng của bên thứ ba, thông số 'ứng dụng'

// là ứng dụng đã được phát hiện trên thiết bị. Ứng dụng có thể là null và khi không có, nghĩa là không tìm thấy ứng dụng hoặc cửa hàng cướp biển nào,

// hoặc bạn đã tắt kiểm tra cho các ứng dụng đó.

// Điều này cho phép bạn cho phép người dùng biết các lý do có thể khiến giấy phép không hợp lệ.

}

@Ghi đè

public void onError (@NonNull PiracyCheckerLỗi lỗi) {

// Phương thức này không bắt buộc phải được triển khai / overriden nhưng

// Bạn có thể làm điều gì đó cụ thể khi xảy ra lỗi khi kiểm tra giấy phép,

// Hoặc quản lý lỗi, sử dụng tham số 'lỗi', chính bạn (Kiểm tra lỗi tại {@link PiracyCheckerError}).

}

})

Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây

Facebook Twitter Google Plus Pinterest