Ingegneria inversa da un file APK a un progetto


244

Ho accidentalmente cancellato il mio progetto da Eclipse e tutto ciò che mi è rimasto è il file APK che ho trasferito sul mio telefono. C'è un modo per invertire il processo di esportazione di un'applicazione nel file .apk, in modo da poter riavere il mio progetto?



2
sai che eclipse ha una sua cronologia delle versioni?
eis,


4
se stai scrivendo qualcosa di importante per te, dovresti usare un VCS. Bitbucket ha repository privati ​​gratuiti.
lxknvlk

Risposte:


287

Esistono due strumenti utili che genereranno il codice Java (approssimativo ma abbastanza buono) da un file APK sconosciuto.

  1. Scarica lo strumento dex2jar da dex2jar .
  2. Utilizzare lo strumento per convertire il file APK in JAR :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. Una volta generato il file JAR, utilizzare JD-GUI per aprire il file JAR. Vedrai i file Java.

L'output sarà simile a:

JD GUI


6
come ottenere i file di risorse
srini

26
cmd è obsoleto, utilizzare d2j-dex2jarinvece (v0.0.9.15).
Fredrick Gauss,

1
@sri basta rinominare il file apk per comprimerlo ed estrarlo, avrai i file delle risorse nella rescartella
Hoang Huynh

8
@HoangHuynh avrai una rescartella con file XML illeggibili
S.Thiongane

6
In Macse non è possibile utilizzare dex2jar: permission deniedpoi fare questo $sudo chmod +x d2j-dex2jar.sh
Min2

81

Prima di tutto raccomando che il thisvideo possa chiarire tutti i tuoi dubbi

Altrimenti, per favore, passaci attraverso

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

Step 1:

Crea una nuova cartella e inserisci il file .apk (che vuoi decodificare). Ora rinominare l'estensione di questo .apkfile in .zip(es .: rinominare da nomefile.apk in nomefile.zip) e salvarlo.

Se si verificano problemi nella conversione in .zip link

Dopo aver ricevuto .zip ora ottieni i file classes.dex, ecc. A questo punto puoi vedere file disegnabili ma non xml e java, quindi continua. Se non vedi passare le estensioni controlla la configurazione

Step 2:

Ora estrai questo file apk zip nella stessa cartella. Ora scarica dex2jar da questolink

ed estrarlo nella stessa cartella. Ora apri il prompt dei comandi e cambia la directory in quella cartella.

Quindi scrivere dex2jar classes.dexe premere invio. Ora ottieni il classes.dex.dex2jarfile nella stessa cartella.

Quindi scaricare il decompilatore java

E ora fai doppio clic su jd-gui e fai clic sul file aperto. Quindi apri il classes.dex.dex2jarfile da quella cartella. Ora ottieni i file di classe e salva tutti questi file di classe (fai clic sul file, quindi fai clic su "salva tutte le fonti" in jd-gui) per nome src. Estrai quel file zip (classes_dex2jar.src.zip)e otterrai tutti i file java dell'applicazione.

A questo punto ottieni java source ma i file xml sono ancora illeggibili, quindi continua.

Step 3:

Ora apri un'altra nuova cartella e metti questi file

  1. metti il ​​file .apk che vuoi decodificare

  2. scarica Apktool per windows v1.xAndApktool

installa la finestra usando google e inserisci la stessa cartella

  1. scarica il file framework-res.apk usando google e mettilo nella stessa cartella (non tutti i file apk richiedono il file framework-res.apk)

  2. Apri una finestra di comando

  3. Passare alla directory principale di APKtool e digitare il comando seguente: apktool if framework-res.apk.

Il comando sopra dovrebbe comportare Framework installed ....

  1. apktool d "nomeApp" .apk ("nomeApp" indica l'applicazione che si desidera decodificare) ora si ottiene una cartella di file in quella cartella e ora è anche possibile leggere facilmente i file XML.

Step 4: Finalmente abbiamo ottenuto res/sia il codice del progetto java che il nostro obiettivo all'inizio.

P.S. Se non riesci a ottenere la cartella res seguendo i passaggi precedenti, installa new apktool

  • Java 1.7 è installato? Installa Apktool 2.x
  • Java 1.6 o versione successiva è installato? Installa Apktool 1.x

Enjoy and happy coding


davvero utile. Solo qualcosa che non hai menzionato: apktool.jarnon è nello stesso pacchetto, l'ho preso da un pacchetto precedente e incollato nella stessa directory di apktool.
S.Thiongane,

1
ho invertito la progettazione del codice ma perché è il nome della classe, la variabile è come aa, bc, ecc. e anche molti errori
user2934930

1
incapace di farlo in cmd
Meghal Agrawal il

qualche altro modo per farlo?
Meghal Agrawal,

2
@ user2934930 Ciò significa che il codice è stato offuscato utilizzando ProGuard.
Cascal,

58

Nessun software e nessun passaggio eccessivo.

Carica il tuo APK e ottieni tutte le risorse da questo sito.

https://www.apkdecompilers.com/

Questo sito Web decompilerà il codice incorporato nei file APK ed estrarrà tutte le altre risorse nel file.

nota: decompilo il mio file APK e ottengo il codice entro un miniute da questo sito Web

Aggiornamento 1 :

Ho trovato un altro sito di decompilatore online,

http://www.javadecompilers.com/apk/ - Non funziona continuamente chiedendo il blocco dei popup

Aggiornamento 2:

Ho trovato l'app apk decompiler nel Play Store,

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

Possiamo decompilare i file apk nel nostro telefono Android. e inoltre siamo in grado di visualizzare i file java e xml in questa applicazione

Aggiornamento 3:

Possiamo usare un'altra opzione Analizza la funzione APK dalla versione 2.2 di Android Studio

Crea -> Analizza APK -> Seleziona il tuo APK -> dà risultati

inserisci qui la descrizione dell'immagine


3
nell'ultimo metodo non possiamo aprire la classe Java, mostra solo i nomi dei metodi
Choletski

@Choletski stai provando lo ShowJava? se no prova e aggiornami
Ranjith Kumar

@RanjithKumar ha una dimensione APK limitata a 50 MB .. ho un APK da 85 MB da decompilare.
Ravi Sharma


1
Come eseguire quel progetto decompilato in Android Studio? qualcuno può per favore scrivere di questo.
Mayur Kukadiya,


4

Non proprio. Esistono diverse suite di disassemblatori / decompilatori di dex come smali o dex2jar che genereranno output semi-umanizzabili (nel caso di dex2jar, è possibile ottenere il codice java attraverso l'uso di qualcosa come JD-GUI ma il processo è non perfetto ed è molto improbabile che tu sia in grado di ricreare al 100% il tuo codice sorgente, ma potrebbe potenzialmente darti un posto per iniziare a ricostruire il tuo albero dei sorgenti.


@MAC: non ha bisogno del file APK di origine !!
Shashank Kadne,

2
@ShashankKadne potrebbe essere che non sto riprendendo le mie parole
MAC

3

Sì, puoi riavere il tuo progetto. Rinomina il yourproject.apkfile in yourproject.zipe otterrai tutti i file all'interno di quel file ZIP. Stiamo modificando l'estensione del file da .apk a .zip. Da quel file ZIP, estrarre il classes.dexfile e decompilarlo come segue.

Innanzitutto, è necessario uno strumento per estrarre tutte le classi (compilate) sul DEX in un JAR. Ce n'è uno chiamato dex2jar , realizzato da uno studente cinese.

Quindi, è possibile utilizzare JD-GUI per decompilare le classi in JAR in codice sorgente. Il codice sorgente risultante dovrebbe essere abbastanza leggibile, poiché dex2jar applica alcune ottimizzazioni.


3

Per la piattaforma Android, puoi provare ShowJava , disponibile sul Play Store.

Puoi consultare il codice generato attraverso l'interfaccia dell'app e la struttura dei file e delle cartelle java generati sono archiviati in una ShowJavacartella /sdcard, insieme al risultante.jar file dalla conversione.

L'app è gratuita con un banner pubblicitario nella parte inferiore della vista principale, ma è presente un'opzione di acquisto in-app (3,99 $) per rimuoverla. L'acquisto in-app non aggiunge alcuna funzionalità oltre alla rimozione del banner pubblicitario.

Divulgazione: non sono lo sviluppatore dell'app né sono affiliato con lui in alcun modo.


Di solito lo uso per ... Bella app
Rahul Kushwaha,

2

Seguire i passaggi seguenti per fare questo o semplicemente usare apkToJava gem per questo processo, si occupa anche di installare gli strumenti necessari per farlo funzionare.

  • converti il ​​file apk in zip
  • decomprimere il file
  • estrarre classes.dex da esso
  • usa dex per jar per convertire classes.dex in file jar
  • usa jadx gui per aprire il file jar come codice sorgente java

2

Se stai cercando un'alternativa professionale, dai un'occhiata a JEB Decompiler dal software PNF.

Esiste una versione demo che ti permetterà di decompilare la maggior parte del codice.


2

Di seguito sono riportati alcuni degli strumenti che è possibile utilizzare per eseguire il reverse engineering da un file APK al codice sorgente:

  1. Dex2jar
  2. Decompilatore Java
  3. Apktool
  4. Apk Analyzer


1

In Android Studio 3.5, è così facile che puoi raggiungerlo in un minuto. di seguito è riportato un processo saggio.

1: Apri Android Studio, premi il pulsante della finestra -> Digita Android Studio -> fai clic sull'icona per aprire la schermata iniziale di Android Studio che sarà simile a questa.

inserisci qui la descrizione dell'immagine

2: Qui puoi vedere un'opzione "Profilo o debug APK" fai clic su di essa e seleziona il tuo file apk e premi ok.

inserisci qui la descrizione dell'immagine

3: Aprirà tutte le tue classi manifest e java con in un minuto a seconda delle dimensioni dell'apk.

inserisci qui la descrizione dell'immagine

Questo è tutto.


questa soluzione non mi dà alcun tipo di file java
kishan verma
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.