Đối với phiên bản trả tiền của ứng dụng, tôi chọn tuyến đường ứng dụng trình mở khóa vì dễ dàng triển khai, cho phép thống kê riêng lẻ trong Developer Console nhưng chủ yếu là vì tôi không cần duy trì 2 cơ sở mã và phiên bản khác cho phiên bản trả tiền). Ngay cả khi tôi đã sử dụng CVS (mà tôi làm) nó vẫn sẽ là một cơn đau ở cổ để giữ cho các tính năng sáp nhập và sửa lỗi. Ứng dụng trình mở khóa dễ dàng hơn nhiều để thực hiện tổng thể ...Làm thế nào để ứng dụng 'android unlocker' an toàn hơn so với bánh quy giòn?
Nhưng điều này đi kèm với một bất lợi nghiêm trọng, nó thực sự dễ dàng để vượt qua kiểm tra bảo mật; trừ khi tôi đang thiếu một cái gì đó ở đây.
Không có vấn đề gì tôi làm, thực hiện như vậy sẽ luôn dẫn đến một đơn giản if
, như thế này:
if(Program.isPremiumVersion()) {
// Remove ads...
}
Phương pháp isPremiumVersion()
là kẻ chịu trách nhiệm cho tất cả các công việc trong việc kiểm tra cho quá trình cài đặt ứng dụng unlocker trả tiền, nếu chứng chỉ phù hợp và tất cả nội dung đó. Có, các ứng dụng unlocker được bảo vệ bởi các LVL (mặc dù tôi đã đọc một vài bài báo đề cập đến cách LVL không an toàn được, nhưng đó không phải là điểm ngay bây giờ). Nhưng cuối cùng, bất kể mã phức tạp bên trong isPremiumVersion()
nhận được như thế nào, nó luôn mang lại giá trị true
hoặc false
.
Ghi đè tính năng bảo mật như vậy chỉ là vấn đề đảo ngược kỹ thuật mã và làm cho mã đó luôn trả về true
. Không phải nó? Làm thế nào chúng ta có thể bảo vệ các ứng dụng Android của chúng tôi chống lại điều này? Và có, mã được làm rối loạn với ProGuard. Tuy nhiên, không nên quá khó đối với một người có tay nghề đủ.
Xin lưu ý rằng tôi không cố gắng để chống lại các bánh quy giòn, chúng tôi chỉ đơn giản là không thể giành chiến thắng. Tôi sẽ không mất ngủ vì điều này, lãng phí vô số giờ vào "giải pháp hoàn hảo". Tôi chỉ tìm cách làm cho nó an toàn hơn một chút. Điều này dường như rất đơn giản để crack, trong lý thuyết ít nhất. Tôi có sai không?
Bất kỳ ý tưởng nào để cải thiện tính bảo mật của tính năng này?
Chỉ cần sử dụng tương đương java nếu 'IFDEF' hoặc tạo' isPremiumVersion' một hằng số và dựa vào trình biên dịch tối ưu hóa nó. – CodesInChaos
Không phải là giải pháp cho vấn đề nứt của bạn, nhưng vấn đề sao chép mã nên được giảm nhẹ nếu bạn sử dụng dự án thư viện android (không thể khởi chạy). Đó là nhiều hơn hoặc ít hơn một thư viện chia sẻ của các lớp/bố trí/drawables có thể được gọi từ các ứng dụng có thể khởi động. Tạo hai phiên bản ứng dụng của bạn (Miễn phí, Trả phí) và tạo một thư viện với tất cả các mã chung. Trong các phiên bản miễn phí/trả tiền của bạn, bạn có thể ghi đè lên bố trí/chuỗi/drawables/etc nếu chúng cần phải khác với những gì trong thư viện được chia sẻ. Nên phục vụ nhu cầu của bạn: http://developer.android.com/guide/developing/projects/projects-eclipse.html – Gophermofur
@Gophermofur Có, tôi biết về cách tiếp cận thư viện nhưng tôi không thích nó và nó đi kèm với các vấn đề khác". Không cần phải đi sâu hơn nữa, nó không liên quan đến câu hỏi. Tôi đã quyết định từ lâu rằng tôi đang đi với phương pháp "unlocker" và không có thảo luận ở đó. Tôi đánh giá cao đề nghị của bạn mặc dù :) –