Jak otworzyć APK i jak edytować? Korzystanie z apktool Program do dezasemblowania i składania pliku apk

Czasami niektóre aplikacje na Androida w jakiś sposób nie odpowiadają użytkownikowi. Przykładem jest natrętna reklama. Zdarza się też, że program jest dobry dla wszystkich, ale tłumaczenie w nim jest albo krzywe, albo całkowicie nieobecne. Lub na przykład program jest wersją próbną, ale nie ma możliwości uzyskania pełnej wersji. Jak zmienić sytuację?

Wstęp

W tym artykule porozmawiamy o tym, jak zdemontować pakiet APK z aplikacją, przyjrzeć się jego wewnętrznej strukturze, zdezasemblować i dekompilować kod bajtowy, a także spróbować wprowadzić kilka zmian w aplikacjach, które mogą przynieść nam tę czy inną korzyść.

Aby zrobić to wszystko samodzielnie, będziesz potrzebować przynajmniej podstawowej znajomości języka Java, w którym pisane są aplikacje na Androida, oraz języka XML, który jest używany wszędzie w Androidzie – od opisu samej aplikacji i jej praw dostępu, po przechowywanie ciągów znaków, które zostanie wyświetlony na ekranie. Będziesz także potrzebować umiejętności obsługi specjalistycznego oprogramowania konsoli.

Czym więc jest pakiet APK, w którym dystrybuowane jest absolutnie całe oprogramowanie na Androida?

Dekompilacja aplikacji

W tym artykule pracowaliśmy tylko ze zdemontowanym kodem aplikacji, ale jeśli w dużych aplikacjach zostaną wprowadzone poważniejsze zmiany, zrozumienie małego kodu będzie znacznie trudniejsze. Na szczęście kod dex możemy zdekompilować do kodu Java, który choć nie jest oryginalny i nieskompilowany, jest znacznie łatwiejszy do odczytania i zrozumienia logiki aplikacji. Aby to zrobić, będziemy potrzebować dwóch narzędzi:

  • dex2jar jest tłumaczem kodu bajtowego Dalvik na kod bajtowy JVM, na podstawie którego możemy otrzymać kod w języku Java;
  • jd-gui jest samym dekompilatorem, który pozwala uzyskać czytelny kod Java z kodu bajtowego JVM. Alternatywnie możesz użyć Jad (www.varaneckas.com/jad); Chociaż jest dość stary, w niektórych przypadkach generuje bardziej czytelny kod niż Jd-gui.

Tak należy je stosować. Najpierw uruchamiamy dex2jar, podając jako argument ścieżkę do pakietu apk:

% dex2jar.sh mail.apk

W rezultacie pakiet Java mail.jar pojawi się w bieżącym katalogu, który można już otworzyć w jd-gui, aby wyświetlić kod Java.

Aranżacja pakietów APK i ich odbiór

Pakiet aplikacji na Androida to w zasadzie zwykły plik ZIP, który nie wymaga żadnych specjalnych narzędzi do przeglądania jego zawartości ani wyodrębniania go. Wystarczy mieć archiwizator - 7zip dla Windows lub rozpakowanie konsoli na Linuksie. Ale to tyle jeśli chodzi o opakowanie. Co jest w środku? Ogólnie rzecz biorąc, wewnątrz mamy następującą strukturę:

  • META-INF/- zawiera cyfrowy certyfikat aplikacji, identyfikujący jej twórcę oraz sumy kontrolne plików pakietu;
  • res/ - różne zasoby, z których korzysta aplikacja w swojej pracy, takie jak obrazy, deklaratywny opis interfejsu, a także inne dane;
  • AndroidManifest.xml- opis aplikacji. Obejmuje to na przykład listę wymaganych uprawnień, wymaganą wersję Androida i wymaganą rozdzielczość ekranu;
  • class.dex- skompilowany kod bajtowy aplikacji dla maszyny wirtualnej Dalvik;
  • zasoby.arsc- także surowce, ale innego rodzaju - w szczególności ciągi znaków (tak, ten plik można wykorzystać do rusyfikacji!).

Wymienione pliki i katalogi znajdują się, jeśli nie we wszystkich, to być może w zdecydowanej większości plików APK. Istnieje jednak kilka innych, mniej powszechnych plików/katalogów, o których warto wspomnieć:

  • aktywa- analogia zasobów. Główna różnica polega na tym, że aby uzyskać dostęp do zasobu, trzeba znać jego identyfikator, ale listę zasobów można uzyskać dynamicznie za pomocą metody AssetManager.list() w kodzie aplikacji;
  • biblioteka- natywne biblioteki linuksowe napisane przy użyciu NDK (Native Development Kit).

Z tego katalogu korzystają producenci gier, którzy umieszczają w nim swoje silniki gier napisane w języku C/C++, a także twórcy aplikacji o dużej wydajności (np. Google Chrome). Wymyśliliśmy urządzenie. Ale jak zdobyć plik pakietu aplikacji, która Cię interesuje? Ponieważ nie jest możliwe pobranie plików APK z urządzenia bez rootowania (znajdują się one w katalogu /data/app), a rootowanie nie zawsze jest wskazane, istnieją co najmniej trzy sposoby pobrania pliku aplikacji na komputer:

  • Rozszerzenie APK Downloader dla przeglądarki Chrome;
  • Prawdziwa aplikacja APK Leecher;
  • różne hostingi plików i Varezniki.

Którego użyć, to kwestia gustu; wolimy korzystać z oddzielnych aplikacji, dlatego opiszemy użycie Real APK Leecher, zwłaszcza że jest on napisany w Javie i odpowiednio będzie działał zarówno w systemie Windows, jak i Nix.

Po uruchomieniu programu należy wypełnić trzy pola: E-mail, Hasło i Identyfikator urządzenia – oraz wybrać język. Pierwsze dwa to adres e-mail i hasło do Twojego konta Google, którego używasz na urządzeniu. Trzeci to identyfikator urządzenia, który można uzyskać wpisując kod na dialerze # #8255## a następnie znalezienie wiersza identyfikatora urządzenia. Podczas wypełniania wystarczy podać identyfikator bez prefiksu android-.

Po wypełnieniu i zapisaniu często pojawia się komunikat „Błąd podczas łączenia z serwerem”. Nie ma to nic wspólnego z Google Play, więc możesz go zignorować i poszukać pakietów, które Cię interesują.

Przeglądaj i modyfikuj

Załóżmy, że znalazłeś pakiet, który Cię interesuje, pobrałeś go, rozpakowałeś... i kiedy próbowałeś wyświetlić jakiś plik XML, ze zdziwieniem odkryłeś, że nie jest to plik tekstowy. Jak go zdekompilować i ogólnie jak pracować z pakietami? Czy naprawdę konieczna jest instalacja pakietu SDK? Nie, w ogóle nie jest konieczna instalacja pakietu SDK. W rzeczywistości wszystkie kroki wyodrębniania, modyfikowania i pakowania pakietów APK wymagają następujących narzędzi:

  • Archiwizator ZIP do rozpakowywania i pakowania;
  • mały- Asembler/deasembler kodu bajtowego maszyny wirtualnej Dalvik (code.google.com/p/smali);
  • pasuje- narzędzie do pakowania zasobów (domyślnie zasoby przechowywane są w formie binarnej w celu optymalizacji wydajności aplikacji). Zawarte w zestawie SDK systemu Android, ale można je uzyskać osobno;
  • podpisujący- narzędzie do cyfrowego podpisywania zmodyfikowanej paczki (bit.ly/Rmrv4M).

Można używać wszystkich tych narzędzi osobno, jest to jednak niewygodne, dlatego lepiej jest skorzystać z oprogramowania wyższego poziomu zbudowanego na ich bazie. Jeśli pracujesz na Linuksie lub Mac OS X, istnieje narzędzie o nazwie apktool. Pozwala rozpakować zasoby w ich oryginalnej formie (w tym pliki binarne XML i arsc), odbudować pakiet ze zmienionymi zasobami, ale nie wie, jak podpisywać pakiety, więc będziesz musiał ręcznie uruchomić narzędzie podpisujące. Pomimo tego, że narzędzie jest napisane w Javie, jego instalacja jest dość niestandardowa. Najpierw musisz zdobyć sam plik jar:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ eksport PATH=~/bin:$PATH

Jeśli pracujesz w systemie Windows, istnieje do tego doskonałe narzędzie o nazwie Virtious Ten Studio, które również gromadzi wszystkie te narzędzia (w tym sam apktool), ale zamiast interfejsu CLI zapewnia użytkownikowi intuicyjny interfejs graficzny, za pomocą którego możesz wykonaj operacje rozpakowywania, dezasemblowania i dekompilacji za pomocą kilku kliknięć. To narzędzie jest oprogramowaniem typu Donation, co oznacza, że ​​czasami pojawiają się okna z prośbą o uzyskanie licencji, ale ostatecznie można to tolerować. Nie ma sensu tego opisywać, bo interfejs można zrozumieć w kilka minut. Jednak apktool, ze względu na jego konsolowy charakter, należy omówić bardziej szczegółowo.


Przyjrzyjmy się opcjom apktool. Krótko mówiąc, istnieją trzy podstawowe polecenia: d (dekodowanie), b (kompilacja) i if (instalacja frameworka). Jeśli wszystko jest jasne w przypadku pierwszych dwóch poleceń, to co robi trzecia instrukcja warunkowa? Rozpakowuje określoną strukturę interfejsu użytkownika, co jest konieczne w przypadkach, gdy analizujesz dowolny pakiet systemowy.

Przyjrzyjmy się najciekawszym opcjom pierwszego polecenia:

  • -S- nie demontuj plików dex;
  • -R- nie rozpakowuj zasobów;
  • -B- nie wstawiaj informacji debugujących do wyników dezasemblacji pliku dex;
  • --ścieżka-ramki- użyj określonego frameworku interfejsu użytkownika zamiast tego wbudowanego w apktool. Przyjrzyjmy się teraz kilku opcjom polecenia b:
  • -F- montaż wymuszony bez sprawdzania zmian;
  • -A- wskaż ścieżkę do aapt (narzędzia do budowania archiwum APK), jeśli z jakiegoś powodu chcesz użyć go z innego źródła.

Korzystanie z apktool jest bardzo proste; w tym celu wystarczy podać jedno z poleceń i ścieżkę do pliku APK, na przykład:

$ apktool d mail.apk

Następnie wszystkie wyodrębnione i zdezasemblowane pliki pakietu pojawią się w katalogu poczty.

Przygotowanie. Wyłączanie reklam

Teoria oczywiście jest dobra, ale po co nam to, skoro nie wiemy, co zrobić z rozpakowaną paczką? Spróbujmy zastosować teorię na naszą korzyść, a mianowicie zmodyfikować jakieś oprogramowanie tak, aby nie wyświetlało nam reklam. Niech to będzie na przykład Virtual Torch – wirtualna pochodnia. To oprogramowanie jest dla nas idealne, ponieważ jest wypełnione irytującymi reklamami, a ponadto jest na tyle proste, aby nie zgubić się w dżungli kodu.


Zatem korzystając z jednej z powyższych metod pobierz aplikację z marketu. Jeśli zdecydujesz się na korzystanie z Virtious Ten Studio, wystarczy otworzyć plik APK w aplikacji i rozpakować go, utworzyć projekt (Plik -> Nowy projekt), a następnie wybrać opcję Importuj plik z menu kontekstowego projektu. Jeśli twój wybór padł na apktool, po prostu uruchom jedno polecenie:

$ apktool d com.kauf.particle.virtualtorch.apk

Następnie w katalogu com.kauf.particle.virtualtorch pojawi się drzewo plików podobne do opisanego w poprzedniej sekcji, ale z dodatkowym katalogiem small zamiast plików dex i pliku apktool.yml. Pierwsza zawiera zdezasemblowany kod pliku wykonywalnego dex aplikacji, druga zawiera informacje serwisowe potrzebne apktoolowi do ponownego złożenia pakietu.

Pierwszym miejscem, któremu powinniśmy zajrzeć jest oczywiście plik AndroidManifest.xml. I tutaj od razu spotykamy następujący wiersz:

Nietrudno się domyślić, że odpowiada za nadanie aplikacji uprawnień do korzystania z połączenia internetowego. Tak naprawdę, jeśli chcemy po prostu pozbyć się reklam, najprawdopodobniej będziemy musieli po prostu zablokować aplikację z Internetu. Spróbujmy to zrobić. Usuwamy określoną linię i próbujemy zbudować oprogramowanie za pomocą apktool:

$ apktool b com.kauf.particle.virtualtorch

Wynikowy plik APK pojawi się w katalogu com.kauf.particle.virtualtorch/build/. Nie będzie jednak możliwości jego zainstalowania, gdyż nie posiada on podpisu cyfrowego i sum kontrolnych plików (po prostu nie posiada katalogu META-INF/). Musimy podpisać pakiet za pomocą narzędzia apk-signer. Wystrzelony. Interfejs składa się z dwóch zakładek – na pierwszej (Key Generator) tworzymy klucze, na drugiej (APK Signer) podpisujemy. Aby utworzyć nasz klucz prywatny należy wypełnić następujące pola:

  • Plik docelowy- plik wyjściowy magazynu kluczy; zwykle przechowuje jedną parę kluczy;
  • Hasło I Potwierdzać- hasło do magazynu;
  • Alias- nazwa klucza w magazynie;
  • Hasło aliasu I Potwierdzać- tajne hasło klucza;
  • Ważność- okres ważności (w latach). Wartość domyślna jest optymalna.

Pozostałe pola są w zasadzie opcjonalne – choć przynajmniej jedno musi zostać wypełnione.


OSTRZEŻENIE

Aby podpisać aplikację za pomocą apk-signer, należy zainstalować Android SDK i podać pełną ścieżkę do niego w ustawieniach aplikacji.

Wszystkie informacje podane są wyłącznie w celach informacyjnych. Ani redakcja, ani autor nie ponoszą odpowiedzialności za ewentualne szkody wyrządzone przez materiały zawarte w tym artykule.

Teraz możesz podpisać plik APK tym kluczem. W zakładce APK Signer wybierz nowo wygenerowany plik, wprowadź hasło, alias klucza i hasło, następnie odszukaj plik APK i śmiało kliknij przycisk „Podpisz”. Jeśli wszystko pójdzie dobrze, paczka zostanie podpisana.

INFORMACJE

Ponieważ pakiet podpisaliśmy własnym kluczem, będzie on kolidował z oryginalną aplikacją, co oznacza, że ​​przy próbie aktualizacji oprogramowania przez market otrzymamy błąd.

Podpis cyfrowy jest wymagany tylko w przypadku oprogramowania innych firm, więc jeśli modyfikujesz instalowane aplikacje systemowe, kopiując je do katalogu /system/app/, nie musisz ich podpisywać.

Następnie pobierz pakiet na swój smartfon, zainstaluj go i uruchom. Voila, reklama zniknęła! Zamiast tego pojawił się jednak komunikat, że nie mamy internetu lub nie mamy odpowiednich uprawnień. Teoretycznie może to wystarczyć, ale wiadomość wygląda denerwująco i szczerze mówiąc, po prostu mieliśmy szczęście z głupią aplikacją. Zwykle napisane oprogramowanie najprawdopodobniej wyjaśni swoje dane uwierzytelniające lub sprawdzi połączenie z Internetem, a w przeciwnym razie po prostu odmówi uruchomienia. Jak się zachować w tym przypadku? Oczywiście edytuj kod.

Zwykle twórcy aplikacji tworzą specjalne klasy służące do wyświetlania reklam i wywoływania metod tych klas w momencie uruchomienia aplikacji lub jednej z jej „aktywności” (w uproszczeniu ekranów aplikacji). Spróbujmy znaleźć te klasy. Wchodzimy do katalogu small, potem com (org zawiera tylko otwartą bibliotekę graficzną cocos2d), potem kauf (tutaj jest, bo tak nazywa się deweloper i tam jest cały jego kod) - i tu jest, katalog marketingowy. Wewnątrz znajdziemy kilka plików z rozszerzeniem small. Są to klasy, a najbardziej godną uwagi jest klasa Ad.smali, z której nazwy łatwo się domyślić, że to ona wyświetla reklamy.

Moglibyśmy zmienić logikę jego działania, ale dużo łatwiej byłoby po prostu usunąć wywołania którejkolwiek z jego metod z samej aplikacji. Opuszczamy zatem katalog marketingowy i przechodzimy do sąsiedniego katalogu cząstek, a następnie do virtualtorch. Na szczególną uwagę zasługuje tutaj plik MainActivity.smali. Jest to standardowa klasa Androida, która jest tworzona przez pakiet Android SDK i instalowana jako punkt wejścia do aplikacji (analogicznie do głównej funkcji w C). Otwórz plik do edycji.

Wewnątrz znajduje się niewielki kod (lokalny asembler). Jest dość zagmatwany i trudny do odczytania ze względu na swój niski poziom, więc nie będziemy się go uczyć, ale po prostu znajdziemy w kodzie wszystkie odniesienia do klasy Ad i skomentujemy je. W wyszukiwaniu wpisujemy wiersz „Reklama” i dochodzimy do wiersza 25:

Pole ogłoszenia prywatnego:Lcom/kauf/marketing/Ad;

Tutaj tworzone jest pole reklamy do przechowywania obiektu klasy Ad. Komentujemy umieszczając znak ### przed kreską. Kontynuujemy poszukiwania. Linia 423:

Nowa instancja v3, Lcom/kauf/marketing/Ad;

W tym miejscu następuje tworzenie obiektu. Skomentujmy. Kontynuujemy poszukiwania i znajdujemy w liniach 433, 435, 466, 468, 738, 740, 800 i 802 wywołania metod klasy Ad. Skomentujmy. Wygląda na to, że to wszystko. Oszczędzajmy. Teraz należy złożyć paczkę i sprawdzić jej funkcjonalność oraz obecność reklam. Dla czystości eksperymentu zwracamy linię usuniętą z AndroidManifest.xml, składamy paczkę, podpisujemy i instalujemy.

Nasza świnka morska. Reklama widoczna

Ups! Reklama zniknęła dopiero w trakcie działania aplikacji, lecz pozostała w menu głównym, które widzimy po uruchomieniu oprogramowania. Czyli czekaj, ale punktem wejścia jest klasa MainActivity, a reklama zniknęła w trakcie działania aplikacji, ale pozostała w menu głównym, więc punkt wejścia jest inny? Aby zidentyfikować prawdziwy punkt wejścia, otwórz ponownie plik AndroidManifest.xml. I tak, zawiera następujące linie:

Mówią nam (i co ważniejsze androidowi), że w odpowiedzi na wygenerowanie intencji (zdarzenia) android.intent.action.MAIN z kategorii android.intent.category.LAUNCHER powinna zostać uruchomiona czynność o nazwie Start. Zdarzenie to generowane jest po dotknięciu ikony aplikacji w launcherze, więc określa punkt wejścia, czyli klasę Start. Najprawdopodobniej programista najpierw napisał aplikację bez menu głównego, do której punktem wejścia była standardowa klasa MainActivity, a następnie dodał nowe okno (aktywność) zawierające menu i opisane w klasie Start i ręcznie uczynił z niego wpis punkt.

Otwórz plik Start.smali i ponownie poszukaj linii „Ad”, w liniach 153 i 155 znajdziemy wzmiankę o klasie FirstAd. Znajduje się także w kodzie źródłowym i sądząc po nazwie odpowiada za wyświetlanie reklam na ekranie głównym. Spójrzmy dalej, jest utworzenie instancji klasy FirstAd i intencji, która zgodnie z kontekstem jest powiązana z tą instancją, a następnie etykieta cond_10, do której warunkowe przejście odbywa się dokładnie przed utworzeniem instancji z klasy:

If-ne p1, v0, :cond_10 .line 74 nowa instancja v0, Landroid/content/Intent; ... :cond_10

Najprawdopodobniej program w jakiś sposób losowo oblicza, czy reklama powinna wyświetlać się na ekranie głównym, a jeśli nie, przeskakuje bezpośrednio do cond_10. Ok, uprośćmy jej zadanie i zamieńmy przejście warunkowe na bezwarunkowe:

#if-ne p1, v0, :cond_10 goto:cond_10

W kodzie nie ma już wzmianek o FirstAd, więc zamykamy plik i ponownie składamy naszą wirtualną pochodnię za pomocą apktool. Skopiuj go na swój smartfon, zainstaluj, uruchom. Voila, zniknęły wszelkie reklamy, czego nam wszystkim gratulujemy.

Wyniki

Artykuł ten stanowi jedynie krótkie wprowadzenie do metod hakowania i modyfikowania aplikacji na Androida. Wiele problemów pozostało za kulisami, takich jak usuwanie zabezpieczeń, analizowanie zaciemnionego kodu, tłumaczenie i zastępowanie zasobów aplikacji, a także modyfikowanie aplikacji napisanych przy użyciu Android NDK. Jednak mając podstawową wiedzę, zrozumienie tego wszystkiego jest tylko kwestią czasu.

Z tego artykułu dowiesz się z czego składa się aplikacja na Androida, jak otworzyć plik APK i za pomocą jakich programów.

Co to jest plik APK?

APK to format systemu operacyjnego Android używany do archiwizacji plików wykonywalnych aplikacji, a nazwa samego pliku może być dowolna, ale rozszerzenie powinno wyglądać tylko tak.apk. Odpowiednikami APK w innych systemach operacyjnych są .msi w Windows, .sis w Symbianie, .rpm lub .deb w Linuksie.

Zobaczmy, co jest w środku
W rzeczywistości .apk jest archiwum ZIP, więc możesz przeglądać urządzenie wewnętrzne za pomocą dowolnego menedżera plików lub archiwizatora, na przykład WinRAR lub aplikacji mobilnej X-plore.




Warto pamiętać, że dostęp do zasobów wewnętrznych uzyskuje się jedynie wizualnie; możliwości edycji są bardzo ograniczone.

Spójrzmy na strukturę
Wewnątrz .apk widzimy wiele plików i folderów, dowiedzmy się, do czego służą:

  • AndroidManifest.xml to rodzaj „paszportu” aplikacji, z którego można dowiedzieć się wszystkich głównych punktów, wymagań, wersji, uprawnień itp.
  • META-INF plik ten zawiera metadane, czyli dane o danych, sumy kontrolne, ścieżki do danych, ścieżki i sumy kontrolne zasobów, certyfikaty. Możesz otworzyć ten plik w dowolnym edytorze tekstu, ale zaleca się użycie Notepad++.
  • Folder res zawiera wszystkie zasoby programu, grafikę, taką jak ikony, obrazy, tekst i elementy interfejsu graficznego. Możesz także łatwo uzyskać dostęp do folderu.
  • class.dex to bezpośredni kod programu aplikacji wykonywany przez maszynę wirtualną Dalvik VM, możesz zobaczyć, co znajduje się w tym pliku, tylko dekompilując plik .apk, o czym porozmawiamy w innych artykułach; Resources.arsc - skompilowany plik XML, plik ten zawiera dane o wszystkich zasobach zaangażowanych w program.
  • lib - folder z bibliotekami natywnymi, do których zasobów można uzyskać dostęp jedynie przy pomocy specjalistycznych programów. Plik APK może również zawierać pliki i foldery, takie jak com, org, udk, ale nie zawsze.

Przyjrzyjmy się teraz bardziej szczegółowo strukturze wewnętrznej; do tego potrzebujemy programu do dekompilacji, Java i pliku APK. Głównym narzędziem do deasemblacji .apk jest Apktool, ale ten program działa tylko z linii, co nie jest zbyt wygodne. Aby uzyskać szybszą i wygodniejszą analizę, możesz użyć APKing, jest to wciąż ten sam Apktool, ale z możliwością pracy z menu kontekstowego.


I tak instalujemy APKing jak każdą aplikację dla Windows i po wybraniu .apk kliknij go prawym przyciskiem myszy i jednocześnie Shift, po czym zobaczymy:



I wybierz wymaganą akcję, na przykład całkowicie dekompiluj, a następnie program zakończy operację i utworzy folder o tej samej nazwie.



Otwierając folder będziemy mieli dostęp do wszystkich zasobów pliku APK.



Teraz można edytować wszystkie pliki tekstowe, zachowując podstawowe zasady można skorzystać z popularnego programu Notepad++, rozważ np. AndroidManifest.xml

Wspomniałem o aplikacji SmartAPKTool. Może wyodrębniać, zipować i podpisywać zmodyfikowane pliki apk. Jego zaletą jest obecność interfejsu graficznego. Jednak jest też poważna wada. SmartAPKTool od dłuższego czasu nie jest aktualizowany, a program nie rozpakowuje i nie pakuje poprawnie aplikacji dla najnowszych wersji Androida. Dlatego tutaj postaram się wyjaśnić, jak korzystać z aplikacji do tych celów apktool.

Notatka 1.
Program SmartAPKTool jest nadal wygodny w użyciu do podpisywania zebranych plików apk.
Uwaga 2.
Linki do programów wymienionych w artykule to ↓

Program apktool nie posiada interfejsu graficznego. Jest to wada dla tych, którzy nie są przyzwyczajeni do pracy z wierszem poleceń. Ale jest też plus: w przeciwieństwie do SmartAPKTool, zobaczymy wszystkie błędy, co oznacza, że ​​będziemy wiedzieć, co poprawić.

Pobierzmy dwa archiwa: jedno wspólne dla wszystkich systemów, drugie dla naszego systemu (w przykładzie Windows):

Rozpakujmy oba archiwa do tego samego pustego folderu (w naszym przykładzie C:\apktool\). Jego zawartość powinna wyglądać następująco:

Od tego momentu możemy korzystać z programu apktool.

Uwaga 3.
Użytkownicy 64-bitowych wersji Linuksa będą musieli zainstalować pakiet ia32-libs:

sudo apt-get install ia32-libs

W tym samym folderze umieszczamy plik, który musimy rozpakować. Na przykład niech będzie się nazywał orig.apk
Naciśnij i przytrzymaj klawisz Shift, a następnie kliknij prawym przyciskiem myszy dowolne puste miejsce w folderze (nie klikaj plików!). Następnie wybierz „Otwórz okno poleceń”. W wyświetlonej konsoli wpisz:

apktool dekoduje orig.apk

Plik zostanie rozpakowany:

Teraz mamy folder z rozpakowaną aplikacją w katalogu C:\apktool\. Nazywa się tak samo jak plik źródłowy, z wyjątkiem rozszerzenia: C:\apktool\orig\ . Pliki źródłowe możemy zmienić w sposób opisany w artykule Android: jak zainstalować dwie identyczne aplikacje na jednym telefonie. Po wprowadzeniu zmian pobierzemy kopię aplikacji, pakując pliki źródłowe do pliku apk:

apktool kompilacja orig wynik.apk

Tutaj wynik.apk to nazwa pliku, którą wymyśliliśmy dla kompilacji kopii. Jeśli nie ma żadnych błędów, plik zostanie złożony:

Reszta wykracza poza zakres artykułu:

  1. Jeśli podczas montażu pojawią się błędy, należy znaleźć ich przyczynę i skorygować.
  2. Pozostaje tylko podpisać powstały plikresult.apk. Można to zrobić za pomocą SmartAPKTool, jak wspomniano powyżej; Wszystko w nim jest intuicyjne. Istnieją również inne sposoby podpisania pliku apk.
  3. Błędy mogą również wystąpić podczas instalowania kopii, podczas jej uruchamiania lub działania. Należy je wychwycić za pomocą narzędzia adb zawartego w zestawie SDK systemu Android.

Musisz podpisać aplikację, w przeciwnym razie nie zostanie zainstalowana. Błędy nie zdarzają się zbyt często, a najczęstsze problemy, które je powodują, zostały opisane w artykule

W procesie korzystania z różnych oprogramowania sprzętowego dla urządzeń z Androidem czasami konieczna jest zmiana aplikacji systemowych wbudowanych w system operacyjny w taki czy inny sposób. W tym materiale szczegółowo rozważymy tę kwestię.

Naturalnie należy zdemontować i ponownie złożyć systemowy plik APK, aby działał poprawnie i stabilnie. Zastanówmy się krok po kroku, co należy w tym celu zrobić.

W pierwszej kolejności należy przeprowadzić proces deodeksowania systemowych plików APK. Powiemy Ci, jak to zrobić w.

Zatem plik .apk został zdeodeksowany i zdekompilowany. Przeanalizujmy interesującą nas aplikację, niech będzie miała nazwę, dla jasności np. struktura- rez. apk. Zapamiętamy to w naszych głowach jako oryginalną aplikację.

Załóżmy, że dokonaliśmy wszystkich niezbędnych zmian w aplikacji. Porozmawiamy więcej o wszystkich aspektach plików APK w. Teraz musisz to spakować z powrotem. Zapamiętajmy gotową aplikację w pakiecie jako zmodyfikowaną aplikację 2.

Teraz wyjaśnimy, dlaczego konieczne było zapamiętanie aplikacji jako oryginalnych i zmodyfikowanych 2. Aplikacja skompilowana programem ApkTool (lub wykorzystująca rozszerzenie graficznego interfejsu użytkownika typu SmartApkTool) nie będzie działać, ale nie stanowi to problemu. Wykonujemy następujące czynności:

Gromadzenie takich plików z powrotem do pliku APK jest dość proste. W tym celu należy uruchomić apktool z odpowiednią flagą kompilacji i przekazać mu ścieżkę do folderu, w którym znajduje się zdekompilowana aplikacja. Na przykład, jeśli mamy folder aplikacji, który znajduje się w tym samym katalogu co apktool, polecenie będzie wyglądać następująco:

Powłoka

Java -jar apktool.jar b aplikacja

java — jar apktool .jar b aplikacja

Po złożeniu gotowy plik APK będzie znajdować się w katalogu aplikacja/kompilacja. Następnie musisz podpisać plik APK. Ma to na celu zapewnienie działania aplikacji na urządzeniach, na których debugowanie jest zabronione. Oznacza to, że uruchamianie niepodpisanych aplikacji na takich urządzeniach jest zabronione. Więcej o certyfikatach cyfrowych i procedurze podpisywania plików przeczytasz tutaj.

Podpisywanie pliku jest bardzo proste: służy do tego specjalne narzędzie o nazwiesignapk. Należy go uruchomić podając najpierw certyfikaty jako argumenty, następnie ścieżkę do aplikacji, a na końcu ścieżkę do podpisanej aplikacji (wynik, gdzie go zapisać). Wygląda to mniej więcej tak:

Powłoka

java -jarsignapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar Signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Gdzie można zdobyć taki certyfikat, pytacie? Certyfikaty można znaleźć w Internecie. Lub wygeneruj go samodzielnie. Szczegółową instrukcję dotyczącą konfiguracji i generowania wszystkich niezbędnych plików znajdziesz np. .

Wniosek

Jak widać dekompilacja i składanie plików APK to dość prosty proces, który w dodatku można zautomatyzować, ułatwiając pracę badaczowi. Sama maszyna wirtualna Dalvik jest również łatwa do nauczenia i otwarta, co z jednej strony zmniejsza barierę wejścia dla programistów, z drugiej jest główną przyczyną tak dużego odsetka piractwa na platformie Android. Częściowo jest to powód, dla którego na przykład twórcy gier generalnie nie są zainteresowani wydawaniem ciekawych gier z fabułą. O wiele bardziej opłaca się, biorąc pod uwagę obecne nastawienie użytkowników, nitowanie gospodarstw darowiznami, które są do siebie uderzająco podobne. Dlatego kupujemy aplikacje, wspieramy programistów i w efekcie otrzymujemy ciekawe treści. Ale absolutnie nie ma potrzeby dawania darowizn!

Dziękuję wszystkim, do zobaczenia ponownie.