È possibile decompilare un file .apk Android?


86

Gli utenti sono in grado di convertire il file apk della mia applicazione nel codice effettivo? Se lo fanno, c'è un modo per impedirlo?


1
Esistono diversi metodi per decompilare l'APK . Ho solo APKTool più spesso, è il migliore e più potente. È molto facile modificare i file apk con esso.
Taranfx

Ho scritto un post sul blog qui: codexplo.wordpress.com/2012/03/15/… ma ancora una volta, sarebbe difficile per il codice offuscato ...
rokonoid


Risposte:


80

Innanzitutto, un file apk è solo un file jar modificato. Quindi la vera domanda è: possono decompilare i file dex all'interno. La risposta è una specie di. Esistono già disassemblatori, come dedexer e smali . Puoi aspettarti che questi migliorino solo e in teoria dovrebbe essere possibile decompilare alla sorgente Java effettiva (almeno a volte). Vedere la domanda precedente sulla decompilazione di DEX in codice sorgente Java .

Quello che dovresti ricordare è che l'offuscamento non funziona mai. Scegli una buona licenza e fai del tuo meglio per farla rispettare attraverso la legge. Non perdere tempo con misure tecniche inaffidabili.


45
Mai dire mai. L'offuscamento non fermerà un ladro determinato ma rallenterà o scoraggerà molti altri. L'elaborazione con Proguard è un modo semplice e AFFIDABILE per offuscare il tuo codice e come bonus lo ottimizzerà anche. Ed è incluso nell'SDK Android, quindi è approvato da Google.
Barry Fruitman

3
L'offuscamento funziona sicuramente, ma devi definire più chiaramente qual è il tuo obiettivo. Ovviamente l'unico modo in cui potresti mantenere il tuo codice sorgente veramente al sicuro è di non concedere mai l'accesso a nessuno, server o client. Nota che Proguard non funziona bene sulle classi che hanno riferimenti nei file XML. È necessario utilizzare l'offuscamento manuale per aggirare questo problema.
MattC

35

È possibile la decompilazione del file APK. Ma potrebbe essere difficile capire il codice se è offuscato.

ApkTool per visualizzare le risorse all'interno del file APK

  • Estrae AndroidManifest.xml e tutto nella cartella res (layout file xml, immagini, html usati su webview ecc ..)
  • comando: apktool.bat d sampleApp.apk
  • NOTA: puoi farlo utilizzando l'utilità zip come 7-zip. Ma estrae anche il file .smali di tutti i file .class.

Utilizzando dex2jar

  • Genera file .jar dal file .apk, abbiamo bisogno di JD-GUI per visualizzare il codice sorgente da questo .jar.
  • comando: dex2jar sampleApp.apk

Decompilazione di .jar utilizzando JD-GUI

  • decompila i file .class (offuscati - in un caso dell'app per Android, ma un codice originale leggibile si ottiene in un caso di un altro file .jar). cioè, otteniamo .java dall'applicazione.

apktool non sputa i file sorgente java! Solo smali
IgorGanapolsky

1
come ho già detto nella risposta, apktool crea .jar da .apk e dobbiamo usare uno strumento simile a JD-GUI per decompilare .jar per ottenere file sorgente .java.
gtiwari333

1
mi hai salvato la vita! che post fantastico! Ho perso gli ultimi due giorni di codice a causa di un SSD guasto (purtroppo non mi sono impegnato con git). Tuttavia, avevo l'apk e ora ho la mia fonte, intendiamoci, un po 'diversa, ma la fonte!
farcrats

3

Posso anche aggiungere che al giorno d'oggi è possibile decompilare l'applicazione Android online, senza bisogno di software!

Ecco 2 opzioni per te:


decompileandroid.com è offline (quando carichi l'apk avrai problemi a scaricarlo di nuovo) e javadecompilers.com/apk ha messo il mio apk in coda per molto tempo. Sono andato offline, poi online, era ancora in coda. Ho cancellato tutta la cronologia di navigazione e ora l'apk che ho caricato per la seconda volta è in coda.
iOSAndroidWindowsMobileAppsDev

1

Scarica questo strumento jadx https://sourceforge.net/projects/jadx/files/

Decomprimilo e poi nella cartella lib esegui il file jadx-gui-0.6.1.jar ora sfoglia il tuo file apk. E 'fatto. Automaticamente l'apk lo decompilerà e lo salverà premendo il pulsante Salva. Spero che funzioni per te. Grazie


0

A volte si ottiene codice danneggiato, quando si usa dex2jar/ apktool, in particolare nei cicli. Per evitare ciò, usa jadx , che decompila dalvik bytecode nel codice sorgente java, senza creare prima un file .jar/ .classcome dex2jarfa (apktool usa dex2jar credo). È anche open-source e in fase di sviluppo attivo. Ha anche una GUI, per i fanatici della GUI. Provalo!


0

Gli utenti sono in grado di convertire il file apk della mia applicazione nel codice effettivo?

sì.

Le persone possono utilizzare vari strumenti per:

  • analisi: il tuo apk
  • decodifica / hackera il tuo apk
    • usando FDex2per scaricaredex file
      • quindi utilizzando dex2jarper convertire injar
        • quindi utilizzando jadxper convertire al javacodice sorgente

Se lo fanno, c'è un modo per impedirlo?

sì. Diversi modi (possono essere combinati) per prevenire (un certo grado) questo:

  • basso livello: offuscamento del codice
    • utilizzando Android ProGuard
  • alto livello: usa lo scenario di harden Android

Maggiori dettagli possono fare riferimento al mio tutorial cinese :安卓 应用 的 安全 和 破解


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.