2017-05-28 18 views
12

Bir android kitaplığı geliştiriyorum ve bazı hassas finansal web servisleri çağırdığı için koduma bir değişiklik saptama mekanizması uygulamak istiyorum.Android kitaplığındaki kaynak kodlarının toplamını al

Uygulayacağım şey, programın çalışma zamanında programlı olarak (veya bunun önemli bölümleri) sağlama toplamını hesaplamaktır, böylece yeniden paketlenmiş veya yeniden derlenmiş bir uygulamanın herhangi bir zarar vermesini engelleyebilirim. önleme).

Şimdiye kadar geldiğim şey, applicationInfo.publicSourceDir sağlama toplamını hesaplamaktır. ama birden fazla dex dosyası veya çoklu splitApks içeren uygulamalarda ne olduğundan emin değilim.

Android'deki bir uygulamanın kod tabanını temel alarak sağlama toplamını hesaplamak için en güvenilir yol nedir?

+0

birisi – nandsito

+0

biz imza kalsa bile, zararlı dex apk ambalajladığını saldırıyı engellemek istiyorsunuz (Sadece sesli düşünme) değişmeden –

+0

bu başvurmak @FarhadFaghihi https : //stackoverflow.com/questions/9293019/get-certificate-fingerprint-from-android-app. Bir uygulamanın sertifika parmak izini bulabilirsiniz – Calvin

cevap

2

Sağlama toplamı yaklaşımı tek dosya veya zip dosyalarına uygulanabilir. Tüm dosyaların kontrol toplamını kontrol etmek uzun bir süreç olacaktır. Bence yanlış yöndesin. İlk olarak, Bu sorunun açık bir çözümü yoktur. Herhangi bir uygulama saldırıya uğramış olabilir - sadece kesmek zorlaştırabilirsiniz.

Bu zor bunu yapmak için yapılır nedir -

  1. şifreleyin apk - zor kaynak koduna ulaşmak için böylece. başvuru - APK to protect apk from reverse engineering - Obtüratör araçlarını kontrol edin. WebService'den veri alırken/alırken veri şifrelemesini kullanın. Verileri korumak için HMAC'ı kullanabilirsiniz. Sunucunuzun, birden fazla kötü çağrı olduğunda kullanıcı/istekte bulunan uygulamaları engelleyecek kadar akıllı olduğundan emin olun. HMAC uygulaması kolaydır ve HMAC anahtarları oluşturmak için kütüphaneler vardır.

2

Eğer oyun yoluyla dağıtmak Eğer SafetyNet içine bir göz olabilir:

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; 
} 

Bu olabilir https://developer.android.com/training/safetynet/index.html

+0

Play Store üzerinden dağıtım yapmak zorunlu mu? Dokümanlar bu API için dağıtım politikası hakkında bir şey söylemiyor. Ayrıca, lib'imin tüketici uygulaması diğer yerel pazarlardan indirilmiş olabilir –

+0

Yea - AFAIK oyun hizmetlerine bağlıdır - ama dürüst olmak gerekirse bu API'yi hiç kullanmadım - sadece – ligi

0

sertifikaya bağlıdır uygulama imzasını alın APK imzalamak için kullanılan İmzalama sertifikasının orijinal olup olmadığını kontrol etmek için kayıtlı bir değerle karşılaştırılır. müdahale algılama mekanizması circumvents şekilde uygulamayı kurcalayamazlar

+0

teşekkürler. bunu zaten yaptım :) –

İlgili konular