Czy istnieje sposób, aby uzyskać kod źródłowy z pliku APK?

Dysk twardy w moim laptopie właśnie się rozbił i straciłem cały kod źródłowy aplikacji, nad którą pracowałem przez ostatnie dwa miesiące. Wszystko, co mam, to plik APK, który jest przechowywany w mojej wiadomości e-mail od momentu wysłania go do znajomego.

Czy Jest jakiś sposób, aby wyodrębnić mój kod źródłowy z tego pliku APK?

Author: Jeroen Vannevel, 2010-08-29

16 answers

Prosty sposób: użyj narzędzia online http://www.javadecompilers.com/apk , prześlij apk i pobierz kod źródłowy.


Procedura dekodowania .pliki apk, metoda krok po kroku:

Krok 1:

  1. Utwórz nowy folder i skopiuj go.plik apk, który chcesz rozszyfrować.

  2. Teraz zmień nazwę rozszerzenia tego .plik apk do .zip (np. zmiana nazwy z nazwy pliku.apk do nazwy pliku.zip) i zapisać go. Teraz możesz uzyskać dostęp do klas.pliki dex itp. Na tym etapie możesz zobaczyć obiekty rysowane, ale nie pliki xml i java, więc kontynuuj.

Krok 2:

  1. Teraz wyciągnij to .plik zip w tym samym folderze (lub nowym folderze).

  2. Pobierz dex2jar i rozpakuj go do tego samego folderu (lub nowego folderu).

  3. Przenieś zajęcia.plik dex do folderu dex2jar.

  4. Teraz otwórz wiersz polecenia i zmień katalog na ten folder (lub nowy FOLDER). Następnie napisz d2j-dex2jar classes.dex (dla terminala mac lub Ubuntu write ./d2j-dex2jar.sh classes.dex) i naciśnij enter. Masz teraz zajęcia.dex.plik dex2jar w tym samym folderze.

  5. Pobierz Java decompiler , Kliknij dwukrotnie jd-gui, kliknij Otwórz plik i otwarte klasy.dex.plik dex2jar z tego folderu: teraz dostajesz pliki klas.

  6. Zapisz wszystkie te pliki klas (w JD-gui, kliknij Plik - > Zapisz wszystkie źródła) według nazwy src. Na tym etapie dostajesz źródło Javy, alepliki xml są nadal nieczytelne, więc Kontynuuj.

Krok 3:

Teraz otwórz kolejny nowy folder

  1. Włóż .plik apk, który chcesz rozszyfrować

  2. Pobierz najnowszą wersję apktool i apktool install window (oba można pobrać z tego samego linku) i umieść je w tym samym folderze

  3. Otwórz okno poleceń

  4. Teraz uruchom polecenie apktool if framework-res.apk i następne

  5. apktool d myApp.apk (gdzie myApp.apk oznacza nazwa pliku, który chcesz dekodować)

Teraz masz folder plików w tym folderze i możesz łatwo odczytać pliki XML apk.

Krok 4:

To nie jest żaden krok po prostu skopiuj zawartość obu folderów (w tym przypadku oba nowe foldery)do jednego

I cieszyć się kodem źródłowym...

 1408
Author: Prankul Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-14 12:11:15

To jest alternatywny opis - na wszelki wypadek, gdyby ktoś utknął z opisem powyżej. Wykonaj kroki:

  1. Pobierz apktool.bat (lub apktool dla Linuksa) i apktool_<version>.jar od http://ibotpeaches.github.io/Apktool/install/
  2. Zmień nazwę pliku jar z góry na apktool.jar i umieść oba pliki w tym samym folderze

  3. Otwórz pole dos (cmd.exe) i zmień do tego folderu; sprawdź, czy środowisko Java jest zainstalowane (dla Linuksa sprawdź również uwagi dotyczące wymaganych bibliotek)
  4. Start: apktool decode [apk file]

    Intermediate result: resource files, AndroidManifest.xml

  5. rozpakuj plik APK za pomocą wybranego rozpakowacza

    wynik pośredni: classes.dex

  6. Pobierz i wypakuj dex2jar-0.0.9.15.zip z http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. przeciągnij i upuść classes.dex na dex2jar.bat (lub wprowadź <path_to>\dex2jar.bat classes.dex W polu DOS; dla Linuksa dex2jar.sh)

    wynik pośredni: classes_dex2jar.jar

  8. rozpakuj classes_dex2jar.jar (może być opcjonalne w zależności od używanego dekompilatora)
  9. dekompiluj pliki klas (np. za pomocą JD-GUI lub DJ Decompiler)

    wynik: kod źródłowy

Uwaga: nie wolno dekompilować pakietów innych firm; ten przewodnik ma na celu odzyskanie osobistego kodu źródłowego tylko z pliku APK; ostatecznie, wynikowy kod będzie najprawdopodobniej obfuscated

 108
Author: Trinimon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 00:47:17

Chociaż możesz zdekompilować swój plik APK, prawdopodobnie trafisz na jeden duży problem:

Nie zwróci kodu, który napisałeś. Zamiast tego zwróci to, co wbudowany kompilator, ze zmiennymi o losowych nazwach, a także funkcjami o losowych nazwach. Próba dekompilacji i przywrócenia go do posiadanego kodu może zająć znacznie więcej czasu niż rozpoczęcie od nowa. Niestety, takie rzeczy zabiły wiele projektów.
Dla przyszłości, Gorąco polecam naukę systemu kontroli wersji, takiego jak CVS, SVN i git itd.

I jak to zrobić.

 99
Author: Ryan Gooler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 11:59:05

Istnieje również nowa aplikacja w Play Store za pomocą której można dekompilować apk (aplikacje systemowe też) i przeglądać kod źródłowy bezpośrednio na smartfonie. Zapisuje pliki na karcie SD, dzięki czemu można je również wyświetlić na komputerze. Nie wymaga korzenia ani czegoś innego.

Po prostu zainstaluj i baw się dobrze. Myślę, że jest to najprostszy sposób na dekompilację aplikacji.

 47
Author: Cilenco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-11 12:49:24

Apktool jest najlepszą rzeczą, jaką możesz spróbować. Zapisałem z nim trochę xml, ale szczerze mówiąc Nie wiem, jak to będzie działać z .kod java.

Polecam Ci mieć repozytorium kodu, nawet jeśli jesteś jedynym koderem. Używam Project Locker do własnych projektów. Daje darmowe repos svn i git.

 24
Author: Macarse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 07:04:47

Te dwa artykuły opisują jak połączyć użycie apktool i dex2jar Aby pobrać plik APK i stworzyć projekt Eclipse, który może go zbudować i uruchomić.

Http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

Http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

W zasadzie ty:

  1. użyj apktool, aby pobrać pliki zasobów z apk
  2. Użycie dex2jar aby uzyskać plik jar zawierający klasy w formacie, który spodoba się Eclipse.
  3. Tworzenie projektu Eclipse skieruj go na pliki zasobów i nowy plik jar
  4. Otwórz plik JAR za pomocą narzędzia zip i usuń istniejące zasoby
  5. Otwórz plik jar za pomocą JDGui, aby wyświetlić kod źródłowy
  6. weź kod źródłowy z JDGui, włóż go do klasy wewnątrz Eclipse i zmodyfikuj go
  7. usuń tę klasę z pliku jar (więc nie masz ta sama klasa zdefiniowana wielokrotnie)
  8. uruchom go.
 20
Author: Tom Hennen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 13:00:25

Apktool zadziała. Nie musisz nawet znać keystore, aby wyodrębnić kod źródłowy (co jest trochę przerażające). Głównym minusem jest to, że źródło jest przedstawione w formacie Smali zamiast Javy. Inne pliki, takie jak icon i main.xml przechodzi jednak doskonale i może warto poświęcić czas, aby przynajmniej je odzyskać. Ostatecznie najprawdopodobniej będziesz musiał napisać swój kod Java od podstaw.

Możesz znaleźć apktool tutaj . Wystarczy pobrać apktool i odpowiedni helper(Dla Windows, Linux lub Mac OS). Polecam użyć narzędzia takiego jak 7-zip, aby je rozpakować.

 16
Author: Ryan Berger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-29 04:02:46

Jest na to kilka sposobów:

  1. Użyj funkcji "profil lub Debuguj APK" w Android Studio 3.0.

    To pozwala na otwieranie i odkrywanie APK w Android Studio. Klasy są dekompilowane do smali. Zasoby nie są wyodrębniane i rzeczy takie jak "przejdź do definicji", "Znajdź wszystkie odniesienia" i debugowanie nie działa bez kodu źródłowego (android studio 3.0 canary 9). Niektóre dodatkowe funkcje smali mogą działać z smalidea .

    android-studio

    wybierz-plik

    kod

  2. Użyj jadx .

    Jadx dekompiluje kod z danego APK do plików źródłowych Javy.

    jdax-img

  3. Użyj apktool .

    Apktool jest narzędziem wiersza poleceń, które wyodrębnia zasoby i dekompiluje kod do smali dla danego apk. Możesz również przekompilować używając apktool. Oto przykład tego w akcji:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...
    
 6
Author: 0xcaff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 03:27:00

Może być łatwo zobaczyć Źródło:

W Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile.
Zobaczysz, że to kod źródłowy.

Linf dla reference:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

 6
Author: SKK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 12:40:29

Pokażę Ci inny sposób dekompilacji .pliki apk.

Możesz wykonać pierwsze 2 kroki z " prankul garg". Więc masz inne możliwości:

Krok 3':

Pobierz "JD-GUI" , łatwo go znaleźć. Otwórz .Jar plik w "JD-gui.exe". (Plik > Otwórz plik > ' znaleziono .Jar file'). Po tej procedurze możesz zapisać wszystkie zasoby w .plik zip.

Więc,

1st - You trzeba zmienić nazwę .plik apk do .zip

2-musisz odkodować .plik dex (jeśli chcesz, odkoduj .apk plik do dex2jar , to możliwe)

3-musisz odkodować .jar Plik z JD-GUI

 5
Author: Franklin Hirata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-25 12:22:01

Poniżej Online Narzędzie:

Http://www.javadecompilers.com/apk

Robi wszystko jednym kliknięciem: dekompiluje .pliki java + zasoby + xml (w jednym .plik zip) z bardzo dobrym dekompilatorem (jadx zwraca kod Javy w miejscach / funkcjach, w których inne Kompilatory zwracają komentarze wewnątrz funkcji, takie jak" unable to decompile " lub jakiś asembler/kod maszynowy Androida)

 4
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 12:40:49

Apktool dla inżynierii odwrotnej 3rd party, zamknięte, binarne Aplikacje Android.

Może dekodować zasoby do niemal oryginalnej formy i odbudowywać je po dokonaniu pewnych modyfikacji.

Umożliwia debugowanie kodu SMALI krok po kroku. Również to sprawia, że praca z aplikacją łatwiejsze z powodu projektu jak struktury plików i automatyzacji niektórych powtarzalnych zadań, takich jak budowanie apk, itp.

Http://ibotpeaches.github.io/Apktool/

 3
Author: Biswajit Karmakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-15 08:21:25

This site https://www.apkdecompilers.com / zrobił to automatycznie.

Najpierw wypróbowałem stronę wymienioną w zaakceptowanej odpowiedzi, ale to nie zadziałało dla mnie.

 3
Author: M. Usman Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 06:20:23

Osobiście polecam Show Java Android App aby uzyskać kod źródłowy. Możesz go pobrać ze Sklepu play lub z tutaj

 3
Author: Codelover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-30 11:39:36

Apktool {[2] } jest drogą do zrobienia. Istnieje również serwis internetowy apktool: http://www.javadecompilers.com/apktool

Pewne ograniczenia, oczywiście, istnieją ze względu na usługę "natura online": można wyodrębnić i badania zasobów i pliku manifestu, ale jest to niemożliwe, aby przekompilować aplikację w tej chwili.

Mimo to jest to bezproblemowy sposób na "otwarcie" aplikacji na Androida.

 2
Author: Andrew Rukin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 05:51:03

Możesz spróbować DexPatcher . Integruje się nawet z Android Studio. Używa Apktool i Dex2Jar wewnętrznie.
Możesz również korzystać z tych narzędzi niezależnie. Apktool dekompiluje apk i wyciągi .pliki dex, które można dodatkowo przekonwertować do jar za pomocą Dex2Jar. Jar można dekompilować używając JD-GUI . Możesz zobaczyć kod Java za pomocą tego narzędzia. Chociaż podobieństwo dekompilowanego kodu do rzeczywistego kodu nie może być zagwarantowane. Tam czy na rynku dostępne są zaawansowane narzędzia do maskowania kodu, które psują kod, utrudniając jego dekompilację / zrozumienie. np. Proguard

 2
Author: Lakshmikant Deshpande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-16 10:53:37