2011-01-22 67 views
8

Tôi đang viết một ứng dụng không được chạy trên các thiết bị gốc. Tôi muốn lưu trữ một số dữ liệu an toàn và chỉ có thể trên các thiết bị không bắt nguồn từ vì không ai có thể truy cập các tệp trong /dữ liệu/dữ liệu/tên gói.Ứng dụng Android không được chạy trên các thiết bị bắt nguồn từ

Có ai biết:

1) Có thể ngăn chặn quá trình cài đặt của một ứng dụng trên thiết bị gốc? Tôi đã đọc điều gì đó về "cơ chế bảo vệ bản sao" của Android Market. Tính năng này có vẻ đã lỗi thời và được thay thế bằng tính năng cấp phép. Tuy nhiên, giấy phép chỉ có thể áp dụng cho ứng dụng trả phí và mỏ của tôi là miễn phí ...

2) Có thể kiểm tra xem thiết bị có bắt nguồn từ chương trình hay không? Nếu nó có thể làm như vậy tôi có thể chỉ đơn giản là dừng ứng dụng nếu thiết bị được bắt nguồn từ.

Bất kỳ trợ giúp nào về chủ đề này được đánh giá cao!

+0

Thị trường cho biết sẽ sớm không được dùng nữa, nhưng chưa hết, nếu bạn không có giải pháp nào khác, bạn có thể sử dụng nó ngay bây giờ. –

+1

Đây là nhiều sắc thái không thể. – rook

Trả lời

6

Tôi nghĩ rằng cách tiếp cận của bạn hơi thiếu sót. Trước hết, người dùng đầu tiên có thể cài đặt ứng dụng và dữ liệu của bạn, sau đó "root" thiết bị (ngay cả khi rễ xóa dữ liệu, người ta có thể tạo bản sao lưu trước). Tiếp theo, quy tắc chung là bất kỳ thứ gì nằm trong tay người dùng cũng không phải là của bạn nữa. Tin tặc sẽ sớm tìm được cách để truy cập dữ liệu của bạn.

Nếu bạn quan tâm đến dữ liệu bảo mật, không đặt nó vào thiết bị. Vì Android là thiết bị tập trung vào mạng (vâng, tôi biết, đó là chủ quan, nhưng ban đầu nó được phát triển và được định vị như vậy), việc truy cập dữ liệu trực tuyến không phải là không phổ biến.

+0

Chưa kể đến việc root có nghĩa là bạn có thể sẽ bỏ qua hầu hết các biện pháp bảo mật. – kcoppock

+0

Đó là lý do tại sao tôi đang tìm cách mà ứng dụng chưa được cài đặt trên thiết bị gốc ... – Peter

+0

@Peter: Loại đối số tròn ở đây. Những gì tôi có nghĩa là bởi rằng bất kỳ biện pháp an ninh bạn đưa ra để tránh cài đặt nó trên một thiết bị bắt nguồn từ có thể có khả năng được bỏ qua bằng cách có quyền root. – kcoppock

8

Execute

Runtime.getRuntime().exec("su"); 

và kiểm tra mã kết quả.

Nói cách khác, nếu bạn có thể thực hiện su, thì bạn có quyền truy cập root. nó không quan trọng nếu người dùng cho phép hoặc từ chối nó, bạn có câu trả lời của bạn.

+0

Điều đó nghe có vẻ như là một ý tưởng thực sự tốt, nhưng không may, phương thức exec() là không xác định cho kiểu Runtime ... Phương pháp duy nhất dường như tồn tại trên Android là "getInstanceCount" ... – Peter

+0

Runtime.exec() là xác định, tôi đã sử dụng nó. xem: http://developer.android.com/reference/java/lang/Runtime.html –

+0

Điều này có thể sẽ không hoạt động. Khi bạn yêu cầu root, việc sử dụng có thể đơn giản từ chối nó cho ứng dụng của bạn và bạn sẽ không còn khôn ngoan hơn. Nếu họ cấp nó và bạn nói với họ "Hehehe bạn không thể sử dụng ứng dụng của tôi trên một thiết bị bắt nguồn từ" họ sẽ chỉ đi "tốt, không có gốc cho bạn" và bạn sẽ không còn khôn ngoan nữa. – John

3

Nếu bạn đang cố gắng bảo vệ dữ liệu cho người dùng, doanh nghiệp của họ phải lo lắng về các ứng dụng khác. Nếu bạn đang cố gắng bảo vệ dữ liệu từ người dùng, bạn đã đặt doanh nghiệp nào trên thiết bị của họ?

Để trả lời câu hỏi của bạn, họ nắm quyền kiểm soát máy vì vậy, mong đợi họ có thể bẫy bất kỳ cuộc gọi nào đến kiểm tra API 'Đây có phải là thư mục gốc không?' và nói dối bạn. Thay vào đó, mã hóa dữ liệu trên máy khách bằng một khóa được khách hàng biết đến, nhưng làm cho nó không rõ ràng ở đâu và bạn đang làm như thế nào. Nói chung làm cho mọi thứ khó chịu cho bất cứ ai đang tìm kiếm.

Thưởng thức trò chơi tiếp theo của Whack-a-nốt ruồi. Mỗi khi có ai đó đột nhập vào nó, bạn sẽ sửa chữa tốt hơn, họ sẽ thực hiện một vết nứt tốt hơn, và tất cả dọc theo con đường bạn sẽ nâng cao rào chắn để bẻ khóa nó.

Không đấu tranh chống lại sự tự do - tại sao bạn nên từ bỏ khách hàng bằng thiết bị miễn phí? - thay vào đó, nếu bạn muốn có một kết quả cụ thể, hãy làm cho Bother nhận dữ liệu> Giá trị của việc nhận dữ liệu. Sau đó, nó sẽ không xảy ra. Nếu bạn thực sự phải có bảo mật chống lừa đảo, hãy giữ nguyên phía máy chủ dữ liệu.

+0

Thực ra, tôi đang tạo một cặp khóa (công khai và riêng tư) trên thiết bị và muốn lưu trữ nó trong kho khóa riêng.Mật khẩu để truy cập kho khóa này sẽ được lưu trữ an toàn nhất có thể để ngay cả trên điện thoại gốc, không ai sở hữu điện thoại có thể nhận khóa riêng ... – Peter

+1

Bạn đang lưu trữ mật khẩu để truy cập khóa cùng với Chìa khóa? Awfully không an toàn không bạn nghĩ? .. Tại sao không chỉ mã hóa cặp khóa bằng cụm mật khẩu, vì vậy nó sẽ chỉ giải mã chính xác nếu chúng nhập đúng mật khẩu? Đó là những gì SSH và bạn bè làm .. – Zer

+0

Nếu bạn đang cố gắng bảo vệ dữ liệu cho người dùng, doanh nghiệp của họ phải lo lắng về các ứng dụng khác. không có hành vi phạm tội, đó là một cách tiếp cận ngây thơ để bảo mật. theo logic đó, trình duyệt của tôi chỉ nên lưu trữ tất cả mật khẩu của tôi trong một tệp văn bản thuần túy trong c: /passwords.txt, phải không? sau khi tất cả, đó là vấn đề của người dùng nếu chúng xảy ra để cài đặt ứng dụng độc hại. –

0

Tôi tin rằng một trong những 'nhược điểm' của bảo vệ bản sao truyền thống là nó không cho phép ứng dụng được cài đặt trên thiết bị gốc, nhưng nó cũng có chia sẻ vấn đề riêng và sẽ sớm bị phản đối. Đối với kiểm tra phía khách hàng, bạn chỉ đơn giản là không thể dựa vào một cách tiếp cận có lập trình để phát hiện xem bạn đang chạy trên thiết bị gốc hay không - bất kỳ thứ gì nằm trong mã phía máy khách đều có thể và sẽ bị tấn công và xóa. Bạn sẽ ngạc nhiên về việc dễ dàng sửa đổi ngay cả mã Proguard-obfuscated. Tốt nhất, bạn buộc hacker phải mất vài giờ hoặc vài ngày để chỉnh sửa mã và biên dịch lại. Đây là an ninh thông qua sự tối tăm, và không phải là một cơ chế bảo vệ khả thi.

4

Điều tôi muốn nói là chạy su và sau đó kiểm tra kết quả. Nếu người dùng cho phép ứng dụng của bạn có gốc, sau đó sử dụng root để gỡ cài đặt ứng dụng của riêng bạn (một cách có thể là đặt một tập lệnh vào init.d và sau đó buộc khởi động lại).

Nếu người dùng KHÔNG cho phép ứng dụng của bạn để chạy với quyền root, sau đó:

  1. Họ BỊ TỪ CHỐI phép ứng dụng của bạn.
  2. Chúng không được bắt nguồn từ.

Bây giờ, phủ nhận quyền (và bắt nguồn từ) có nghĩa là họ có một số loại ứng dụng quản lý superuser, và đó là nơi phần tiếp theo này do thỏa thuận.

Sau đó tôi sẽ tiếp tục sử dụng PackageManager để lấy một danh sách các tất cả các gói và sau đó kiểm tra họ chống lại các ứng dụng quản lý nắm superuser có sẵn, cụ thể là những người thân của Koush, ChainsDD, và Chainfire

tên gói liên quan là:

  1. com.noshufou.android.su
  2. eu.chainfire.supersu
  3. com.koushikdutta.superuser
3

Sử dụng các phương pháp đó sẽ giúp bạn kiểm tra các gốc

public static boolean findBinary(String binaryName) { 
     boolean found = false; 
     if (!found) { 
      String[] places = { "/sbin/", "/system/bin/", "/system/xbin/", 
        "/data/local/xbin/", "/data/local/bin/", 
        "/system/sd/xbin/", "/system/bin/failsafe/", "/data/local/" }; 
      for (String where : places) { 
       if (new File(where + binaryName).exists()) { 
        found = true; 

        break; 
       } 
      } 
     } 
     return found; 
    } 

    private static boolean isRooted() { 
     return findBinary("su"); 
    } 

Bây giờ hãy thử để kiểm tra xem thiết bị được cắm rễ.

if (isRooted() == true){ 
//Do something to prevent run this app on the device 

} 
else{ 
//Do nothing and run app normally 
} 

Ví dụ bạn có thể buộc dừng ứng dụng nếu thiết bị được bắt nguồn từ

0

1) không có. làm thế nào bạn sẽ từ chối cài đặt? tại sao một thiết bị bắt nguồn từ chối cài đặt thứ gì đó mà người dùng muốn cài đặt trên fs? là toàn bộ điểm của rễ mà bạn có thể làm cho thiết bị làm cơ bản bất cứ điều gì.

2) không. không vì mục đích của bạn. bạn có thể kiểm tra xem bạn có thể lấy được root cho ứng dụng của mình thông qua các phương thức thông thường hay không. để bạn có thể kiểm tra tích cực nhưng bạn không thể chứng minh theo chương trình rằng nó không được bắt nguồn từ bên trong ứng dụng của bạn.

Ngoài ra, những gì bạn đang yêu cầu nếu bạn có thể tạo hệ thống bảo vệ bản sao hoàn hảo - bạn cũng có thể thiếu điểm mà người dùng có thể thay đổi ứng dụng của bạn, xóa kiểm tra gốc của bạn.nếu bạn có một kiểm tra checksum/crc của một số loại, người dùng có thể giả mạo kết quả của điều đó là tốt.

Các vấn đề liên quan