2017-05-28 22 views
12

Tôi đang phát triển thư viện Android và tôi muốn áp dụng cơ chế dò tìm giả mạo cho mã của mình, vì nó gọi một số dịch vụ web tài chính nhạy cảm.Nhận mã kiểm tra mã nguồn trong thư viện Android

Những gì tôi sẽ thực hiện là tính tổng kiểm tra apk (hoặc các phần quan trọng của nó), theo chương trình trên thời gian chạy, vì vậy tôi có thể ngăn chặn một gói phần mềm được đóng gói lại hoặc biên dịch lại. Phòng ngừa).

Những gì tôi đã đưa ra cho đến nay, là tính tổng kiểm tra của applicationInfo.publicSourceDir. nhưng tôi không chắc chắn điều gì sẽ xảy ra với các ứng dụng có nhiều tệp dex hoặc nhiều tệp splitApks.

Cách đáng tin cậy nhất để tính tổng kiểm tra dựa trên mã cơ sở của ứng dụng trong Android, theo lập trình là gì?

+0

ai đó có thể làm xáo trộn các ứng dụng theo một cách mà có thể làm hỏng cơ chế phát hiện xáo trộn (chỉ nghĩ out loud) – nandsito

+0

chúng tôi muốn ngăn chặn các cuộc tấn công đóng gói apk với dex có hại, ngay cả khi việc ký kết vẫn không thay đổi –

+0

@FarhadFaghihi tham khảo này, https : //stackoverflow.com/questions/9293019/get-certificate-fingerprint-from-android-app. người ta có thể tìm thấy dấu vân tay chứng chỉ của ứng dụng – Calvin

Trả lời

2

Phương pháp kiểm tra có thể được áp dụng cho tệp đơn hoặc tệp zip. Nó sẽ là một quá trình dài để kiểm tra tổng kiểm tra tất cả các tệp. Tôi nghĩ bạn đang đi sai hướng.

Thứ nhất, không có giải pháp rõ ràng cho vấn đề này. Bất kỳ ứng dụng nào cũng có thể bị tấn công - bạn chỉ có thể làm cho nó khó hack.

Đây là những gì được thực hiện để làm cho nó cứng -

  1. Mã hóa các gói ứng dụng của bạn - vì vậy mà cứng của nó để có được mã nguồn của bạn. tham khảo - APK to protect apk from reverse engineering - Kiểm tra làm xáo trộn các công cụ .

  2. Sử dụng mã hóa dữ liệu trong khi gửi/nhận dữ liệu từ WebService. Bạn có thể sử dụng HMAC để bảo vệ dữ liệu. Đảm bảo máy chủ của bạn đủ thông minh để chặn người dùng/yêu cầu ứng dụng trong trường hợp có nhiều cuộc gọi xấu. HMAC dễ thực hiện và có các thư viện để tạo các khóa HMAC.

2

Nếu bạn phân phối qua chơi bạn có thể có một cái nhìn vào SafetyNET: https://developer.android.com/training/safetynet/index.html

+0

Phân phối qua cửa hàng Play có bắt buộc không? Các tài liệu không nói bất cứ điều gì về chính sách phân phối cho API này. Ngoài ra, ứng dụng tiêu dùng của lib của tôi có thể đã được tải xuống từ các thị trường địa phương khác –

+0

Yea - AFAIK tùy thuộc vào dịch vụ chơi - nhưng thành thật mà nói tôi không bao giờ sử dụng API cụ thể này - chỉ đọc về nó – ligi

0

Lấy chữ ký ứng dụng được gắn liền với giấy chứng nhận sử dụng để đăng APK

public static String getAppSignature(Context context) { 
    try { 
     for (Signature signature : context.getPackageManager().getPackageInfo(context.getPackageName(), 
       PackageManager.GET_SIGNATURES).signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      return Base64.encodeToString(md.digest(), Base64.DEFAULT); 
     } 
    } catch (Exception e) { /* Do nothing */ } 
    return null; 
} 

Điều này có thể so với giá trị được lưu trữ để kiểm tra xem chứng chỉ ký có phải là bản gốc hay không.

+0

cảm ơn. đã làm điều này rồi :) –

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