To nie jest pytanie o sposób podpisania pliku .apk. Chcę wiedzieć, co oznacza podpisanie i jak jest ono zaimplementowane.W jaki sposób pliki .apk są podpisywane?
Wewnątrz pliku .apk znajduje się folder META-INF, a wewnątrz znajdują się dwa pliki.
Pierwszy z nich jest CERT.SF zawiera SHA1 skróty do różnych elementów i wygląda następująco:
Name: res/layout/main.xml
SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM=
Name: AndroidManifest.xml
SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc=
Name: resources.arsc
SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY=
Name: classes.dex
SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI=
Istnieje również plik o nazwie CERT.RSA. Zakładam, że jest to klucz publiczny do weryfikacji podpisu.
Moje pytanie brzmi: gdzie jest podpis dla całego pliku .apk? A co właściwie jest podpisane? Może to być zarówno plik
- apk stosowany jako pojedynczy obiekt binarny i to jest podpisany
- lub CERT.SF jest podpisany, która zawiera poszczególne hashe dla różnych komponentów
Byłoby również znacznie lepiej, jeśli możesz wskazać mi dokumentację szczegółowego procesu podpisywania i weryfikacji.
Martin, próbuję replikować ostatni krok (generowanie pliku .RSA) przy użyciu .NET. Dane wejściowe do podpisania, czy powinienem przyjąć, że są to wpisy plików w pliku SFS (tzn. 3 linie)? Czy dane te powinny być zakodowane jako UTF8 lub Unicode? Nie jestem w stanie wytworzyć tego samego wyniku (chociaż) podobnego do narzędzia jarsigner dla tego samego certyfikatu/danych. Wszelkie wskazówki mogą pomóc! –