2017-05-28 11 views
12

Pracuję nad biblioteką androidów i chcę zastosować mechanizm wykrywania sabotażu do mojego kodu, ponieważ wywołuje on wrażliwe finansowe usługi sieciowe.Uzyskaj sumę kontrolną kodów źródłowych w bibliotece Androida.

Co zamierzam zaimplementować, to programowe obliczenie sumy kontrolnej pliku APK (lub jego ważnych części) w środowisku wykonawczym, dzięki czemu mogę zapobiec ponownemu uszkodzeniu pakietu apokalibrowanego lub zrekompilowanego (majstrowanie zapobieganie).

Do tej pory wyliczyłem sumę kontrolną applicationInfo.publicSourceDir. ale nie jestem pewien, co dzieje się z aplikacjami, które mają wiele plików dex lub wiele splitApks.

Jaki jest najbardziej niezawodny sposób obliczania sumy kontrolnej na podstawie podstawy kodu aplikacji w systemie Android, programowo?

+0

ktoś może manipulować aplikację w sposób, który omija mechanizm wykrywania sabotażu (tylko głośno myślę) – nandsito

+0

chcemy zapobiec apk przepakowania atak szkodliwego dex, nawet jeśli podpisanie pozostaje niezmieniona –

+0

@FarhadFaghihi odnieść to, https : //stackoverflow.com/questions/9293019/get-certificate-fingerprint-from-android-app. można znaleźć odcisk palca certyfikatu aplikacji – Calvin

Odpowiedz

2

Podejście do sumy kontrolnej można zastosować do pojedynczych plików lub plików zip. Długi proces sprawdzania sumy kontrolnej wszystkich plików będzie długotrwały. Myślę, że jesteś w złym kierunku.

Po pierwsze: Nie ma jednoznacznego rozwiązania tego problemu. Każda aplikacja może zostać zhakowana - możesz po prostu utrudnić hakowanie.

To jest to, co zrobić, aby go ciężko -

  1. zaszyfrować swoją apk - tak że trudno jest dostać się do kodu źródłowego. refer - APK to protect apk from reverse engineering - Sprawdź obfuskujące narzędzia .

  2. Użyj szyfrowania danych podczas wysyłania/odbierania danych z WebService. Możesz użyć HMAC do ochrony danych. Upewnij się, że twój serwer jest wystarczająco inteligentny, by blokować aplikacje użytkownika/aplikacje, na wypadek gdyby było kilka złych połączeń. HMAC jest łatwy do wdrożenia i istnieją biblioteki do generowania kluczy HMAC.

2

Jeśli dystrybuować poprzez zabawy można zajrzeć do SafetyNet: https://developer.android.com/training/safetynet/index.html

+0

Czy dystrybucja przez sklep Play jest obowiązkowa? Dokumenty nie mówią nic o polityce dystrybucji tego interfejsu API. Również aplikacja konsumencka mojej biblioteki mogła zostać pobrana z innych lokalnych rynków. –

+0

Tak, AFAIK to zależy od usług Play - ale szczerze mówiąc, nigdy sam nie korzystałem z tego konkretnego API - właśnie czytałem o tym – ligi

0

Pobierz aplikację podpis, który jest związany z certyfikatem użyty do podpisania 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; 
} 

ten może być w porównaniu z wartością przechowywaną, aby sprawdzić, czy certyfikat podpisu jest oryginalny, czy nie.

+0

dzięki. zrobiłem to już :) –

Powiązane problemy