Hard drive di laptop saya baru saja mogok dan saya kehilangan semua kode sumber untuk aplikasi yang telah saya kerjakan selama dua bulan terakhir. Yang saya miliki hanyalah file APK yang disimpan di email saya sejak saya mengirimnya ke teman.
Apakah ada cara untuk mengekstrak kode sumber saya dari file APK ini?
android
android-resources
decompiling
apk
Frank Bozzo
sumber
sumber
javac -decompile
, yang kemudian akan sesuai dengan pedoman SO. Tampak bagi saya bahwa jawabannya di luar topik , bukan pertanyaan.Jawaban:
Cara sederhana: gunakan alat online http://www.javadecompilers.com/apk , unggah apk dan dapatkan kode sumber.
Prosedur untuk mendekode file .apk, metode langkah demi langkah:
Langkah 1:
Buat folder baru dan salin file .apk yang ingin Anda dekode.
Sekarang ganti nama ekstensi file .apk ini menjadi .zip (mis. Ganti nama dari filename.apk menjadi filename.zip) dan simpan. Sekarang Anda dapat mengakses file class.dex, dll. Pada tahap ini Anda dapat melihat drawable tetapi bukan file xml dan java, jadi lanjutkan.
Langkah 2:
Sekarang ekstrak file .zip ini di folder yang sama (atau FOLDER BARU).
Unduh dex2jar dan ekstrak ke folder yang sama (atau FOLDER BARU).
Pindahkan file classes.dex ke folder dex2jar.
Sekarang buka command prompt dan ubah direktori ke folder itu (atau FOLDER BARU). Kemudian tulis
d2j-dex2jar classes.dex
(untuk terminal mac atau tulis ubuntu./d2j-dex2jar.sh classes.dex
) dan tekan enter. Anda sekarang memiliki file classes.dex.dex2jar di folder yang sama.Unduh java decompiler , klik dua kali pada jd-gui, klik pada file yang terbuka, dan buka file classes.dex.dex2jar dari folder itu: sekarang Anda mendapatkan file kelas.
Simpan semua file kelas ini (Dalam jd-gui, klik File -> Simpan Semua Sumber) dengan nama src. Pada tahap ini Anda mendapatkan sumber java tetapi file .xml masih tidak dapat dibaca, jadi lanjutkan.
Langkah 3:
Sekarang buka folder baru lainnya
Masukkan file .apk yang ingin Anda dekode
Unduh versi terbaru apktool DAN jendela instalasi apktool (keduanya dapat diunduh dari tautan yang sama) dan letakkan di folder yang sama
Buka jendela perintah
Sekarang jalankan perintah seperti
apktool if framework-res.apk
(jika Anda tidak mendapatkannya di sini ) dan selanjutnyaapktool d myApp.apk
(di mana myApp.apk menunjukkan nama file yang ingin Anda dekode)sekarang Anda mendapatkan folder file di folder itu dan dapat dengan mudah membaca file xml apk.
Langkah 4:
Ini bukan langkah apa pun, cukup salin konten dari kedua folder (dalam hal ini, kedua folder baru) ke satu
dan nikmati kode sumber ...
sumber
framework-res.apk
. Unduh dari siniIni adalah deskripsi alternatif - kalau-kalau ada yang terjebak dengan deskripsi di atas. Ikuti langkah-langkahnya:
apktool.bat
(atauapktool
untuk Linux) danapktool_<version>.jar
dari http://ibotpeaches.github.io/Apktool/install/apktool.jar
dan letakkan kedua file di folder yang samacmd.exe
) dan ubah ke folder itu; memverifikasi bahwa Java Environment diinstal (untuk Linux periksa catatan tentang perpustakaan yang diperlukan juga)apktool decode [apk file]
Hasil antara : file sumber daya,
AndroidManifest.xml
Hasil antara :
classes.dex
dex2jar-0.0.9.15.zip
dari http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=classes.dex
kedex2jar.bat
(atau masukkan<path_to>\dex2jar.bat classes.dex
dalam kotak DOS; untuk penggunaan Linuxdex2jar.sh
)Hasil antara :
classes_dex2jar.jar
classes_dex2jar.jar
(mungkin opsional tergantung pada dekompiler yang digunakan)Hasil : kode sumber
Catatan: tidak diijinkan mendekompilasi paket pihak ketiga; panduan ini dimaksudkan untuk memulihkan kode sumber pribadi dari file APK saja; akhirnya, kode yang dihasilkan kemungkinan besar akan dikaburkan
sumber
apktool
mengembalikansmali
file? Bagaimana cara mendapatkanjava
file?Meskipun Anda mungkin dapat mendekompilasi
APK
file Anda, Anda mungkin akan menemukan satu masalah besar:itu tidak akan mengembalikan kode yang Anda tulis. Alih-alih itu akan mengembalikan apa pun yang dimasukkan oleh kompiler, dengan variabel yang diberi nama acak, serta fungsi yang diberi nama acak. Mungkin perlu waktu lebih lama untuk mencoba mendekompilasi dan mengembalikannya ke kode yang Anda miliki, daripada memulai dari awal.
Sayangnya, hal-hal seperti ini telah membunuh banyak proyek.
Untuk masa depan, saya sangat merekomendasikan mempelajari Sistem Kontrol Versi, seperti CVS , SVN dan git dll
dan bagaimana cara mencadangkannya.
sumber
Ada juga aplikasi baru di Play Store yang memungkinkan untuk mendekompilasi apk (aplikasi sistem juga) dan melihat kode sumber langsung di smartphone Anda. Ini menyimpan file ke kartu SD Anda sehingga Anda dapat melihatnya di komputer Anda juga. Tidak memerlukan root atau yang lainnya.
Cukup instal dan bersenang-senanglah. Saya pikir ini adalah cara termudah untuk mendekompilasi aplikasi.
sumber
apktool adalah hal terbaik yang bisa Anda coba. Saya telah menyimpan beberapa xml dengan itu, tetapi jujur saya tidak tahu bagaimana itu akan bekerja dengan kode .java.
Saya akan merekomendasikan Anda untuk memiliki repositori kode bahkan jika Anda adalah satu-satunya pembuat kode. Saya telah menggunakan Project Locker untuk proyek saya sendiri. Ini memberi Anda repo svn dan git gratis.
sumber
Dua artikel ini menjelaskan cara menggabungkan penggunaan
apktool
dandex2jar
untuk mengambilAPK
file dan membuat proyek Eclipse yang dapat membangun dan menjalankannya.Pada dasarnya Anda:
apktool
untuk mengeluarkan file sumber daya dari apkdex2jar
untuk mendapatkan file jar yang berisi kelas-kelas dalam format yang disukai Eclipse.JDGui
untuk melihat kode sumberJDGui
, tempel di kelas di dalam Eclipse dan modifikasisumber
apktool akan berfungsi. Anda bahkan tidak perlu tahu keystore untuk mengekstrak kode sumber (yang agak menakutkan). Kelemahan utama adalah bahwa sumber disajikan dalam format Smali, bukan Java. File lain seperti ikon dan main.xml datang dengan sangat baik dan mungkin perlu waktu Anda untuk setidaknya memulihkannya. Pada akhirnya, Anda kemungkinan besar perlu menulis ulang kode Java Anda dari awal.
Anda dapat menemukan apktool di sini . Cukup unduh apktool dan bantuan yang sesuai (untuk Windows, Linux, atau Mac OS). Saya sarankan menggunakan alat seperti 7-zip untuk membongkar mereka.
sumber
Ada beberapa cara untuk melakukan ini:
Gunakan fitur "Profil atau Debug APK" di Android Studio 3.0.
Ini memungkinkan Anda untuk membuka dan menjelajahi APK di Android Studio. Kelas didekompilasi menjadi smali. Sumber daya tidak diekstraksi dan hal-hal seperti "Pergi ke Definisi", "Temukan Semua Referensi" dan debugging tidak berfungsi tanpa kode sumber (android studio 3.0 canary 9). Beberapa fitur smali tambahan mungkin berfungsi dengan smalidea .
Gunakan jadx .
Jadx mendekompilasi kode dalam APK yang diberikan ke file sumber java.
Gunakan apktool .
Apktool adalah alat baris perintah yang mengekstrak sumber daya dan mendekompilasi kode ke smali untuk apk yang diberikan. Anda dapat mengkompilasi ulang menggunakan apktool juga. Berikut ini contoh tindakannya:
sumber
Mungkin yang mudah untuk melihat sumbernya:
Di Android studio 2.3
Build -> Analyze APK -> Select the apk that you want to decompile
,.Anda akan melihat kode sumbernya.
Tautan untuk referensi:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
sumber
Saya akan menunjukkan kepada Anda cara lain untuk mendekompilasi file .apk .
Anda dapat mengikuti 2 langkah pertama dari " prankul garg ". Jadi, Anda memiliki peluang lain:
Langkah 3 ':
Unduh "JD-GUI" , itu mudah ditemukan. Buka file .jar Anda di "jd-gui.exe". (File> Buka file> 'temukan file .jar Anda '). Setelah prosedur ini, Anda dapat menyimpan semua sumber daya dalam file .zip .
Begitu,
1 - Anda harus mengganti nama file .apk menjadi .zip
2nd - Anda harus men-decode file .dex (jika Anda mau, decode file .apk ke dex2jar , itu mungkin)
3 - Anda harus men-decode file .jar dengan JD-GUI
sumber
Di bawah alat ONLINE :
http://www.javadecompilers.com/apk
itu melakukan SEMUA dengan satu klik: dekompilasi file .java + sumber daya + xml (dalam satu file .zip) dengan decompiler yang sangat baik (jadx mengembalikan kode java di tempat / fungsi di mana kompilasi lain mengembalikan komentar di dalam fungsi seperti "tidak dapat mendekompilasi" atau beberapa assembler android / kode mesin)
sumber
Situs ini https://www.apkdecompilers.com/ melakukannya secara otomatis.
Saya mencoba situs yang disebutkan dalam jawaban yang diterima pertama tetapi itu tidak berhasil untuk saya.
sumber
Saya pribadi merekomendasikan Show Java Android App untuk mendapatkan kode sumber. Anda dapat mengunduhnya dari play store atau dari sini
sumber
Apktool untuk rekayasa balik aplikasi pihak ketiga, tertutup, biner Android.
Ia dapat mendekode sumber daya ke bentuk yang hampir asli dan membangunnya kembali setelah melakukan beberapa modifikasi.
Memungkinkan untuk men-debug kode smali langkah demi langkah. Itu juga membuat bekerja dengan aplikasi lebih mudah karena struktur file seperti proyek dan otomatisasi beberapa tugas berulang seperti membangun apk, dll.
http://ibotpeaches.github.io/Apktool/
sumber
apktool adalah cara untuk pergi. Layanan apktool online juga ada: http://www.javadecompilers.com/apktool
Beberapa batasan, jelas, ada karena 'sifat online' layanan: Anda dapat mengekstrak dan meneliti aset dan file manifes, tetapi tidak mungkin untuk mengkompilasi ulang aplikasi saat ini.
Meski begitu, ini adalah cara mudah untuk 'membuka' aplikasi android.
sumber
Anda dapat mencoba DexPatcher . Bahkan terintegrasi dengan Android Studio. Ini menggunakan Apktool dan Dex2Jar secara internal.
Anda dapat menggunakan alat-alat itu secara mandiri juga. Apktool mendekompilasi apk, dan mengekstrak file .dex, yang selanjutnya dapat dikonversi ke jar menggunakan Dex2Jar. Guci dapat didekompilasi dengan menggunakan JD-GUI . Anda dapat melihat kode Java dengan bantuan alat itu. Meskipun kesamaan kode dekompilasi dengan kode aktual tidak dapat dijamin. Ada beberapa alat pengabaian kode tingkat lanjut yang tersedia di pasaran, yang mengacaukan kode tersebut sehingga menyulitkan untuk mendekompilasi / memahami. misalnya. Proguard
sumber
berdasarkan kondisi Anda, jika apk Android Anda:
Condition1: NOT harden (oleh Tencent Legu / Qihoo 360 / ...)
Choice1: menggunakan layanan online
seperti:
menggunakan www.javadecompilers.com
pergi ke:
untuk secara otomatis memecahkan kode dari apk ke kode sumber java
Langkah:
upload
File apk + klikRun
+ tunggu beberapa saat + klikDownload
untuk mendapatkan zip + unzip ->sources/com/{yourCompanyName}/{yourProjectName}
adalah kode sumber java yang Anda harapkan
Choice2: dekompilasi / crack sendiri
gunakan alat terkait untuk mendekompilasi / crack sendiri:
gunakan
jadx
/jadx-gui
konversiapk
kejava sourcecode
unduh jadx-0.9.0.zip lalu unzip untuk mendapatkannya
bin/jadx
, lalu:jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
sources
danresources
sources/com/{yourCompanyName}/{yourProjectName}
adalah harapan Andajava sourcecode
jadx-0.9.0/bin/jadx-gui
(Linuxjadx-gui.sh
/ Windowsjadx-gui.bat
)apk
filesave all
atausave as Gradle project
misalnya:
Condition2: harden (oleh Tencent Legu / Qihoo 360 / ...)
metode utama
3 steps
:apk/app to dex
dex to jar
jar to java src
penjelasan detail:
Langkah 1:
apk/app to dex
gunakan alat (
FDex2
/ DumpDex) membuang / menghubungkan (satu atau beberapa)dex
file dari menjalankan aplikasiLangkah:
mempersiapkan lingkungan
root
android edFDex2
/ DumpDex ke XPosed dan aktifkanbuang
dex
dari menjalankan aplikasijalankan
FDex2
kemudian klik nama apk Anda untuk mengaktifkannya nanti untuk menangkap / menghubungkan dex/data/data/com/yourCompanyName/yourProjectName
dex
fileLangkah 2:
dex to jar
gunakan alat (
dex2jar
) konversi (khusus, berisi logika aplikasi)dex
file kejar
fileunduh dex2jar punya dex-tools-2.1-SNAPSHOT.zip , unzip
dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh
,sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex
misalnya:
Step3:
jar to java src
gunakan salah satu alat:
konversikan
jar
kejava src
untuk dari efek konversi jar ke java:
Jadx
>Procyon
>CRF
>>JD-GUI
jadi rekomendasikan penggunaan:
Jadx
/jadx-gui
Langkah:
jadx-gui
dex
fileFile
->save all
misalnya:
mengekspor java src:
Penjelasan lebih rinci dapat melihat tutorial online ebook Cina saya :
sumber
Studio Android menawarkan Anda untuk menganalisis file apk apa pun.
1 - Dari menu bangun pilih opsi analisis apk dan pilih file apk. 2 - Ini akan menghasilkan Anda file classes.dex dan file lainnya. 3 - Klik pada class.dex yang akan memberi Anda daftar folder, paket, perpustakaan dan file. 4 - Dari dan pengaturan studio android instal sebuah plugin yang disebut "Dex to Jar" 5 - klik pada file aktivitas apa pun dari proyek yang Anda ekstrak dan pilih dex to jar dari menu build.
Ini akan menghasilkan kode aktual untuk file java Anda.
Bersulang.
sumber
Cara paling sederhana adalah menggunakan Apk OneClick Decompiler. Itu adalah paket alat untuk mendekompilasi & membongkar APK (paket android).
FITUR
PERSYARATAN
Java Runtime Environment (JRE) harus diinstal.
Anda dapat mengunduhnya dari tautan ini Apk OneClick Decompiler
Nikmati itu.
sumber
Saya menemukan yang berikut ini sebagai metode paling sederhana:
sumber
Ada aplikasi untuk itu dan biasanya hanya membutuhkan beberapa klik dan Anda selesai. https://github.com/Nuvolect/DeepDive-Android
Setelah itu Anda dapat menelusuri kode sumber, mengunduhnya ke komputer lain dengan elFinder atau mencarinya menggunakan Lucene.
Selain Jadx memiliki dekompiler CFR dan Fernflower.
sumber
Saya sudah mengemudi sendiri gila selama berhari-hari mencoba untuk mendapatkan dex2jar untuk bekerja pada laptop fedora 31 terhadap apk yang tidak akan berfungsi. Skrip python 3 ini melakukan trik dalam hitungan menit dan menginstal file kelas jd-gui yang dapat dibaca manusia.
http://java-decompiler.github.io/
https://github.com/Storyyeller/enjarify
khususnya, inilah yang saya berlari:
Sekarang kita harus dapat rum berikut untuk mendapatkan file kelas:
Dan untuk memulai jd-gui:
Maka cukup buka file kelas Anda!
sumber
Saya mengembangkan Alat - Code Analyzer, ini berjalan di iPhone / iPad / Mac, untuk menganalisis file Java / Android, https://decompile.io
sumber
Gunakan alat ini http://www.javadecompilers.com/
Namun baru-baru ini, gelombang baru decompiler telah memasuki pasar: Procyon, CFR, JD, Fernflower, Krakatau, Candle.
Berikut daftar dekompiler yang disajikan di situs ini:
CFR - Gratis, tidak ada kode sumber yang tersedia, http://www.benf.org/other/cfr/ Penulis: Lee Benfield
Dekompiler yang diperbarui dengan sangat baik! CFR mampu mendekompilasi fitur-fitur Java modern - modul Java 9, Java 8 lambdas, Java 7 String switches, dll. Ia bahkan dapat mengubah file kelas dari bahasa JVM lainnya ke Java!
JD - gratis untuk penggunaan nonkomersial, http://jd.benow.ca/ Penulis: Emmanuel Dupuy
Diperbarui pada tahun 2015. Memiliki antarmuka visual dan plugin untuk Eclipse dan IntelliJ. Ditulis dalam C ++, jadi sangat cepat. Mendukung Java 5.
Procyon - open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler Penulis: Mike Strobel
Fernflower - open-source, https://github.com/fesh0r/fernflower Penulis: Egor Ushakov
Diperbarui pada tahun 2015. Dekompiler Java analitik yang sangat menjanjikan, kini menjadi bagian integral dari IntelliJ 14. ( https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler ) Mendukung Java hingga versi 6 (Anotasi, generik, enum)
JAD - diberikan di sini hanya karena alasan historis. Gratis, tidak ada kode sumber yang tersedia, mirror unduhan jad Pengarang: Pavel Kouznetsov
sumber