Dysk twardy w moim laptopie właśnie się zawiesił 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 na wyodrębnienie mojego kodu źródłowego z tego pliku APK?
android
android-resources
decompiling
apk
Frank Bozzo
źródło
źródło
javac -decompile
zgodna z wytycznymi SO. Wydaje mi się, że odpowiedzi są nie na temat , a nie pytanie.Odpowiedzi:
Prosty sposób: skorzystaj z narzędzia online http://www.javadecompilers.com/apk , prześlij apk i pobierz kod źródłowy.
Procedura dekodowania plików .apk, metoda krok po kroku:
Krok 1:
Utwórz nowy folder i skopiuj plik .apk, który chcesz zdekodować.
Teraz zmień nazwę rozszerzenia tego pliku .apk na .zip (np. Zmień nazwę z filename.apk na filename.zip) i zapisz go. Teraz możesz uzyskać dostęp do plików klas.dex itp. Na tym etapie możesz wyświetlić pliki rysunkowe, ale nie pliki XML i Java, więc kontynuuj.
Krok 2:
Teraz rozpakuj ten plik .zip w tym samym folderze (lub NOWYM FOLDERU).
Pobierz dex2jar i wypakuj go do tego samego folderu (lub NOWEGO FOLDERU).
Przenieś plik klas.dex do folderu dex2jar.
Teraz otwórz wiersz polecenia i zmień katalog na ten folder (lub NOWY FOLDER). Następnie napisz
d2j-dex2jar classes.dex
(w przypadku terminala Mac lub zapisu Ubuntu./d2j-dex2jar.sh classes.dex
) i naciśnij klawisz Enter. Teraz masz plik klas.dex.dex2jar w tym samym folderze.Pobierz dekompilator Java , kliknij dwukrotnie plik jd-gui, kliknij plik otwarty i otwórz plik class.dex.dex2jar z tego folderu: teraz masz pliki klas.
Zapisz wszystkie pliki klas (w jd-gui kliknij Plik -> Zapisz wszystkie źródła) według nazwy src. Na tym etapie otrzymujesz źródło Java, ale pliki .xml są nadal nieczytelne, więc kontynuuj.
Krok 3:
Teraz otwórz kolejny nowy folder
Umieść plik .apk, który chcesz zdekodować
Pobierz najnowszą wersję apktool ORAZ okno instalacji apktool (oba można pobrać z tego samego linku) i umieść je w tym samym folderze
Otwórz okno poleceń
Teraz uruchom polecenie jak
apktool if framework-res.apk
(jeśli go nie masz, pobierz tutaj ) i dalejapktool d myApp.apk
(gdzie myApp.apk oznacza nazwę pliku, który chcesz zdekodować)teraz masz folder plików w tym folderze i możesz łatwo odczytać pliki XML apk.
Krok 4:
To nie jest żaden krok, wystarczy skopiować zawartość obu folderów (w tym przypadku obu nowych folderów) do jednego
i ciesz się kodem źródłowym ...
źródło
framework-res.apk
. Pobierz go stądTo jest alternatywny opis - na wypadek, gdyby ktoś utknął z powyższym opisem. Wykonaj kroki:
apktool.bat
(lubapktool
dla Linux) iapktool_<version>.jar
ze strony http://ibotpeaches.github.io/Apktool/install/apktool.jar
i umieść oba pliki w tym samym folderzecmd.exe
) i przejdź do tego folderu; sprawdź, czy środowisko Java jest zainstalowane (w przypadku systemu Linux sprawdź także uwagi dotyczące wymaganych bibliotek)apktool decode [apk file]
Wynik pośredni : pliki zasobów,
AndroidManifest.xml
Wynik pośredni :
classes.dex
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=classes.dex
nadex2jar.bat
(lub wpisz<path_to>\dex2jar.bat classes.dex
w polu DOS; dla systemu Linuxdex2jar.sh
)Wynik pośredni :
classes_dex2jar.jar
classes_dex2jar.jar
(może być opcjonalny w zależności od używanego dekompilatora)Wynik : kod źródłowy
Uwaga: dekompilacja pakietów stron trzecich jest niedozwolona; ten przewodnik ma na celu odzyskanie osobistego kodu źródłowego tylko z pliku APK; ostatecznie wynikowy kod najprawdopodobniej zostanie zaciemniony
źródło
apktool
zwracająsmali
pliki? Jak zdobyćjava
plik?Chociaż możesz zdekompilować
APK
plik, prawdopodobnie natrafisz na jeden poważny problem:nie zwróci napisanego kodu. Zamiast tego zwróci wszystko, co wbudowany jest kompilator, ze zmiennymi o losowych nazwach, a także o funkcjach o nazwach losowych. Próba dekompilacji i przywrócenia go do kodu, który posiadałeś, może zająć znacznie więcej czasu niż rozpoczęcie od nowa.
Niestety takie rzeczy zabiły wiele projektów.
W przyszłości gorąco polecam naukę systemu kontroli wersji, takiego jak CVS , SVN i git itp.
i jak to zrobić.
źródło
W Sklepie Play pojawiła się także nowa aplikacja, za pomocą której można dekompilować apk (również aplikacje systemowe) 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 rootowania ani niczego innego.
Po prostu zainstaluj i baw się dobrze. Myślę, że to najłatwiejszy sposób na dekompilację aplikacji.
źródło
apktool to najlepsza rzecz, jaką możesz wypróbować. Zaoszczędziłem trochę xml, ale szczerze mówiąc nie wiem, jak to będzie działać z kodem .java.
Poleciłbym mieć repozytorium kodu, nawet jeśli jesteś jedynym koderem. Korzystam z Project Locker do własnych projektów. Daje darmowe repozytorium svn i git.
źródło
Te dwa artykuły opisują, jak połączyć użycie
apktool
idex2jar
pobranieAPK
pliku i utworzyć projekt Eclipse, który może go zbudować i uruchomić.Zasadniczo ty:
apktool
do pobierania plików zasobów z aplikacjidex2jar
aby uzyskać plik jar zawierający klasy w formacie, który spodoba się Eclipse.JDGui
aby wyświetlić kod źródłowyJDGui
, umieść go w klasie wewnątrz Eclipse i zmodyfikujźródło
apktool będzie działać. Nie musisz nawet znać magazynu kluczy, aby wyodrębnić kod źródłowy (co jest nieco przerażające). Główną wadą jest to, że źródło jest prezentowane w formacie Smali zamiast Java. Inne pliki, takie jak ikona i main.xml, przechodzą jednak doskonale, więc ich odzyskanie może być warte poświęcenia czasu. Ostatecznie najprawdopodobniej będziesz musiał ponownie napisać kod Java od zera.
Możesz znaleźć apktool tutaj . Wystarczy pobrać apktool i odpowiedniego pomocnika (dla Windows, Linux lub Mac OS). Polecam użycie takiego narzędzia, jak 7-zip, aby je rozpakować.
źródło
Można to zrobić na kilka sposobów:
Użyj funkcji „Profile or Debug APK” w Android Studio 3.0.
Pozwala otwierać i eksplorować pliki APK w Android Studio. Klasy są dekompilowane na smali. Zasoby nie są wyodrębniane, a rzeczy takie jak „Idź do definicji”, „Znajdź wszystkie odniesienia” i debugowanie nie działają bez kodu źródłowego (Android Studio 3.0 Canary 9). Niektóre dodatkowe funkcje smali mogą współpracować ze smalidea .
Użyj jadx .
Jadx dekompiluje kod z danego APK do plików źródłowych Java.
Użyj apktool .
Apktool to narzędzie wiersza polecenia, które wyodrębnia zasoby i dekompiluje kod do smali dla danej aplikacji. Możesz również skompilować ponownie za pomocą apktool. Oto przykład tego w akcji:
źródło
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 jego kod źródłowy.
Link w celach informacyjnych:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
źródło
Pokażę inny sposób dekompilacji plików .apk .
Możesz wykonać pierwsze 2 kroki z „ prankul garg ”. Masz więc inne możliwości:
Krok 3':
Pobierz „JD-GUI” , który łatwo znaleźć. Otwórz plik .jar w pliku „jd-gui.exe”. (Plik> Otwórz plik> „znaleziono plik .jar ”). Po tej procedurze możesz zapisać wszystkie zasoby w pliku .zip .
Więc,
1st - Musisz zmienić nazwę pliku .apk na .zip
2-ci - Trzeba dekodowania .dex pliku (jeśli chcesz, dekodować .apk plik dex2jar , to jest to możliwe)
3. - Musisz zdekodować plik .jar za pomocą JD-GUI
źródło
Poniżej narzędzie ONLINE :
http://www.javadecompilers.com/apk
robi WSZYSTKO jednym kliknięciem: zdekompilowane pliki .java + zasoby + xml (w jednym pliku .zip) z bardzo dobrym dekompilatorem (jadx zwraca kod java w miejscach / funkcjach, w których inne kompilacje zwracają komentarze wewnątrz funkcji takiej jak „niemożność dekompilacji” lub niektóre android asembler / kod maszynowy)
źródło
Ta strona https://www.apkdecompilers.com/ zrobiła to automatycznie.
Najpierw wypróbowałem witrynę wymienioną w zaakceptowanej odpowiedzi, ale to nie działało dla mnie.
źródło
Osobiście polecam Pokaż aplikację Java na Androida, aby uzyskać kod źródłowy. Możesz pobrać go ze sklepu Play lub stąd
źródło
Apktool do inżynierii wstecznej zewnętrznych, zamkniętych, binarnych aplikacji na Androida.
Może dekodować zasoby do prawie oryginalnej formy i odbudowywać je po wprowadzeniu pewnych modyfikacji.
Umożliwia debugowanie kodu smali krok po kroku. Ułatwia także pracę z aplikacją ze względu na strukturę plików podobną do projektu i automatyzację niektórych powtarzalnych zadań, takich jak budowanie aplikacji itp.
http://ibotpeaches.github.io/Apktool/
źródło
apktool jest NAJLEPSZĄ drogą. Istnieje również internetowa usługa apktool: http://www.javadecompilers.com/apktool
Oczywiście istnieją pewne ograniczenia związane z usługą „natura online”: możesz wyodrębnić i zbadać zasoby oraz plik manifestu, ale w tej chwili nie można ponownie skompilować aplikacji.
Jest to jednak bezproblemowy sposób na „otwarcie” aplikacji na Androida.
źródło
Możesz wypróbować DexPatcher . Integruje się nawet z Android Studio. Wykorzystuje wewnętrznie Apktool i Dex2Jar .
Z tych narzędzi można również korzystać niezależnie. Apktool dekompiluje apk i wyodrębnia pliki .dex, które można dalej konwertować do jar za pomocą Dex2Jar. Słoik można dekompilować za pomocą JD-GUI . Możesz zobaczyć kod Java za pomocą tego narzędzia. Chociaż nie można zagwarantować podobieństwa zdekompilowanego kodu do kodu rzeczywistego. Na rynku dostępnych jest kilka zaawansowanych narzędzi zaciemniania kodu , które psują kod, co utrudnia jego dekompilację / zrozumienie. na przykład. Postęp
źródło
na podstawie twojego stanu, jeśli twój Android apk:
Warunek 1: NIE twardnieje (Tencent Legu / Qihoo 360 / ...)
Wybór1: korzystanie z usługi online
Jak na przykład:
za pomocą www.javadecompilers.com
iść do:
automatycznie dekodować z APK do kodu źródłowego Java
kroki:
upload
plik apk + kliknijRun
+ poczekaj trochę + kliknij,Download
aby uzyskać zip + rozpakuj ->sources/com/{yourCompanyName}/{yourProjectName}
to oczekiwany kod źródłowy Java
Choice2: samodzielnie dekompiluj / crack
użyj odpowiedniego narzędzia do samodzielnej dekompilacji / crack:
użyj
jadx
/jadx-gui
przekonwertujapk
najava sourcecode
pobierz jadx-0.9.0.zip, następnie rozpakuj do got
bin/jadx
, a następnie:jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
sources
iresources
sources/com/{yourCompanyName}/{yourProjectName}
jest twoje oczekiwaniejava sourcecode
jadx-0.9.0/bin/jadx-gui
(Linuxjadx-gui.sh
/ Windowsjadx-gui.bat
)apk
pliksave all
lubsave as Gradle project
na przykład:
Condition2: harden (autor: Tencent Legu / Qihoo 360 / ...)
główna metoda
3 steps
:apk/app to dex
dex to jar
jar to java src
szczegółowe wyjaśnienie:
Krok 1:
apk/app to dex
użyj narzędzia (
FDex2
/ DumpDex) zrzutu / zaczepienia (jednego lub wielu)dex
plików z uruchomionej aplikacjikroki:
przygotować środowisko
root
wyd androidFDex2
/ DumpDex w XPosed i włącz gozrzuć
dex
z uruchomionej aplikacjiuruchom,
FDex2
a następnie kliknij nazwę apk, aby umożliwić później przechwytywanie / przechwytywanie pliku dex/data/data/com/yourCompanyName/yourProjectName
dex
plikówKrok 2:
dex to jar
użyj narzędzia tool (
dex2jar
) przekonwertować (określony, zawierający logikę aplikacji)dex
plik dojar
plikupobierz dex2jar dostałem dex-tools-2.1-SNAPSHOT.zip , rozpakuj
dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh
, a następniesh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex
na przykład:
Krok 3:
jar to java src
użyj jednego z narzędzi:
przekonwertować
jar
najava src
dla efektu konwersji ze słoika na java src:
Jadx
>Procyon
>CRF
>>JD-GUI
więc polecam użyć:
Jadx
/jadx-gui
kroki:
jadx-gui
dex
plikFile
->save all
na przykład:
eksportowane java src:
Bardziej szczegółowe wyjaśnienie można znaleźć w moim internetowym samouczku na temat chińskiego ebooka :
źródło
Android studio oferuje analizę dowolnego pliku apk.
1 - Z menu kompilacji wybierz opcję analizy apk i wybierz plik apk. 2 - Spowoduje to powstanie pliku klas.dex i innych plików. 3 - Kliknij na class.dex, który wyświetli listę folderów, pakietów, bibliotek i plików. 4 - Z i ustawienia studia Android instalują wtyczkę o nazwie „Dex to Jar” 5 - kliknij dowolny plik aktywności wyodrębnionego projektu i wybierz dex do jar z menu kompilacji.
Spowoduje to wyświetlenie rzeczywistego kodu pliku Java.
Twoje zdrowie.
źródło
Najprostszym sposobem jest użycie dekompilatora Apk OneClick. Jest to pakiet narzędzi do dekompilacji i dezasemblacji plików APK (pakiety dla systemu Android).
FUNKCJE
WYMAGANIA
Środowisko Java Runtime Environment (JRE) musi być zainstalowane.
Możesz go pobrać z tego linku Dekompilator Apk OneClick
Ciesz się tym.
źródło
Znalazłem następujące jako najprostszą metodę:
źródło
Jest na to aplikacja i zazwyczaj wystarczy kilka kliknięć i gotowe. https://github.com/Nuvolect/DeepDive-Android
Następnie możesz przejrzeć kod źródłowy, pobrać go na inny komputer z elFinder lub przeszukać go za pomocą Lucene.
Oprócz Jadx ma dekompilatory CFR i Fernflower.
źródło
Przez kilka dni doprowadzałem się do szału, próbując nakłonić dex2jar do pracy na laptopie fedora 31 przeciwko aplikacji, która po prostu nie działała. Ten skrypt w Pythonie 3 zrobił to w kilka minut, a instalacja jd-gui sprawiła, że pliki klas były czytelne dla ludzi.
http://java-decompiler.github.io/
https://github.com/Storyyeller/enjarify
w szczególności oto co uruchomiłem:
Teraz można uzyskać dostęp do następujących plików rumu:
I aby uruchomić jd-gui:
Następnie wystarczy otworzyć pliki zajęć!
źródło
Opracowałem narzędzie - Code Analyzer, działa na iPhone / iPad / Mac, do analizy plików Java / Android, https://decompile.io
źródło
Użyj tego narzędzia http://www.javadecompilers.com/
Ale ostatnio na rynek wypłynęła nowa fala dekompilatorów: Procyon, CFR, JD, Fernflower, Krakatau, Candle.
Oto lista dekompilatorów prezentowanych na tej stronie:
CFR - bezpłatny, brak kodu źródłowego, http://www.benf.org/other/cfr/ Autor: Lee Benfield
Bardzo dobrze zaktualizowany dekompilator! CFR jest w stanie dekompilować nowoczesne funkcje Java - moduły Java 9, lambda Java 8, przełączniki Java 7 String itp. Nawet porządnie zmieni pliki klas z innych języków JVM z powrotem w java!
JD - bezpłatny tylko do użytku niekomercyjnego, http://jd.benow.ca/ Autor: Emmanuel Dupuy
Zaktualizowany w 2015 roku. Ma własny interfejs wizualny i wtyczki do Eclipse i IntelliJ. Napisane w C ++, więc bardzo szybko. Obsługuje Java 5.
Procyon - open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler Autor: Mike Strobel
Fernflower - open-source, https://github.com/fesh0r/fernflower Autor: Egor Ushakov
Zaktualizowano w 2015 r. Bardzo obiecujący analityczny dekompilator Java, teraz staje się integralną częścią IntelliJ 14. ( https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler ) Obsługuje Javę do wersji 6 (Adnotacje, ogólne, wyliczenia)
JAD - podany tutaj tylko z powodów historycznych. Bezpłatnie, brak kodu źródłowego, lustro do pobrania jad Autor: Pavel Kouznetsov
źródło