2013-06-20 6 views
8

Android developer mówi po około przechowywania aplikacji klucza publicznego w projekcie:Zalecenia dotyczące bezpieczeństwa w aplikacji na Androida - co to oznacza?

Bezpieczeństwo Zalecenia: Zaleca się, że nie ciężko kodu dokładną licencji publicznej kluczową wartość ciągu przewidzianych przez Google Play. Zamiast tego możesz skonstruować cały publiczny klucz licencyjny w czasie wykonywania z podciągów lub pobrać go z zaszyfrowanego magazynu , zanim przekażesz go do konstruktora. Takie podejście utrudnia złośliwym firmom trzecim modyfikowanie publicznego klucza klucza licencyjnego w pliku APK.

Czy powinno to być oczywiste? Nie rozumiem, co chcą, żebym zrobił.

Mówią to samo w komentarzach do przykładu, ale co do cholery nie pokazują, co mają na myśli przez ich instrukcje. Oto co mówi:

Zamiast przechowywania całą ciągiem znaków tu osadzony w program * skonstruować klawisza w czasie wykonywania z kawałków lub * użycie bitowej manipulacji (np XOR z innego łańcucha), aby ukryć * właściwy klucz. Klucz sam w sobie nie jest tajną informacją, ale nie chcemy, aby atakujący zamienił klucz publiczny na własny *, a następnie podrobił wiadomości z serwera.

Jak dokładnie może to zrobić osoba?

Odpowiedz

2

Android programista chce powiedzieć "klucz publiczny", który należy zsynchronizować z Google Play, aby uzyskać dowolną płatność za pomocą aplikacji. Nie należy jej używać bezpośrednio w kodzie źródłowym aplikacji, ponieważ można go łatwo zhackować przez kogokolwiek. Tak więc jednym ze sposobów jest przechowywanie klucza publicznego po stronie serwera i po otrzymaniu odpowiedzi od Google Play, aby zweryfikować klucz, wyślij tę odpowiedź do serwera i wykonaj operację na serwerze.

 /** 
     * String transformation by XOR-ing all characters by value. 
     */ 
     static String stringTransform(String s, int i) { 
     char[] chars = s.toCharArray(); 
     for(int j = 0; j<chars.length; j++) 
     chars[j] = (char)(chars[j]^i); 
     return String.valueOf(chars); 
     } 
+0

Więc google sugeruje: "Zamiast tego można skonstruować cały publiczny ciąg klucza licencyjnego w czasie wykonywania z podciągów lub pobrać go z zaszyfrowanego sklepu", Czy odzyskuje się je z serwera "odzyskać z zaszyfrowanego sklepu"? I jaki jest bezpieczny sposób na skonstruowanie go w czasie wykonywania ze stringów zgodnie z opisem? –

+1

Przenieś całą logikę weryfikacji transakcji na swój serwer i użyj protokołu HTTPS, aby się z nią połączyć. – skygeek

+0

i do transformacji łańcuchów musisz zaimplementować własną logikę lub zaktualizowaną odpowiedź. – skygeek

1

To bardzo podstawowe informacje, które próbują powiedzieć. Zobaczmy poniższym przykładzie:

Niektóre deweloper może przechowywać tam Licencji ciąg samego:

private static final String LICENSE_1="xxx-yyy-zzz" 
private static final String LICENSE_2="xxz-yyz-zzz" 
private static final String LICENSE_N="xxz-yyz-zzz" 

private ArrayList<String> licenseList=new ArrayList<String>(); 

licenseList.add(LICENSE_N); 

A oni mogliby zostać użytkownika, aby wprowadzić swój numer licencji, więc będą robić coś takiego:

if(licenseList.contains(ExitText.getText().toString()) 
    //allow 
else 
    //disallow 

teraz mogę dekompilować tę aplikację i uzyskać wszystkie zezwolenia: D

Jeśli nie miał czegoś podobnego w kodzie powyżej, jedynym sposobem mogłem ominąć swoich licens ing: jeśli zostanie to zrobione lokalnie, może to być włamanie do pamięci, tak jak robi GameCIH. Hackowanie pamięci to tylko jeden z przykładów, może się zdarzyć wiele różnych rzeczy. Nie możesz ich powstrzymać, ale możesz uczynić ich życie trudniejszym.

+0

To wykazało podatność na atak. Rozumiem. Struny decombile jako struny. Ale o co proszą cię, aby chronić swoją aplikację? Mają konkretne sugestie i nie rozumiem ich. –

+0

Niestety, nie wiem zbyt wiele na temat operacji bitowej wykonywanych w kodzie, ale mogę powiedzieć, w jaki sposób można złamać twoją aplikację. Jak powiedział to podejście sprawia, że ​​jest trudniejsze. Powiedzmy, że nawet jeśli wprowadzono operację bitową w logice po stronie klienta, jeśli odszyfuję twoją aplikację, nadal mogę zrobić to, co chcę z nią zrobić, ponieważ widzę twoją logikę. Mogę następnie ponownie skompilować Twoją aplikację i opublikować ją w prywatnych sklepach z aplikacjami lub w sklepach z plikami. – Milan