Inżynieria wsteczna z pliku APK do projektu

244

Przypadkowo usunąłem swój projekt z Eclipse , a wszystko, co mi pozostało, to plik APK , który przesłałem na telefon. Czy istnieje sposób na odwrócenie procesu eksportowania aplikacji do pliku .apk, aby odzyskać mój projekt?

Marko Cakic
źródło
2
wiesz, że zaćmienie ma własną historię wersji?
eis
4
jeśli piszesz coś ważnego, powinieneś użyć VCS. Bitbucket ma bezpłatne prywatne repozytoria.
lxknvlk
github.com/skylot/jadx
Saurabh Bhoomkar

Odpowiedzi:

287

Istnieją dwa przydatne narzędzia, które wygenerują kod Java (szorstki, ale wystarczająco dobry) z nieznanego pliku APK.

  1. Pobierz narzędzie dex2jar z dex2jar .
  2. Użyj narzędzia do konwersji pliku APK do JAR :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. Po wygenerowaniu pliku JAR użyj JD-GUI, aby otworzyć plik JAR. Zobaczysz pliki Java.

Dane wyjściowe będą podobne do:

JD GUI

Rahul
źródło
6
jak zdobyć pliki zasobów
srini
26
cmd jest przestarzałe, użyj d2j-dex2jarzamiast niego (v0.0.9.15).
Fredrick Gauss
1
@sri po prostu zmień nazwę pliku apk, aby go skompresować i rozpakować, będziesz mieć pliki zasobów w resfolderze
Hoang Huynh
8
@HoangHuynh będziesz mieć resfolder z nieczytelnymi plikami xml
S.Thiongane
6
Na Macrazie nie można używać dex2jar: permission deniedzrób to $sudo chmod +x d2j-dex2jar.sh
min2
81

Przede wszystkim polecam thiswideo, aby to rozwiało wszystkie twoje wątpliwości

Jeśli nie, proszę przejść przez to

Procedure for decoding .apk files, step-by-step method:

Step 1:

Utwórz nowy folder i umieść w nim plik .apk (który chcesz zdekodować). Teraz zmień nazwę rozszerzenia tego .apkpliku na .zip(np .: zmień nazwę z filename.apk na filename.zip) i zapisz.

W przypadku problemów z konwersją do formatu .zip prosimy o odniesienie link

Po otrzymaniu .zip otrzymujesz teraz pliki klas.dex itp. Na tym etapie możesz wyświetlać pliki rysunkowe, ale nie xml i java, więc kontynuuj. Jeśli nie widzisz, że rozszerzenia przechodzą, sprawdź konfigurację

Step 2:

Teraz rozpakuj ten plik zip apk w tym samym folderze. Teraz pobierz dex2jar z tegolink

i wypakuj go do tego samego folderu. Teraz otwórz wiersz polecenia i zmień katalog na ten folder.

Następnie napisz dex2jar classes.dexi naciśnij enter. Teraz masz classes.dex.dex2jarplik w tym samym folderze.

Następnie pobierz dekompilator Java

A teraz dwukrotnie kliknij jd-gui i kliknij otwarty plik. Następnie otwórz classes.dex.dex2jarplik z tego folderu. Teraz otrzymujesz pliki klas i zapisujesz wszystkie pliki klas (kliknij plik, a następnie kliknij „zapisz wszystkie źródła” w jd-gui) według nazwy src. Wyodrębnij ten plik zip(classes_dex2jar.src.zip) a otrzymasz wszystkie pliki Java aplikacji.

Na tym etapie masz źródło Java, ale pliki XML nadal są nieczytelne, więc kontynuuj.

Step 3:

Teraz otwórz kolejny nowy folder i umieść te pliki

  1. umieść plik .apk, który chcesz zdekodować

  2. pobierz Apktool dla windows v1.xAndApktool

zainstaluj okno za pomocą Google i umieść w tym samym folderze

  1. pobierz plik framework-res.apk za pomocą Google i umieść w tym samym folderze (nie wszystkie pliki apk wymagają pliku framework-res.apk)

  2. Otwórz okno poleceń

  3. Przejdź do katalogu głównego APKtool i wpisz następujące polecenie: apktool if framework-res.apk.

Powyższe polecenie powinno skutkować Framework installed ....

  1. apktool d „nazwa_aplikacji” .apk („nazwa_aplikacji” oznacza aplikację, którą chcesz zdekodować), teraz masz folder plików w tym folderze i teraz możesz łatwo czytać pliki xml.

Step 4: Wreszcie otrzymaliśmy res/kod projektu Java, który jest naszym celem na początku.

P.S. Jeśli nie możesz uzyskać folderu res za pomocą powyższych kroków, zainstaluj nowy apktool

  • Czy zainstalowano Javę 1.7? Zainstaluj Apktool 2.x
  • Czy zainstalowana jest Java 1.6 lub wyższa? Zainstaluj Apktool 1.x

Enjoy and happy coding

Sonar Swapnil
źródło
naprawdę przydatne. Po prostu coś, o czym nie wspomniałeś: apktool.jarnie ma go w tym samym pakiecie, wziąłem go z poprzedniego pakietu i wkleiłem w tym samym katalogu, co apktool.
S.Thiongane
1
odwróciłem inżynier kodu, ale dlaczego nazwa klasy, zmienne są jak aa, bc itp., a także wiele błędów
2934930
1
nie można tego zrobić w cmd
Meghal Agrawal
w jakikolwiek inny sposób?
Meghal Agrawal
2
@ user2934930 Oznacza to, że kod został zaciemniony przy użyciu ProGuard.
cascal
58

Bez oprogramowania i bez zbyt wielu kroków ..

Po prostu prześlij swój pakiet APK i uzyskaj wszystkie zasoby z tej witryny ..

https://www.apkdecompilers.com/

Ta strona internetowa dekompiluje kod osadzony w plikach APK i wyodrębni wszystkie pozostałe zasoby w pliku.

Uwaga: dekompiluję plik APK i otrzymuję kod w ciągu jednej minuty z tej witryny

Aktualizacja 1 :

Znalazłem inną witrynę dekompilatora online,

http://www.javadecompilers.com/apk/ - Nie działa stale, prosząc o blokowanie wyskakujących okienek

Aktualizacja 2:

Znalazłem aplikację dekompilatora apk w sklepie Play,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

Możemy dekompilować pliki apk w naszym telefonie z Androidem. a także możemy przeglądać pliki Java i XML w tej aplikacji

Aktualizacja 3:

Możemy użyć innej opcji Analizuj APK z wersji Android studio 2.2

Kompiluj -> Analizuj APK -> Wybierz swój APK -> daje wyniki

wprowadź opis zdjęcia tutaj

Ranjith Kumar
źródło
3
w ostatniej metodzie nie możemy otworzyć klasy java, pokazuje tylko nazwy metod
Choletski
@Choletski czy wypróbowujesz ShowJava? jeśli nie, spróbuj mnie zaktualizować
Ranjith Kumar
@RanjithKumar jest ograniczony do wielkości 50 MB APK .. Mam 85 MB APK do dekompilacji.
Ravi Sharma
@RaviSharma wypróbuj ten play.google.com/store/apps/details?id=in.pounkumar.apkextractor
Ranjith Kumar
1
Jak uruchomić ten zdekompilowany projekt w Android Studio? czy ktoś może o tym napisać?
mayur kukadiya
4

Nie całkiem. Istnieje wiele pakietów dezasemblera / dekompilatora dex, takich jak smali lub dex2jar, które będą generować pół-czytelne dane wyjściowe (w przypadku dex2jar można uzyskać kod Java za pomocą czegoś takiego jak JD-GUI, ale proces jest nie jest idealny i jest bardzo mało prawdopodobne, że będziesz w stanie w 100% odtworzyć kod źródłowy, jednak może potencjalnie dać ci miejsce do rozpoczęcia odbudowy twojego drzewa źródłowego.

Chris Thompson
źródło
@MAC: Potrzebuje źródła, a nie pliku APK !!
Shashank Kadne
2
@ShashankKadne może być, że nie biorę słów z powrotem
MAC
3

Tak, możesz odzyskać swój projekt. Po prostu zmień nazwę yourproject.apkpliku na yourproject.zip, a otrzymasz wszystkie pliki w tym pliku ZIP. Zmieniamy rozszerzenie pliku z .apk na .zip. Z tego pliku ZIP rozpakuj plikclasses.dex plik i dekompiluj go w następujący sposób.

Po pierwsze potrzebujesz narzędzia do wyodrębnienia wszystkich (skompilowanych) klas DEX do pliku JAR. Jest taki o nazwie dex2jar , wykonany przez chińskiego studenta.

Następnie można użyć interfejsu JD-GUI do dekompilacji klas w pliku JAR do kodu źródłowego. Wynikowy kod źródłowy powinien być dość czytelny, ponieważ dex2jar stosuje pewne optymalizacje.

Gwiazda
źródło
3

W przypadku platformy Android możesz wypróbować program ShowJava , dostępny w Sklepie Play.

Wygenerowany kod można sprawdzić za pomocą interfejsu aplikacji, a wygenerowane pliki Java i struktura folderów są przechowywane w ShowJavafolderze /sdcard, obok .jarpliku wynikowego z konwersji.

Aplikacja jest bezpłatna z banerem reklamowym u dołu głównego widoku, ale istnieje możliwość zakupu w aplikacji (3,99 $), aby ją usunąć. Zakup w aplikacji nie dodaje żadnej funkcji poza usunięciem banera reklamowego.

Ujawnienie: Nie jestem twórcą aplikacji ani nie jestem z nim związany w żaden sposób.

Stephane Piriou
źródło
Zwykle używam go do ...
Ładnej
2

Wykonaj poniższe kroki, aby to zrobić, lub po prostu użyj klejnotu apkToJava do tego procesu, a nawet zajmie się zainstalowaniem wymaganych narzędzi, aby działał.

  • przekonwertować plik apk na zip
  • rozpakuj plik
  • wyodrębnij z niego klasy.dex
  • użyj dex do jar do konwersji klas.dex do pliku jar
  • użyj jadx gui, aby otworzyć plik jar jako kod źródłowy Java
Ajit Singh
źródło
2

Jeśli szukasz profesjonalnej alternatywy, zapoznaj się z dekompilatorem JEB z firmy PNF Software.

Istnieje wersja demonstracyjna, która pozwoli Ci na dekompilację większości kodu.

Nacięcie
źródło
2

Poniżej znajdują się niektóre z narzędzi, których można użyć do wykonania inżynierii wstecznej z pliku APK do kodu źródłowego:

  1. Dex2jar
  2. Dekompilator Java
  3. Apktool
  4. Analizator APK
Mandeep Yadav
źródło
2

W Android Studio 3.5 jest to tak proste, że możesz to osiągnąć w ciągu minuty. Poniżej przedstawiono krok po kroku.

1: Otwórz Android Studio, naciśnij przycisk okna -> Wpisz Android Studio -> kliknij ikonę, aby otworzyć ekran powitalny Android Studio, który będzie wyglądał następująco.

wprowadź opis zdjęcia tutaj

2: Tutaj możesz zobaczyć opcję „Profiluj lub debuguj APK” kliknij na nią, wybierz plik apk i naciśnij OK.

wprowadź opis zdjęcia tutaj

3: Otworzy wszystkie twoje manifesty i klasy java za minutę, w zależności od wielkości apk.

wprowadź opis zdjęcia tutaj

Otóż ​​to.

Imran Qamer
źródło
2

Wypróbuj to narzędzie: https://decompile.io , działa na iPhone / iPad / Mac wprowadź opis zdjęcia tutaj

Qing Xu
źródło