Bagaimana seseorang dapat mendekompilasi file Android DEX (VM bytecode) ke dalam kode sumber Java yang sesuai?
706
Bagaimana seseorang dapat mendekompilasi file Android DEX (VM bytecode) ke dalam kode sumber Java yang sesuai?
Jawaban:
Mudah
Dapatkan alat ini:
1) dex2jar untuk menerjemahkan file dex ke file jar
2) jd-gui untuk melihat file java di toples
Kode sumber cukup mudah dibaca karena dex2jar membuat beberapa optimasi.
Prosedur:
Dan inilah prosedur bagaimana mendekompilasi:
Langkah 1:
Konversikan classes.dex di test_apk-debug.apk ke test_apk-debug_dex2jar.jar
dokumentasi dex2jar
Langkah 2:
Buka toples di JD-GUI
sumber
Untuk memperjelas, ada dua jalur utama yang mungkin Anda ambil di sini tergantung pada apa yang ingin Anda capai:
Dekompilasi bytecode Dalvik (dex) menjadi sumber Java yang dapat dibaca. Anda dapat melakukan ini dengan mudah dengan dex2jar dan jd-gui , seperti yang disebutkan fred. Sumber yang dihasilkan berguna untuk membaca dan memahami fungsionalitas aplikasi, tetapi kemungkinan tidak akan menghasilkan kode yang dapat digunakan 100%. Dengan kata lain, Anda dapat membaca sumbernya, tetapi Anda tidak dapat benar-benar memodifikasi dan mengemasnya kembali. Perhatikan bahwa jika sumber telah dikaburkan dengan proguard, kode sumber yang dihasilkan akan jauh lebih sulit untuk dilepaskan.
Alternatif utama lainnya adalah membongkar bytecode ke smali , bahasa rakitan yang dirancang untuk tujuan ini. Saya telah menemukan bahwa cara termudah untuk melakukan ini adalah dengan apktool . Setelah Anda menginstal apktool, Anda bisa mengarahkannya ke file apk, dan Anda akan mendapatkan kembali file smali untuk setiap kelas yang terkandung dalam aplikasi. Anda dapat membaca dan memodifikasi smali atau bahkan mengganti kelas sepenuhnya dengan menghasilkan smali dari sumber Java baru (untuk melakukan ini, Anda bisa mengkompilasi sumber .java Anda ke file .class dengan javac, lalu mengonversi file .class Anda ke file .dex dengan Android dx compiler, dan kemudian menggunakan baksmali (smali disassembler) untuk mengkonversi file .dex ke file .smali, seperti yang dijelaskan dalam pertanyaan ini. Mungkin ada jalan pintas di sini). Setelah selesai, Anda dapat dengan mudah mengemas apk cadangan dengan apktool lagi. Perhatikan bahwa apktool tidak menandatangani apk yang dihasilkan, jadi Anda harus menjaganya seperti aplikasi Android lainnya .
Jika Anda memilih rute smali, Anda mungkin ingin mencoba APK Studio , sebuah IDE yang mengotomatiskan beberapa langkah di atas untuk membantu Anda mendekompilasi dan mengkompilasi ulang apk dan menginstalnya pada perangkat.
Singkatnya, pilihan Anda cukup banyak untuk mendekompilasi ke Jawa, yang lebih mudah dibaca tetapi kemungkinan tidak dapat dibalikkan, atau untuk dibongkar menjadi smali, yang lebih sulit dibaca tetapi jauh lebih fleksibel untuk membuat perubahan dan mengemas kembali aplikasi yang dimodifikasi. Pendekatan mana yang Anda pilih akan tergantung pada apa yang ingin Anda capai.
Terakhir, saran dari berani juga perlu diperhatikan. Ini adalah alat penargetan ulang untuk mengonversi file .dex dan .apk ke file java .class, sehingga file tersebut dapat dianalisis menggunakan alat analisis statis java biasa.
sumber
Saya sebenarnya akan merekomendasikan pergi di sini: https://github.com/JesusFreke/smali
Ini menyediakan BAKSMALI, yang merupakan alat rekayasa balik paling baik untuk file DEX. Itu dibuat oleh JesusFreke, pria yang menciptakan ROM terkenal untuk Android.
sumber
./apktool d myprogram.apk
. Lihat jawaban saya .Sebuah versi lebih lengkap dari fred 's jawabannya :
Cara manual
Pertama, Anda membutuhkan alat untuk mengekstrak semua kelas (dikompilasi) pada DEX ke JAR.
Ada satu yang disebut dex2jar , yang dibuat oleh siswa Cina.
Kemudian, Anda bisa menggunakan jd-gui untuk mendekompilasi kelas pada JAR ke kode sumber.
Sumber yang dihasilkan harus cukup mudah dibaca, karena dex2jar menerapkan beberapa optimasi.
Cara otomatis
Anda dapat menggunakan APKTool . Ini akan secara otomatis mengekstrak semua kelas (
.dex
), sumber daya (.asrc
), lalu itu akan mengkonversi XML biner ke XML yang dapat dibaca manusia , dan itu juga akan membongkar kelas untuk Anda.Pembongkaran akan selalu lebih kuat daripada dekompilasi, terutama dengan
JAR yang dikaburkan dengan Pro Guard!
Katakan saja APKTool untuk mendekode APK ke dalam direktori, lalu ubah apa yang Anda inginkan,
dan akhirnya kodekan kembali ke APK. Itu saja.
: Penting APKTool dissassembles . Itu tidak terurai .
Kode yang dihasilkan tidak akan menjadi sumber Java.
Tetapi Anda harus bisa membacanya, dan bahkan mengeditnya jika Anda terbiasa dengan jasmin .
Jika Anda ingin sumber Java, silakan kunjungi cara Manual .
sumber
Kadang-kadang Anda mendapatkan kode yang rusak, saat menggunakan
dex2jar
/apktool
, terutama di loop. Untuk menghindari ini, gunakan jadx , yang mendekompilasi bytecode dalvik ke dalam kode sumber java, tanpa membuat.jar
/.class
file terlebih dahulu sepertidex2jar
halnya (apktool menggunakan dex2jar menurut saya). Ini juga open-source dan dalam pengembangan aktif. Bahkan memiliki GUI, untuk GUI-fanatik. Cobalah!sumber
javac "$(find . -name '*.java')"
?Saya sudah menggunakan
Tapi tidak ada yang mengalahkan alat Google sendiri
1) Android Studio 2.x: build> analysis apk
2) Android Studio 3.0: Profil atau Debug APK
sumber
Karena tidak ada yang menyebutkan ini, ada satu alat lagi: beranda DED
Instal cara-dan beberapa penjelasan: Instalasi .
Itu digunakan dalam studi yang cukup menarik tentang keamanan aplikasi pasar atas (tidak benar-benar terkait, hanya jika Anda penasaran): Sebuah Survei Keamanan Aplikasi Android
sumber
Karena
Dheeraj Bhaskar
jawaban itu relatif lama seperti bertahun-tahun yang lalu.Inilah jawaban terakhir saya (2019 tahun):
Logika Utama
dari
dex
kejava sourcecode
, saat ini memiliki dua jenis solusi:One Step
: langsung dikonversidex
kejava sourcecode
Two Step
: konversi pertamadex
kejar
, konversi keduajar
kejava sourcecode
Satu langkah solusi:
dex
langsung kejava sourcecode
Alat
Proses
bin
folder dapat melihat baris perintahjadx
atau versi GUIjadx-gui
, klik dua kali untuk menjalankan versi GUI:jadx-gui
dex
filekemudian dapat menampilkan kode sumber java:
File
->save as gradle project
lalu dapatkan kode sumber java:
Solusi dua langkah
Langkah1:
dex
kejar
Alat
Proses
unduh dex2jar zip , unzip dapatkan
d2j-dex2jar.sh
, lalu:apk
untukjar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
untukjar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
contoh:
Step2:
jar
tojava sourcecode
Alat
many
kode akan mendekompilasi kesalahanminor
kode akan mendekompilasi kesalahanno
kesalahan dekompilasi kodeProcyon
Proses
di sini demo
Procyon
konversi jar ke kode sumber java:unduh procyon-decompiler-0.5.34.jar
lalu gunakan sintaks:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
contoh:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
menggunakan editor VSCode untuk membuka kode sumber yang diekspor, lihat seperti ini:
Kesimpulan
Konversi ketepatan:
Jadx
>Procyon
>CRF
>JD-GUI
Rekomendasikan penggunaan: (Solusi satu langkah)
Jadx
untuk penjelasan lebih rinci, silakan lihat ebook bahasa Mandarin online saya : 安卓 应用 的 安全 和 破解
sumber
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
baru saja mendapatkan pengecualian:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
ok atau tidak?>d2j-dex2jar.bat file.dex
tetapi tidak ok. mungkin karena.dex
file saya disalindalvik-cache
?dex is copied from dalvik-cache
, seharusnyadex is decompiled from apk
Setelah Anda mengunduh file APK Anda, Anda perlu melakukan langkah-langkah berikut untuk mendapatkan kode / dokumen java yang dapat diedit.
sumber
Dengan Dedexer , Anda dapat membongkar
.dex
file tersebut menjadi bytecode dalvik (.ddx
).Dekompilasi ke Jawa tidak mungkin sejauh yang saya tahu.
Anda dapat membaca tentang byalecode dalvik di sini .
sumber
Android Reverse Engineering dimungkinkan . Ikuti langkah-langkah ini untuk mendapatkan file .java dari file apk.
Langkah 1 . Menggunakan dex2jar
dex2jar sampleApp.apk
Langkah 2 . Mengurai .jar menggunakan JD-GUI
sumber
Paket Debian have Python terbaru
androguard
:Instal paket yang sesuai:
Dekompilasi file DEX:
Ekstrak
classes.dex
dari Apk + Dekompilasi:File Apk tidak lebih dari arsip Java (JAR), Anda dapat mengekstrak file dari arsip melalui:
sumber
Banyak yang telah berubah sejak sebagian besar jawaban ini diposting. Sekarang-a-hari ada banyak alat mudah dengan GUI, seperti ini:
Tempat terbaik untuk menemukannya adalah di forum Pengembang XDA.
sumber
Anda dapat mencoba JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), ini adalah alat yang sempurna untuk dekompilasi DEX.
Dan ya, itu juga tersedia online di (saya: 0)) situs baru: http://www.javadecompilers.com/apk/
sumber
Ini dapat dilakukan dalam lima langkah berikut:
Permata ini melakukan hal-hal ini untuk Anda secara otomatis bahkan pemasangan alat yang diperlukan
sumber
Metode termudah untuk mendekompilasi aplikasi android adalah dengan mengunduh aplikasi bernama ShowJava dari playstore. Cukup pilih aplikasi yang perlu didekompilasi dari daftar aplikasi. Ada tiga dekompiler berbeda yang dapat Anda gunakan untuk mendekompilasi aplikasi yaitu -
sumber
Jika Anda tidak ingin mengunduh dex2jar, gunakan saja
apk_grabber
skrip python untuk mendekompilasi apk apa pun ke dalam file jar. Kemudian Anda membacanya dengan jd-gui.sumber