Do tej samej aplikacji mam:
- APK ze sklepu z aplikacjami,
- co jest rzekomo kodem źródłowym dla tej samej wersji. Z całkiem zwykłym skryptem i strukturą kompilacji Gradle.
Chcę sprawdzić, czy pakiet APK został naprawdę zbudowany z tego kodu źródłowego, czy nie.
Jak to sprawdzić?
Uwagi:
- Plik APK nie jest zaciemniony.
- Nie mam powodu ufać niczyjemu podpisowi. Ufam tylko kodowi źródłowemu.
- Zbudowałem już aplikację dla siebie, ale teraz chcę wiedzieć, czy APK był OK, czy nie.
- Najlepiej z narzędziami wiersza poleceń Linuksa, ale każde narzędzie jest OK.
.apk
plików, a następnie uruchom różnicę względem wynikowych katalogów. Jedyną różnicą powinna być zatem sygnatura (która z oczywistych powodów nie może się równać). Myślenie o tym: po prostu rozpakowanie.apk
plików i zrobienie binarnego pliku różnicowego powinno zrobić to samo. Oba oczywiście wymagałyby użycia tych samych wersji bibliotek itp. Podczas kompilacji :)diff
Metoda wydaje się zgrabna ... ale co jeśli faceci z App Store zaciemnili APK podczas kompilacji?Odpowiedzi:
Możesz to zrobić tylko z odtwarzalnymi kompilacjami:
Aby program działał, programista aplikacji lub sklep z aplikacjami musi być na pokładzie.
W przeciwnym razie jedyną opcją jest zbudowanie go samemu.
Jednym z przykładów programisty, który obecnie to robi, jest Open Whisper Systems: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds
źródło
Jedną wielką rzeczą dotyczącą Java i APK jest to, że możesz całkowicie zdekompilować APK do kodu źródłowego Java.
Jednak wynikowy kod źródłowy nie może być identyczny.
Jednym dobrym sposobem, aby spróbować dopasować wynikowy kod źródłowy do znanej wersji, jest sprawdzenie, jakie modyfikacje zostały wprowadzone bezpośrednio przed i po znanym zatwierdzeniu w repozytorium, i sprawdzenie, czy te modyfikacje są również obecne w zdekompilowanym źródle.
Aby dekompilować, użyj dex2jar i JD-Gui .
edit Właśnie zauważyłem, że chciałeś narzędzi linuxowych. Moje jedyne doświadczenie dotyczy Windowsa, ale jestem pewien, że istnieją podobne narzędzia dla systemu Linux.
źródło