Przepakowywanie pliku APK przy użyciu baksmali i smali

Jestem studentem i interesuję się bezpieczeństwem Androida. Próbowałem zmodyfikować plik APK przy użyciu baksmali i smali. Nie mogę jednak uruchomić przepakowanej aplikacji na telefonie komórkowym. Kiedy klikam ikonę, pojawia się komunikat „Niestety, test został zatrzymany” i istnieje. (Nawet ikona aplikacji została zmieniona, teraz widzę domyślną ikonę Androida zamiast starej, prawdziwej kolorowej ikony aplikacji)

Jaki może być tego powód? Właściwie nie zmodyfikowałem nawet kodu pliku apk. Po prostu rozpakowałem plik APK, aby uzyskać plik dex, następnie przekonwertowałem go na smali za pomocą baksmali.jar, a następnie wróciłem do dex za pomocą smali.jar. Na koniec spakowane i podpisane.

Co zrobiłem szczegółowo:

  1. Rozpakuj plik apk

    $ Unzip test.apk 
  2. Konwertuj 1classes.dex1 na smali

    $ baksmali -x classes.dex -o smaliClasses 
  3. Skonwertowałem klasy z powrotem do classes.dex (zastąpiłem stary classes.dex, w rzeczywistości nie dodałem żadnego nowego kodu do smali . Chciałem wiedzieć, czy to zadziała najpierw).

    $ smali smaliClasses -o classes.dex 
  4. Spakuj wszystkie pliki do test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. Zmień nazwę test.zip na test.apk

    $ mv test.zip test.apk 

Teraz wydaje mi się, że muszę ponownie podpisać pakiet APK. Popraw mnie, jeśli się mylę tutaj.

Edytowano

:

  1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk

  2. Próbowałem zainstalować nowy przepakowany plik APK. Korzystanie z powłoki adb. Powłoka Adb pokazała, że została pomyślnie zainstalowana. Nie mogę jednak uruchomić przepakowanej aplikacji na telefonie komórkowym. Aplikacja ulega awarii, gdy ją klikam. Pojawia się komunikat „Niestety, test został zatrzymany”.

Dlaczego przepakowana aplikacja nie działa? Nie rozumiem, czego tu brakuje?

Edytowano :

Próbowałem przepakować tę samą aplikację za pomocą apktool. Wyodrębniłem za jego pomocą małe pliki i przepakowałem. Ale dlaczego przepakowywanie nie działa z baksmali, smali, zip i signapk. Czy rozpinanie jest prawdziwym problemem w tej procedurze? Widzę, że rozmiar aplikacji drastycznie się zmniejsza, gdy spakuję ją i zmieniam jej nazwę na .apk w porównaniu z oryginalnym plikiem apk: |

Komentarze

  • Aby uzyskać więcej informacji, sprawdź swój logcat, a jeśli to możliwe, prześlij również dziennik awarii.
  • @xDragonZ , Zredagowałem post. Tym razem próbowałem zainstalować za pomocą " adb install " i podpisałem przy użyciu signapk.jar. Tym razem aplikacja została zainstalowana w telefonie. Jednak po kliknięciu aplikacji następuje awaria z komunikatem " " Niestety aplikacja zatrzymała się ". Jedną z rzeczy, które zauważyłem, jest to, że rozmiar przepakowanego apk jest mniejszy niż oryginalny, czy powodem tej zmiany jest rozmiar narzędzia zip? Jakieś wskazówki, dlaczego aplikacja się zawiesza? Jak uzyskać dziennik? Dziękuję bardzo.
  • być może musisz również wyrównać plik zip?
  • Czy dekodujesz (baksmali -x option) celowo? Wygląda na to, że skoro wykonujesz tę opcję, bez podania ścieżki " bootclasspath " ' otrzymamy jakiś dziwny, mały kod, który może nie być w stanie przekonwertować z powrotem na plik dex. Po prostu usuń folder META-INF przed skompresowaniem i spróbuj wykonać zip -r unsigned.apk * wewnątrz katalogu z całą zawartością. Jeśli nadal się zawiesza, spróbuj opublikować wyjście logcata
  • Więc z pięciu odpowiedzi żadna nie jest akceptowalna? > Odpowiedź

    W tym celu używam apktool oraz krótkiej pary skryptów powłoki do dekompilacji i ponownej kompilacji plików APK:

    • decompile-apk

      #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done." 
    • compile-apk

      #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build 

    Korzystanie z apktool ma tę zaletę, że można również przeglądać i edytować wszystkie zasoby jako zdekodowany plik manifestu.

    Komentarze

    • To jedyna metoda, która działa dla mnie. ' próbowałem dziesiątki, ale żadna nie działała. Wielkie dzięki.

    Odpowiedź

    Po zabawie z smali / baksmali udało się. Myślę, że nie użyłeś flagi podczas kompresowania . Spowodowało to, że folder res był pusty, co spowodowało awarię. Po podpisaniu apk uruchamiam również zipalign.

    Kroki:

    1. Rozpakuj
      $ unzip test.apk
    2. Baksmali
      $ baksmali classes.dex -o smaliClasses
    3. Smali
      $ smali smaliClasses -o classes.dex
    4. Zip -r
      $ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
    5. Jarsign
      $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
    6. Zipalign
      $ zipalign -v 4 test-patched.apk final-apk.apk
    7. Zysk 🙂

    Odpowiedź

    Nie mogę komentować z powodu reputacji, więc opublikuję to tutaj.

    Ponieważ praca jest wykonywana poprawnie za pomocą narzędzia apktool, wydaje mi się, że coś jest nie tak z procesem zip.

    Po po przepakowaniu aplikacji, czy możesz sprawdzić, czy zawartość nowego APK jest identyczna (jeśli chodzi o nazwy i strukturę plików) z zawartością oryginalnego?

    EDYTUJ: również, ponieważ plik jest a .dex, nie sądzę, żebyś potrzebował opcji -x w baksmali.

    EDIT2: Podczas przepakowywania nie musisz dołączać katalogu META-INF do pliku zip. zostanie utworzony podczas podpisywania t on plik.

    Odpowiedź

    Użycie opcji deodex „-x” nie jest wymagane, ponieważ „nie wykonujesz baksmali na odex. Po prostu uruchom baksmali na pliku dex. Możesz także użyć narzędzia apktool do rozpakowania / spakowania wszystkiego, co moim zdaniem jest łatwiejsze.

    Odpowiedź

    • Dlaczego zmniejszono rozmiar pliku?

      Ponieważ apktool zoptymalizował go podczas ponownej kompilacji.

    • Dlaczego się zawiesił?

      Możliwe przyczyny awarii:

      1. Nie możesz wykonać wszystkich czynności w odpowiedniej kolejności.

      2. Aplikacja może mieć Sprawdzanie CRC dla rozmiaru pliku.

    Narzędzie W pełni zautomatyzowane z graficznym interfejsem użytkownika. Zostało zaktualizowane przy użyciu najnowszej platformy Android, więc nie ma błędu dekompilacji zasobów i lepszą obsługę.

    https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

    I ten mały artykuł, w którym zawiera instrukcje dotyczące cofania aplikacji na Androida i wszystkie podstawowe informacje dotyczące modyfikowania / obsługi pakietu APK.

    https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0

    Odpowiedź

    Jeśli interesują Cię aplikacje Anroid RE, znajdziesz lepsze narzędzia do regularnego używania.

    Cóż, jednym z narzędzi jest Android Cracker Kit (który opracowałem), zapewnia wszystko, czego potrzebujesz: Android Cracker Kit (ACK):

    Komentarze

    Odpowiedź

    Używam Edytora APK Pro do edycji Pliki APK bezpośrednio z mojego urządzenia z Androidem!

    https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro

    Komentarze

    • Świetna wskazówka. Wygenerowany plik APK nie instaluje się poprawnie z powyższym (de) skompilowanym skryptem (dlaczego?), Ale zastąpienie klas. Dex to zrobiło. class = „answer”>

      Krok 4. Zapomniałeś zrobić to rekurencyjnie. Nie kopiuje plików do / res po spakowaniu. Dodaj opcję -r.

      zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc 

      Krok 6. Nie musisz go podpisywać ponownie, ponieważ przepakowałeś go już z katalogiem META-INF do swojego apk. Informacje o podpisie znajdują się w META-INF.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *