Bagaimana seseorang dapat mendekompilasi file Android DEX (VM bytecode) ke dalam kode sumber Java yang sesuai?
Bagaimana seseorang dapat mendekompilasi file Android DEX (VM bytecode) ke dalam kode sumber Java yang sesuai?
Jawaban:
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.
Dan inilah prosedur bagaimana mendekompilasi:
Konversikan classes.dex di test_apk-debug.apk ke test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Catatan 1: Di mesin Windows semua
.sh
skrip diganti oleh.bat
skripCatatan 2: Di linux / mac jangan lupa tentang
sh
ataubash
. Perintah penuh harus:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Catatan 3: Juga, ingatlah untuk menambahkan izin eksekusi ke
dex2jar-X.X
direktori misalnyasudo chmod -R +x dex2jar-2.0
Buka toples di JD-GUI
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.
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.
./apktool d myprogram.apk
. Lihat jawaban saya .
Sebuah versi lebih lengkap dari fred 's jawabannya :
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.
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 .
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 seperti dex2jar
halnya (apktool menggunakan dex2jar menurut saya). Ini juga open-source dan dalam pengembangan aktif. Bahkan memiliki GUI, untuk GUI-fanatik. Cobalah!
javac "$(find . -name '*.java')"
?
Saya sudah menggunakan
Tapi tidak ada yang mengalahkan alat Google sendiri
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
Karena Dheeraj Bhaskar
jawaban itu relatif lama seperti bertahun-tahun yang lalu.
Inilah jawaban terakhir saya (2019 tahun):
dari dex
ke java sourcecode
, saat ini memiliki dua jenis solusi:
One Step
: langsung dikonversi dex
kejava sourcecode
Two Step
: konversi pertama dex
ke jar
, konversi kedua jar
kejava sourcecode
dex
langsung kejava sourcecode
bin
folder dapat melihat baris perintah jadx
atau versi GUI jadx-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:
dex
kejar
unduh dex2jar zip , unzip dapatkan d2j-dex2jar.sh
, lalu:
apk
untuk jar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
untuk jar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
contoh:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar
tojava sourcecode
many
kode akan mendekompilasi kesalahanminor
kode akan mendekompilasi kesalahanno
kesalahan dekompilasi kode
Procyon
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:
Konversi ketepatan: Jadx
> Procyon
> CRF
>JD-GUI
Rekomendasikan penggunaan: (Solusi satu langkah) Jadx
untuk penjelasan lebih rinci, silakan lihat ebook bahasa Mandarin online saya : 安卓 应用 的 安全 和 破解
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 disalin dalvik-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.
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 .
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
Paket Debian have Python terbaru androguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
Instal paket yang sesuai:
sudo apt-get install androguard python-networkx
Dekompilasi file DEX:
$ androdd -i classes.dex -o ./dir-for-output
Ekstrak classes.dex
dari Apk + Dekompilasi:
$ androdd -i app.apk -o ./dir-for-output
File Apk tidak lebih dari arsip Java (JAR), Anda dapat mengekstrak file dari arsip melalui:
$ unzip app.apk -d ./dir-for-output
Banyak yang telah berubah sejak sebagian besar jawaban ini diposting. Sekarang-a-hari ada banyak alat mudah dengan GUI, seperti ini:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Tempat terbaik untuk menemukannya adalah di forum Pengembang XDA.
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/
Ini dapat dilakukan dalam lima langkah berikut:
Permata ini melakukan hal-hal ini untuk Anda secara otomatis bahkan pemasangan alat yang diperlukan
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 -
CFR 0,110, JaDX 0.6.1 atau FernFlower (dekompiler analitik).
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.